@saltcorn/server 0.7.4 → 0.8.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/app.js +18 -11
  2. package/auth/admin.js +370 -120
  3. package/auth/roleadmin.js +5 -23
  4. package/auth/routes.js +40 -15
  5. package/locales/de.json +1049 -273
  6. package/locales/en.json +58 -3
  7. package/locales/es.json +134 -134
  8. package/locales/it.json +6 -1
  9. package/locales/ru.json +44 -7
  10. package/markup/admin.js +46 -42
  11. package/markup/forms.js +4 -3
  12. package/package.json +8 -7
  13. package/public/blockly.js +19 -31
  14. package/public/diagram_utils.js +530 -0
  15. package/public/gridedit.js +4 -1
  16. package/public/jquery-menu-editor.min.js +112 -112
  17. package/public/saltcorn-common.js +31 -8
  18. package/public/saltcorn.css +11 -0
  19. package/public/saltcorn.js +211 -70
  20. package/restart_watcher.js +1 -0
  21. package/routes/actions.js +6 -14
  22. package/routes/admin.js +229 -79
  23. package/routes/api.js +19 -2
  24. package/routes/common_lists.js +137 -134
  25. package/routes/delete.js +6 -5
  26. package/routes/diagram.js +43 -117
  27. package/routes/edit.js +5 -10
  28. package/routes/fields.js +63 -29
  29. package/routes/files.js +137 -101
  30. package/routes/homepage.js +2 -2
  31. package/routes/infoarch.js +2 -2
  32. package/routes/list.js +12 -13
  33. package/routes/page.js +16 -3
  34. package/routes/pageedit.js +13 -8
  35. package/routes/scapi.js +1 -1
  36. package/routes/search.js +1 -1
  37. package/routes/tables.js +9 -14
  38. package/routes/tag_entries.js +31 -10
  39. package/routes/tags.js +10 -10
  40. package/routes/tenant.js +114 -50
  41. package/routes/utils.js +12 -0
  42. package/routes/view.js +3 -4
  43. package/routes/viewedit.js +57 -55
  44. package/serve.js +5 -0
  45. package/tests/admin.test.js +6 -2
  46. package/tests/auth.test.js +20 -0
  47. package/tests/fields.test.js +1 -0
  48. package/tests/files.test.js +11 -20
  49. package/tests/tenant.test.js +12 -2
  50. package/tests/viewedit.test.js +15 -1
@@ -39,22 +39,13 @@ describe("files admin", () => {
39
39
  await request(app)
40
40
  .get("/files")
41
41
  .set("Cookie", loginCookie)
42
- .expect(toInclude("Size (KiB)"));
42
+ .expect(toInclude("Upload file"));
43
43
  });
44
44
  it("download file", async () => {
45
45
  const app = await getApp({ disableCsrf: true });
46
46
  const loginCookie = await getStaffLoginCookie();
47
47
  await request(app)
48
- .get("/files/download/2")
49
- .set("Cookie", loginCookie)
50
- .expect(toSucceed());
51
- });
52
-
53
- it("serve file", async () => {
54
- const app = await getApp({ disableCsrf: true });
55
- const loginCookie = await getStaffLoginCookie();
56
- await request(app)
57
- .get("/files/serve/2")
48
+ .get("/files/download/rick.png")
58
49
  .set("Cookie", loginCookie)
59
50
  .expect(toSucceed());
60
51
  });
@@ -71,38 +62,38 @@ describe("files admin", () => {
71
62
  const app = await getApp({ disableCsrf: true });
72
63
  const loginCookie = await getStaffLoginCookie();
73
64
  await request(app)
74
- .get("/files/serve/22")
65
+ .get("/files/serve/missingfile.foo")
75
66
  .set("Cookie", loginCookie)
76
67
  .expect(404);
77
68
  });
78
69
  it("not serve file to public", async () => {
79
70
  const app = await getApp({ disableCsrf: true });
80
- await request(app).get("/files/serve/2").expect(toRedirect("/"));
71
+ await request(app).get("/files/serve/rick.png").expect(404);
81
72
  });
82
73
  it("not download file to public", async () => {
83
74
  const app = await getApp({ disableCsrf: true });
84
- await request(app).get("/files/download/2").expect(toRedirect("/"));
75
+ await request(app).get("/files/download/rick.png").expect(404);
85
76
  });
86
77
  it("set file min role", async () => {
87
78
  const app = await getApp({ disableCsrf: true });
88
79
  const loginCookie = await getAdminLoginCookie();
89
80
  await request(app)
90
- .post("/files/setrole/2")
81
+ .post("/files/setrole/rick.png")
91
82
  .set("Cookie", loginCookie)
92
83
  .send("role=10")
93
- .expect(toRedirect("/files"));
84
+ .expect(toRedirect("/files?dir=."));
94
85
  });
95
86
  it("serve file to public after role change", async () => {
96
87
  const app = await getApp({ disableCsrf: true });
97
- await request(app).get("/files/serve/2").expect(toSucceed());
88
+ await request(app).get("/files/serve/rick.png").expect(toSucceed());
98
89
  });
