@saltcorn/server 0.8.6-beta.1 → 0.8.6-beta.10

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.
package/routes/view.js CHANGED
@@ -42,7 +42,7 @@ router.get(
42
42
  const { viewname } = req.params;
43
43
  const query = { ...req.query };
44
44
  const view = await View.findOne({ name: viewname });
45
- const role = req.user && req.user.id ? req.user.role_id : 10;
45
+ const role = req.user && req.user.id ? req.user.role_id : 100;
46
46
  const state = getState();
47
47
  state.log(3, `Route /view/${viewname} user=${req.user?.id}`);
48
48
  if (!view) {
@@ -157,7 +157,7 @@ router.post(
157
157
  "/:viewname/:route",
158
158
  error_catcher(async (req, res) => {
159
159
  const { viewname, route } = req.params;
160
- const role = req.user && req.user.id ? req.user.role_id : 10;
160
+ const role = req.user && req.user.id ? req.user.role_id : 100;
161
161
  const state = getState();
162
162
  state.log(
163
163
  3,
@@ -191,7 +191,7 @@ router.post(
191
191
  setTenant,
192
192
  error_catcher(async (req, res) => {
193
193
  const { viewname } = req.params;
194
- const role = req.user && req.user.id ? req.user.role_id : 10;
194
+ const role = req.user && req.user.id ? req.user.role_id : 100;
195
195
  const query = { ...req.query };
196
196
  const state = getState();
197
197
  state.log(3, `Route /view/${viewname} POST user=${req.user?.id}`);
@@ -8,16 +8,9 @@
8
8
  const Router = require("express-promise-router");
9
9
 
10
10
  const { renderForm, renderBuilder, alert } = require("@saltcorn/markup");
11
- const {
12
- p,
13
- a,
14
- div,
15
- script,
16
- text,
17
- domReady,
18
- code,
19
- pre,
20
- } = require("@saltcorn/markup/tags");
11
+ const tags = require("@saltcorn/markup/tags");
12
+ const { p, a, div, script, text, domReady, code, pre, tbody, tr, th, td } =
13
+ tags;
21
14
 
22
15
  const { getState } = require("@saltcorn/data/db/state");
23
16
  const { isAdmin, error_catcher, addOnDoneRedirect } = require("./utils.js");
@@ -30,6 +23,7 @@ const Workflow = require("@saltcorn/data/models/workflow");
30
23
  const User = require("@saltcorn/data/models/user");
31
24
  const Page = require("@saltcorn/data/models/page");
32
25
  const db = require("@saltcorn/data/db");
26
+ const { sleep } = require("@saltcorn/data/utils");
33
27
 
34
28
  const { add_to_menu } = require("@saltcorn/admin-models/models/pack");
35
29
 
@@ -305,6 +299,7 @@ router.get(
305
299
  const roles = await User.get_roles();
306
300
  const pages = await Page.find();
307
301
  const form = await viewForm(req, tableOptions, roles, pages, viewrow);
302
+ const inbound_connected = await viewrow.inbound_connected_objects();
308
303
  form.hidden("id");
309
304
  res.sendWrap(req.__(`Edit view`), {
310
305
  above: [
@@ -328,7 +323,6 @@ router.get(
328
323
  },
329
324
  {
330
325
  type: "card",
331
-
332
326
  title: req.__("View configuration"),
333
327
  contents: {
334
328
  type: "tabs",
@@ -340,6 +334,24 @@ router.get(
340
334
  titles: [req.__("Show configuration object")],
341
335
  },
342
336
  },
337
+ {
338
+ type: "card",
339
+ title: req.__("Connected views"),
340
+ contents: tags.table(
341
+ tbody(
342
+ tr(
343
+ th({ class: "me-2" }, req.__("Embedded in")),
344
+ td(
345
+ inbound_connected.embeddedViews.map((v) => v.name).join(", ")
346
+ )
347
+ ),
348
+ tr(
349
+ th({ class: "me-2" }, req.__("Linked from")),
350
+ td(inbound_connected.linkedViews.map((v) => v.name).join(", "))
351
+ )
352
+ )
353
+ ),
354
+ },
343
355
  ],
344
356
  });
345
357
  })
@@ -458,6 +470,7 @@ router.post(
458
470
  else v.configuration = {};
459
471
  //console.log(v);
460
472
  await View.create(v);
473
+ await sleep(500); // Allow other workers to load this view
461
474
  }
462
475
  res.redirect(
463
476
  addOnDoneRedirect(
@@ -480,14 +493,22 @@ router.post(
480
493
  * @param {object} res
481
494
  * @returns {void}
482
495
  */
483
- const respondWorkflow = (view, wf, wfres, req, res) => {
496
+ const respondWorkflow = (view, wf, wfres, req, res, table) => {
484
497
  const wrap = (contents, noCard, previewURL) => ({
485
498
  above: [
486
499
  {
487
500
  type: "breadcrumbs",
488
501
  crumbs: [
489
502
  { text: req.__("Views"), href: "/viewedit" },
490
- { href: `/view/${view.name}`, text: view.name },
503
+ {
504
+ href: `/view/${view.name}`,
505
+ text: view.name,
506
+ postLinkText: `[${view.viewtemplate}${
507
+ table
508
+ ? ` on ${a({ href: `/table/` + table.name }, table.name)}`
509
+ : ""
510
+ }]`,
511
+ },
491
512
  { workflow: wf, step: wfres },
492
513
  ],
493
514
  },
@@ -571,6 +592,9 @@ router.get(
571
592
  (view.configuration?.columns || []).forEach((c) => {
572
593
  c._columndef = JSON.stringify(c);
573
594
  });
595
+ let table;
596
+ if (view.table_id) table = Table.findOne({ id: view.table_id });
597
+ if (view.exttable_name) table = Table.findOne({ name: view.exttable_name });
574
598
  const configFlow = await view.get_config_flow(req);
575
599
  const hasConfig =
576
600
  view.configuration && Object.keys(view.configuration).length > 0;
@@ -585,7 +609,7 @@ router.get(
585
609
  },
586
610
  req
587
611
  );
588
- respondWorkflow(view, configFlow, wfres, req, res);
612
+ respondWorkflow(view, configFlow, wfres, req, res, table);
589
613
  })
590
614
  );
591
615
 
@@ -604,7 +628,11 @@ router.post(
604
628
  const view = await View.findOne({ name });
605
629
  const configFlow = await view.get_config_flow(req);
606
630
  const wfres = await configFlow.run(req.body, req);
607
- respondWorkflow(view, configFlow, wfres, req, res);
631
+
632
+ let table;
633
+ if (view.table_id) table = Table.findOne({ id: view.table_id });
634
+ if (view.exttable_name) table = Table.findOne({ name: view.exttable_name });
635
+ respondWorkflow(view, configFlow, wfres, req, res, table);
608
636
  })
609
637
  );
610
638
 
@@ -29,7 +29,7 @@ beforeAll(async () => {
29
29
  await File.from_req_files(
30
30
  { mimetype: "image/png", name: "rick.png", mv, size: 245752 },
31
31
  1,
32
- 4
32
+ 40
33
33
  );
34
34
  });
35
35
 
@@ -272,7 +272,7 @@ describe("menu editor", () => {
272
272
  url: "",
273
273
  type: "View",
274
274
  label: "BarMenu",
275
- min_role: "10",
275
+ min_role: "100",
276
276
  pagename: null,
277
277
  viewname: "dqwdw",
278
278
  },
@@ -321,32 +321,32 @@ describe("roleadmin", () => {
321
321
  await request(app)
322
322
  .post("/roleadmin/edit")
323
323
  .set("Cookie", loginCookie)
324
- .send("id=5")
324
+ .send("id=50")
325
325
  .send("role=muppets")
326
326
  .expect(toRedirect("/roleadmin"));
327
327
  const roles = await User.get_roles();
328
- expect(roles).toContainEqual({ id: 5, role: "muppets" });
328
+ expect(roles).toContainEqual({ id: 50, role: "muppets" });
329
329
  });
330
330
  it("show set layout for role", async () => {
331
331
  const app = await getApp({ disableCsrf: true });
332
332
  const loginCookie = await getAdminLoginCookie();
333
333
  await request(app)
334
- .post("/roleadmin/setrolelayout/5")
334
+ .post("/roleadmin/setrolelayout/50")
335
335
  .set("Cookie", loginCookie)
336
336
  .send("layout=tabler")
337
337
  .expect(toRedirect("/roleadmin"));
338
338
  const roles = await User.get_roles();
339
- expect(roles).toContainEqual({ id: 5, role: "muppets" });
339
+ expect(roles).toContainEqual({ id: 50, role: "muppets" });
340
340
  });
341
341
  it("show delete role", async () => {
342
342
  const app = await getApp({ disableCsrf: true });
343
343
  const loginCookie = await getAdminLoginCookie();
344
344
  await request(app)
345
- .post("/roleadmin/delete/5")
345
+ .post("/roleadmin/delete/50")
346
346
  .set("Cookie", loginCookie)
347
347
  .expect(toRedirect("/roleadmin"));
348
348
  const roles = await User.get_roles();
349
- expect(roles).not.toContainEqual({ id: 5, role: "muppets" });
349
+ expect(roles).not.toContainEqual({ id: 50, role: "muppets" });
350
350
  });
351
351
  });
352
352
  /**
@@ -205,7 +205,7 @@ describe("user admin", () => {
205
205
  .post("/useradmin/save")
206
206
  .send("email=staff2@foo.com")
207
207
  .send("password=fideRGE54lio")
208
- .send("role_id=8")
208
+ .send("role_id=80")
209
209
  .set("Cookie", loginCookie)
210
210
  .expect(toRedirect("/useradmin"));
211
211
  });
@@ -223,7 +223,7 @@ describe("user admin", () => {
223
223
  const app = await getApp({ disableCsrf: true });
224
224
  const loginCookie = await getAdminLoginCookie();
225
225
  const user = await User.findOne({ email: "staff2@foo.com" });
226
- expect(user.role_id).toBe(8);
226
+ expect(user.role_id).toBe(80);
227
227
  await request(app)
228
228
  .get(`/useradmin/${user.id}`)
229
229
  .set("Cookie", loginCookie)
@@ -238,11 +238,11 @@ describe("user admin", () => {
238
238
  .post("/useradmin/save")
239
239
  .send("email=staff2@foo.com")
240
240
  .send(`id=${user.id}`)
241
- .send("role_id=4")
241
+ .send("role_id=40")
242
242
  .set("Cookie", loginCookie)
243
243
  .expect(toRedirect("/useradmin"));
244
244
  const edituser = await User.findOne({ email: "staff2@foo.com" });
245
- expect(edituser.role_id).toBe(4);
245
+ expect(edituser.role_id).toBe(40);
246
246
  });
247
247
  it("tries to create new user with existing email", async () => {
248
248
  const app = await getApp({ disableCsrf: true });
@@ -251,7 +251,7 @@ describe("user admin", () => {
251
251
  .post("/useradmin/save")
252
252
  .send("email=staff2@foo.com")
253
253
  .send("password=fideRGE54lio")
254
- .send("role_id=8")
254
+ .send("role_id=80")
255
255
  .set("Cookie", loginCookie)
256
256
  .expect(toRedirect("/useradmin"));
257
257
  const editusers = await User.find({ email: "staff2@foo.com" });
@@ -342,7 +342,7 @@ describe("User fields", () => {
342
342
  configuration: {
343
343
  columns: [
344
344
  { type: "Field", fieldview: "edit", field_name: "height" },
345
- { type: "Action", minRole: 10, action_name: "Save" },
345
+ { type: "Action", minRole: 100, action_name: "Save" },
346
346
  ],
347
347
  layout: {
348
348
  above: [
@@ -368,7 +368,7 @@ describe("User fields", () => {
368
368
  ],
369
369
  },
370
370
  { type: "line_break" },
371
- { type: "action", minRole: 10, action_name: "Save" },
371
+ { type: "action", minRole: 100, action_name: "Save" },
372
372
  ],
373
373
  },
374
374
  },
@@ -466,7 +466,7 @@ describe("signup with custom login form", () => {
466
466
  {
467
467
  type: "action",
468
468
  rndid: "63f01b",
469
- minRole: 10,
469
+ minRole: 100,
470
470
  isFormula: {},
471
471
  action_name: "Login",
472
472
  action_label: "Login",
@@ -476,7 +476,7 @@ describe("signup with custom login form", () => {
476
476
  {
477
477
  type: "action",
478
478
  rndid: "45dd57",
479
- minRole: 10,
479
+ minRole: 100,
480
480
  isFormula: {},
481
481
  action_name: "Login with github",
482
482
  configuration: {},
@@ -489,7 +489,7 @@ describe("signup with custom login form", () => {
489
489
  {
490
490
  type: "Action",
491
491
  rndid: "63f01b",
492
- minRole: 10,
492
+ minRole: 100,
493
493
  isFormula: {},
494
494
  action_name: "Login",
495
495
  action_label: "Login",
@@ -499,7 +499,7 @@ describe("signup with custom login form", () => {
499
499
  {
500
500
  type: "Action",
501
501
  rndid: "45dd57",
502
- minRole: 10,
502
+ minRole: 100,
503
503
  isFormula: {},
504
504
  action_name: "Login with github",
505
505
  configuration: {},
@@ -573,7 +573,7 @@ describe("signup with custom login form", () => {
573
573
  {
574
574
  type: "action",
575
575
  rndid: "63f01b",
576
- minRole: 10,
576
+ minRole: 100,
577
577
  isFormula: {},
578
578
  action_name: "Sign up",
579
579
  action_style: "btn-primary",
@@ -588,7 +588,7 @@ describe("signup with custom login form", () => {
588
588
  {
589
589
  type: "Action",
590
590
  rndid: "63f01b",
591
- minRole: 10,
591
+ minRole: 100,
592
592
  isFormula: {},
593
593
  action_name: "Sign up",
594
594
  action_style: "btn-primary",
@@ -61,7 +61,7 @@ describe("notifications", () => {
61
61
  .expect(succeedJsonWith((n) => n === 0));
62
62
  });
63
63
  it("add notification", async () => {
64
- const user = await User.findOne({ role_id: 4 });
64
+ const user = await User.findOne({ role_id: 40 });
65
65
  await Notification.create({
66
66
  user_id: user.id,
67
67
  title: "This is a staff announcement",
@@ -170,7 +170,7 @@ describe("homepage", () => {
170
170
  name: "anewview",
171
171
  viewtemplate: "List",
172
172
  configuration: { columns: [], default_state: { foo: "bar" } },
173
- min_role: 10,
173
+ min_role: 100,
174
174
  });
175
175
  const loginCookie = await getAdminLoginCookie();
176
176
 
@@ -33,7 +33,7 @@ beforeAll(async () => {
33
33
  size: 245752,
34
34
  },
35
35
  1,
36
- 4
36
+ 40
37
37
  );
38
38
  await File.from_req_files(
39
39
  {
@@ -45,7 +45,7 @@ beforeAll(async () => {
45
45
  size: 219422,
46
46
  },
47
47
  1,
48
- 10
48
+ 100
49
49
  );
50
50
  });
51
51
  afterAll(db.close);
@@ -121,7 +121,7 @@ describe("files admin", () => {
121
121
  await request(app)
122
122
  .post("/files/setrole/rick.png")
123
123
  .set("Cookie", loginCookie)
124
- .send("role=10")
124
+ .send("role=100")
125
125
  .expect(toRedirect("/files?dir=."));
126
126
  });
127
127
  it("serve file to public after role change", async () => {
@@ -150,7 +150,7 @@ describe("files admin", () => {
150
150
  describe("files edit", () => {
151
151
  it("creates table and view", async () => {
152
152
  const table = await Table.create("thefiletable");
153
- await table.update({ min_role_read: 8, min_role_write: 8 });
153
+ await table.update({ min_role_read: 80, min_role_write: 80 });
154
154
  await Field.create({
155
155
  table,
156
156
  name: "first_name",
@@ -171,7 +171,7 @@ describe("files edit", () => {
171
171
  columns: [
172
172
  { type: "Field", field_name: "mugshot", fieldview: "upload" },
173
173
  { type: "Field", field_name: "first_name", fieldview: "edit" },
174
- { type: "Action", action_name: "Save", minRole: 10 },
174
+ { type: "Action", action_name: "Save", minRole: 100 },
175
175
  ],
176
176
  layout: {
177
177
  above: [
@@ -188,7 +188,7 @@ describe("files edit", () => {
188
188
  ],
189
189
  },
190
190
  },
191
- min_role: 10,
191
+ min_role: 100,
192
192
  });
193
193
  });
194
194
  it("shows edit view", async () => {
@@ -24,8 +24,8 @@ const pack = {
24
24
  tables: [
25
25
  {
26
26
  name: "cats",
27
- min_role_read: 10,
28
- min_role_write: 10,
27
+ min_role_read: 100,
28
+ min_role_write: 100,
29
29
  versioned: false,
30
30
  fields: [
31
31
  {
@@ -75,7 +75,7 @@ const pack = {
75
75
  latitude_field: "lat",
76
76
  longtitude_field: "long",
77
77
  },
78
- min_role: 10,
78
+ min_role: 100,
79
79
  table: "cats",
80
80
  },
81
81
  {
@@ -100,7 +100,7 @@ const pack = {
100
100
  ],
101
101
  viewname: "ShowName",
102
102
  },
103
- min_role: 10,
103
+ min_role: 100,
104
104
  table: "cats",
105
105
  },
106
106
  {
@@ -115,7 +115,7 @@ const pack = {
115
115
  reload_on_drag: false,
116
116
  view_to_create: "",
117
117
  },
118
- min_role: 10,
118
+ min_role: 100,
119
119
  table: "cats",
120
120
  },
121
121
  {
@@ -130,7 +130,7 @@ const pack = {
130
130
  reload_on_drag: false,
131
131
  view_to_create: "",
132
132
  },
133
- min_role: 10,
133
+ min_role: 100,
134
134
  table: "cats",
135
135
  },
136
136
  {
@@ -151,7 +151,7 @@ const pack = {
151
151
  columns: [],
152
152
  viewname: "NestedShow",
153
153
  },
154
- min_role: 10,
154
+ min_role: 100,
155
155
  table: "cats",
156
156
  },
157
157
  {
@@ -165,7 +165,7 @@ const pack = {
165
165
  latitude_field: "lat",
166
166
  longtitude_field: "long",
167
167
  },
168
- min_role: 10,
168
+ min_role: 100,
169
169
  table: "cats",
170
170
  },
171
171
  {
@@ -180,7 +180,7 @@ const pack = {
180
180
  reload_on_drag: false,
181
181
  view_to_create: "",
182
182
  },
183
- min_role: 10,
183
+ min_role: 100,
184
184
  table: "cats",
185
185
  },
186
186
  {
@@ -201,7 +201,7 @@ const pack = {
201
201
  columns: [],
202
202
  viewname: "NestedShowNoPop",
203
203
  },
204
- min_role: 10,
204
+ min_role: 100,
205
205
  table: "cats",
206
206
  },
207
207
  {
@@ -216,7 +216,7 @@ const pack = {
216
216
  reload_on_drag: false,
217
217
  view_to_create: "",
218
218
  },
219
- min_role: 10,
219
+ min_role: 100,
220
220
  table: "cats",
221
221
  },
222
222
  ],
@@ -44,7 +44,7 @@ describe("page create", () => {
44
44
  const loginCookie = await getAdminLoginCookie();
45
45
  await request(app)
46
46
  .post("/pageedit/edit-properties")
47
- .send("name=whales&title=Whales&description=about+whales&min_role=10")
47
+ .send("name=whales&title=Whales&description=about+whales&min_role=100")
48
48
  .set("Cookie", loginCookie)
49
49
  .expect(toRedirect("/pageedit/edit/whales"));
50
50
  });
@@ -76,7 +76,7 @@ describe("page action", () => {
76
76
  name: "pagewithaction",
77
77
  title: "",
78
78
  description: "",
79
- min_role: 10,
79
+ min_role: 100,
80
80
  id: 2,
81
81
  layout: {
82
82
  widths: [6, 6],
@@ -85,7 +85,7 @@ describe("page action", () => {
85
85
  {
86
86
  type: "action",
87
87
  rndid: "56f3ac",
88
- minRole: 10,
88
+ minRole: 100,
89
89
  isFormula: {},
90
90
  action_icon: "far fa-angry",
91
91
  action_name: "run_js_code",
@@ -142,7 +142,7 @@ describe("pageedit", () => {
142
142
  .send("name=a_page")
143
143
  .send("title=mytitle")
144
144
  .send("description=mydescript")
145
- .send("min_role=8")
145
+ .send("min_role=80")
146
146
  .send("id=1")
147
147
  .expect(toRedirect("/pageedit/"));
148
148
  });
@@ -153,7 +153,6 @@ describe("pageedit", () => {
153
153
  .get("/pageedit/edit/a_page")
154
154
  .set("Cookie", loginCookie)
155
155
  .expect(toInclude("<script>builder.renderBuilder"));
156
-
157
156
  });
158
157
 
159
158
  it("sets root page", async () => {
@@ -0,0 +1,108 @@
1
+ const request = require("supertest");
2
+ const getApp = require("../app");
3
+ const {
4
+ getUserLoginCookie,
5
+ getAdminLoginCookie,
6
+ resetToFixtures,
7
+ notAuthorized,
8
+ respondJsonWith,
9
+ } = require("../auth/testhelp");
10
+ const db = require("@saltcorn/data/db");
11
+
12
+ const Table = require("@saltcorn/data/models/table");
13
+
14
+ beforeAll(async () => {
15
+ await resetToFixtures();
16
+ });
17
+ afterAll(db.close);
18
+
19
+ describe("Synchronise with mobile offline data", () => {
20
+ it("not permitted", async () => {
21
+ if (!db.isSQLite) {
22
+ const patients = Table.findOne({ name: "patients" });
23
+ const books = Table.findOne({ name: "books" });
24
+ const patientsBefore = await patients.countRows();
25
+ const booksBefore = await books.countRows();
26
+ const app = await getApp({ disableCsrf: true });
27
+ const loginCookie = await getUserLoginCookie();
28
+ await request(app)
29
+ .post("/sync/table_data")
30
+ .set("Cookie", loginCookie)
31
+ .send({
32
+ data: {
33
+ patients: [
34
+ {
35
+ name: "Brad Pitt",
36
+ favbook: 2,
37
+ parent: 1,
38
+ },
39
+ {
40
+ id: 84,
41
+ name: "Pitt Brad",
42
+ favbook: 2,
43
+ parent: 1,
44
+ },
45
+ ],
46
+ books: [
47
+ {
48
+ id: 3,
49
+ author: "foo",
50
+ pages: 20,
51
+ publisher: 1,
52
+ },
53
+ ],
54
+ },
55
+ })
56
+ .expect(notAuthorized);
57
+ const patientsAfter = await patients.countRows();
58
+ const booksAfter = await books.countRows();
59
+ expect(patientsAfter).toBe(patientsBefore);
60
+ expect(booksAfter).toBe(booksBefore);
61
+ }
62
+ });
63
+
64
+ it("upload patients and books", async () => {
65
+ if (!db.isSQLite) {
66
+ const patients = Table.findOne({ name: "patients" });
67
+ const books = Table.findOne({ name: "books" });
68
+ const patientsBefore = await patients.countRows();
69
+ const booksBefore = await books.countRows();
70
+ const app = await getApp({ disableCsrf: true });
71
+ const loginCookie = await getAdminLoginCookie();
72
+ await request(app)
73
+ .post("/sync/table_data")
74
+ .set("Cookie", loginCookie)
75
+ .send({
76
+ data: {
77
+ patients: [
78
+ {
79
+ name: "Brad Pitt",
80
+ favbook: 2,
81
+ parent: 1,
82
+ },
83
+ {
84
+ id: 84,
85
+ name: "Pitt Brad",
86
+ favbook: 2,
87
+ parent: 1,
88
+ },
89
+ ],
90
+ books: [
91
+ {
92
+ id: 3,
93
+ author: "foo",
94
+ pages: 20,
95
+ publisher: 1,
96
+ },
97
+ ],
98
+ },
99
+ })
100
+ .expect(respondJsonWith(200, ({ success }) => success));
101
+ const patientsAfter = await patients.countRows();
102
+ const booksAfter = await books.countRows();
103
+ expect(patientsAfter).toBe(patientsBefore + 2);
104
+ expect(booksAfter).toBe(booksBefore + 1);
105
+ expect((await patients.getRows({ id: 84 })).length).toBe(0);
106
+ }
107
+ });
108
+ });
@@ -35,7 +35,7 @@ describe("Table Endpoints", () => {
35
35
  .post("/table/")
36
36
  .send("name=mypostedtable")
37
37
  .set("Cookie", loginCookie)
38
- .expect(toRedirect("/table/10"));
38
+ .expect(toRedirect("/table/16"));
39
39
  await request(app)
40
40
  .get("/table/10")
41
41
  .set("Cookie", loginCookie)
@@ -98,19 +98,19 @@ describe("Table Endpoints", () => {
98
98
  await request(app)
99
99
  .post(`/table`)
100
100
  .set("Cookie", loginCookie)
101
- .send("min_role_read=10&min_role_write=1&id=" + tbl.id)
101
+ .send("min_role_read=100&min_role_write=1&id=" + tbl.id)
102
102
  .expect(toRedirect(`/table/${tbl.id}`));
103
103
  await request(app).get(`/table/${tbl.id}`).set("Cookie", loginCookie);
104
104
  await request(app)
105
105
  .post(`/table`)
106
106
  .set("Cookie", loginCookie)
107
- .send("min_role_read=10&min_role_write=1&id=" + tbl.id)
107
+ .send("min_role_read=100&min_role_write=1&id=" + tbl.id)
108
108
  .expect(toRedirect(`/table/${tbl.id}`));
109
109
  await request(app).get(`/table/${tbl.id}`).set("Cookie", loginCookie);
110
110
  await request(app)
111
111
  .post(`/table`)
112
112
  .set("Cookie", loginCookie)
113
- .send("min_role_read=10&min_role_write=1&id=" + tbl.id)
113
+ .send("min_role_read=100&min_role_write=1&id=" + tbl.id)
114
114
  .expect(toRedirect(`/table/${tbl.id}`));
115
115
  await request(app).get(`/table/${tbl.id}`).set("Cookie", loginCookie);
116
116
  });
@@ -121,7 +121,7 @@ describe("Table Endpoints", () => {
121
121
  await request(app)
122
122
  .post(`/table`)
123
123
  .set("Cookie", loginCookie)
124
- .send("min_role_read=8&name=exttab&external=on")
124
+ .send("min_role_read=80&name=exttab&external=on")
125
125
  .expect(toRedirect(`/table/exttab`));
126
126
  });
127
127
  it("should download csv ", async () => {
@@ -151,7 +151,7 @@ Pencil, 0.5,2, t`;
151
151
  .set("Cookie", loginCookie)
152
152
  .field("name", "expenses")
153
153
  .attach("file", Buffer.from(csv, "utf-8"))
154
- .expect(toRedirect("/table/11"));
154
+ .expect(toRedirect("/table/17"));
155
155
  });
156
156
  it("should upload csv to existing table", async () => {
157
157
  const csv = `author,Pages