99
90
  it("delete file", async () => {
100
91
  const app = await getApp({ disableCsrf: true });
101
92
  const loginCookie = await getAdminLoginCookie();
102
93
  await request(app)
103
- .post("/files/delete/2")
94
+ .post("/files/delete/rick.png")
104
95
  .set("Cookie", loginCookie)
105
- .expect(toRedirect("/files"));
96
+ .expect(toRedirect("/files?dir=."));
106
97
  });
107
98
  it("upload file", async () => {
108
99
  const app = await getApp({ disableCsrf: true });
@@ -112,7 +103,7 @@ describe("files admin", () => {
112
103
  .set("Cookie", loginCookie)
113
104
  .attach("file", Buffer.from("helloiamasmallfile", "utf-8"))
114
105
 
115
- .expect(toRedirect("/files"));
106
+ .expect(toRedirect("/files?dir=."));
116
107
  });
117
108
  });
118
109
  describe("files edit", () => {
@@ -1,3 +1,4 @@
1
+ // File: tenant.test.js
1
2
  const db = require("@saltcorn/data/db");
2
3
  const request = require("supertest");
3
4
 
@@ -5,14 +6,16 @@ const getApp = require("../app");
5
6
  const {
6
7
  toRedirect,
7
8
  getAdminLoginCookie,
8
- getStaffLoginCookie,
9
+ //getStaffLoginCookie,
9
10
  itShouldRedirectUnauthToLogin,
10
11
  toInclude,
11
- toNotInclude,
12
+ //toNotInclude,
12
13
  } = require("../auth/testhelp");
13
14
  const { getState } = require("@saltcorn/data/db/state");
14
15
 
15
16
  afterAll(db.close);
17
+ jest.setTimeout(10000);
18
+
16
19
 
17
20
  beforeAll(async () => {
18
21
  if (!db.isSQLite) {
@@ -38,6 +41,7 @@ describe("tenant routes", () => {
38
41
  .send("subdomain=test2")
39
42
  .expect(toInclude("Success"));
40
43
  });
44
+
41
45
  it("creates tenant with capital letter", async () => {
42
46
  db.enable_multi_tenant();
43
47
  await getState().setConfig("role_to_create_tenant", "10");
@@ -49,6 +53,7 @@ describe("tenant routes", () => {
49
53
  .expect(toInclude("Success"));
50
54
  db.set_sql_logging(false);
51
55
  });
56
+
52
57
  it("rejects existing tenant", async () => {
53
58
  db.enable_multi_tenant();
54
59
  await getState().setConfig("role_to_create_tenant", "10");
@@ -69,6 +74,7 @@ describe("tenant routes", () => {
69
74
  .set("Cookie", loginCookie)
70
75
  .expect(toInclude("peashoot"));
71
76
  });
77
+
72
78
  it("show tenant info", async () => {
73
79
  const loginCookie = await getAdminLoginCookie();
74
80
 
@@ -78,6 +84,7 @@ describe("tenant routes", () => {
78
84
  .set("Cookie", loginCookie)
79
85
  .expect(toInclude("E-mail"));
80
86
  });
87
+
81
88
  it("delete tenant", async () => {
82
89
  const loginCookie = await getAdminLoginCookie();
83
90
 
@@ -87,9 +94,12 @@ describe("tenant routes", () => {
87
94
  .set("Cookie", loginCookie)
88
95
  .expect(toRedirect("/tenant/list"));
89
96
  });
97
+
90
98
  } else {
99
+
91
100
  it("does not support tenants on SQLite", async () => {
92
101
  expect(db.isSQLite).toBe(true);
93
102
  });
103
+
94
104
  }
95
105
  });
@@ -43,6 +43,20 @@ describe("viewedit edit endpoint", () => {
43
43
  .set("Cookie", loginCookie)
44
44
  .expect(toInclude("author"));
45
45
  });
46
+ it("direct edit to config", async () => {
47
+ const loginCookie = await getAdminLoginCookie();
48
+ const app = await getApp({ disableCsrf: true });
49
+ const v = await View.findOne({ name: "authorlist" });
50
+ await request(app)
51
+ .post("/viewedit/save")
52
+ .send("viewtemplate=List")
53
+ .send("table_name=books")
54
+ .send("id=" + v.id)
55
+ .send("name=authorlist")
56
+ .send("min_role=10")
57
+ .set("Cookie", loginCookie)
58
+ .expect(toRedirect("/viewedit/config/authorlist"));
59
+ });
46
60
  it("show list editor", async () => {
47
61
  const loginCookie = await getAdminLoginCookie();
48
62
  const app = await getApp({ disableCsrf: true });
@@ -478,6 +492,6 @@ describe("Library", () => {
478
492
  .get("/library/list")
479
493
  .set("Cookie", loginCookie)
480
494
  .expect(toInclude("Library"))
481
- .expect(toNotInclude("ShinyCard"))
495
+ .expect(toNotInclude("ShinyCard"));
482
496
  });
483
497
  });