@saltcorn/data 1.6.0-alpha.8 → 1.6.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 (207) hide show
  1. package/dist/base-plugin/actions.d.ts +3 -3
  2. package/dist/base-plugin/actions.d.ts.map +1 -1
  3. package/dist/base-plugin/actions.js +59 -17
  4. package/dist/base-plugin/actions.js.map +1 -1
  5. package/dist/base-plugin/index.d.ts +10 -5
  6. package/dist/base-plugin/index.d.ts.map +1 -1
  7. package/dist/base-plugin/types.d.ts +7 -2
  8. package/dist/base-plugin/types.d.ts.map +1 -1
  9. package/dist/base-plugin/types.js +9 -4
  10. package/dist/base-plugin/types.js.map +1 -1
  11. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  12. package/dist/base-plugin/viewtemplates/edit.js +3 -0
  13. package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
  14. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  15. package/dist/base-plugin/viewtemplates/filter.js +11 -3
  16. package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
  17. package/dist/base-plugin/viewtemplates/list.d.ts +2 -1
  18. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
  19. package/dist/base-plugin/viewtemplates/list.js +18 -8
  20. package/dist/base-plugin/viewtemplates/list.js.map +1 -1
  21. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
  22. package/dist/base-plugin/viewtemplates/show.js +3 -0
  23. package/dist/base-plugin/viewtemplates/show.js.map +1 -1
  24. package/dist/db/state.d.ts +4 -0
  25. package/dist/db/state.d.ts.map +1 -1
  26. package/dist/db/state.js +27 -4
  27. package/dist/db/state.js.map +1 -1
  28. package/dist/migrate.d.ts.map +1 -1
  29. package/dist/migrate.js +9 -4
  30. package/dist/migrate.js.map +1 -1
  31. package/dist/migrations/202603101553.d.ts +4 -0
  32. package/dist/migrations/202603101553.d.ts.map +1 -0
  33. package/dist/migrations/202603101553.js +22 -0
  34. package/dist/migrations/202603101553.js.map +1 -0
  35. package/dist/mobile-mocks/node/assert.d.ts +1 -0
  36. package/dist/mobile-mocks/node/assert.d.ts.map +1 -0
  37. package/dist/mobile-mocks/node/assert.js +2 -0
  38. package/dist/mobile-mocks/node/assert.js.map +1 -0
  39. package/dist/models/expression.d.ts +1 -1
  40. package/dist/models/expression.d.ts.map +1 -1
  41. package/dist/models/expression.js +51 -16
  42. package/dist/models/expression.js.map +1 -1
  43. package/dist/models/field.d.ts.map +1 -1
  44. package/dist/models/field.js +67 -10
  45. package/dist/models/field.js.map +1 -1
  46. package/dist/models/index.d.ts +1 -1
  47. package/dist/models/index.d.ts.map +1 -1
  48. package/dist/models/internal/push_message_helper.d.ts.map +1 -1
  49. package/dist/models/internal/push_message_helper.js +5 -2
  50. package/dist/models/internal/push_message_helper.js.map +1 -1
  51. package/dist/models/metadata.d.ts +2 -1
  52. package/dist/models/metadata.d.ts.map +1 -1
  53. package/dist/models/metadata.js +5 -0
  54. package/dist/models/metadata.js.map +1 -1
  55. package/dist/models/page.d.ts.map +1 -1
  56. package/dist/models/page.js +3 -1
  57. package/dist/models/page.js.map +1 -1
  58. package/dist/models/plugin.d.ts +2 -2
  59. package/dist/models/plugin.d.ts.map +1 -1
  60. package/dist/models/plugin.js +2 -2
  61. package/dist/models/plugin.js.map +1 -1
  62. package/dist/models/table.d.ts +8 -0
  63. package/dist/models/table.d.ts.map +1 -1
  64. package/dist/models/table.js +196 -83
  65. package/dist/models/table.js.map +1 -1
  66. package/dist/models/trigger.d.ts.map +1 -1
  67. package/dist/models/trigger.js +20 -9
  68. package/dist/models/trigger.js.map +1 -1
  69. package/dist/models/user.d.ts.map +1 -1
  70. package/dist/models/user.js +4 -0
  71. package/dist/models/user.js.map +1 -1
  72. package/dist/models/workflow.d.ts.map +1 -1
  73. package/dist/models/workflow.js +6 -0
  74. package/dist/models/workflow.js.map +1 -1
  75. package/dist/plugin-helper.d.ts.map +1 -1
  76. package/dist/plugin-helper.js +8 -0
  77. package/dist/plugin-helper.js.map +1 -1
  78. package/dist/viewable_fields.d.ts +2 -2
  79. package/dist/viewable_fields.d.ts.map +1 -1
  80. package/dist/viewable_fields.js +13 -8
  81. package/dist/viewable_fields.js.map +1 -1
  82. package/package.json +8 -8
  83. package/webpack.config.js +1 -0
  84. package/dist/tests/actions.test.d.ts +0 -2
  85. package/dist/tests/actions.test.d.ts.map +0 -1
  86. package/dist/tests/actions.test.js +0 -936
  87. package/dist/tests/actions.test.js.map +0 -1
  88. package/dist/tests/auth.test.d.ts +0 -2
  89. package/dist/tests/auth.test.d.ts.map +0 -1
  90. package/dist/tests/auth.test.js +0 -824
  91. package/dist/tests/auth.test.js.map +0 -1
  92. package/dist/tests/auxtest.test.d.ts +0 -2
  93. package/dist/tests/auxtest.test.d.ts.map +0 -1
  94. package/dist/tests/auxtest.test.js +0 -562
  95. package/dist/tests/auxtest.test.js.map +0 -1
  96. package/dist/tests/base.test.d.ts +0 -2
  97. package/dist/tests/base.test.d.ts.map +0 -1
  98. package/dist/tests/base.test.js +0 -30
  99. package/dist/tests/base.test.js.map +0 -1
  100. package/dist/tests/calc.test.d.ts +0 -2
  101. package/dist/tests/calc.test.d.ts.map +0 -1
  102. package/dist/tests/calc.test.js +0 -1081
  103. package/dist/tests/calc.test.js.map +0 -1
  104. package/dist/tests/composite_pk.test.d.ts +0 -2
  105. package/dist/tests/composite_pk.test.d.ts.map +0 -1
  106. package/dist/tests/composite_pk.test.js +0 -98
  107. package/dist/tests/composite_pk.test.js.map +0 -1
  108. package/dist/tests/config.test.d.ts +0 -2
  109. package/dist/tests/config.test.d.ts.map +0 -1
  110. package/dist/tests/config.test.js +0 -86
  111. package/dist/tests/config.test.js.map +0 -1
  112. package/dist/tests/db.test.d.ts +0 -2
  113. package/dist/tests/db.test.d.ts.map +0 -1
  114. package/dist/tests/db.test.js +0 -178
  115. package/dist/tests/db.test.js.map +0 -1
  116. package/dist/tests/discover.test.d.ts +0 -2
  117. package/dist/tests/discover.test.d.ts.map +0 -1
  118. package/dist/tests/discover.test.js +0 -245
  119. package/dist/tests/discover.test.js.map +0 -1
  120. package/dist/tests/edit.test.d.ts +0 -2
  121. package/dist/tests/edit.test.d.ts.map +0 -1
  122. package/dist/tests/edit.test.js +0 -1161
  123. package/dist/tests/edit.test.js.map +0 -1
  124. package/dist/tests/email.test.d.ts +0 -2
  125. package/dist/tests/email.test.d.ts.map +0 -1
  126. package/dist/tests/email.test.js +0 -255
  127. package/dist/tests/email.test.js.map +0 -1
  128. package/dist/tests/exact_views.test.d.ts +0 -2
  129. package/dist/tests/exact_views.test.d.ts.map +0 -1
  130. package/dist/tests/exact_views.test.js +0 -1363
  131. package/dist/tests/exact_views.test.js.map +0 -1
  132. package/dist/tests/field.test.d.ts +0 -2
  133. package/dist/tests/field.test.d.ts.map +0 -1
  134. package/dist/tests/field.test.js +0 -588
  135. package/dist/tests/field.test.js.map +0 -1
  136. package/dist/tests/fieldviews.test.d.ts +0 -2
  137. package/dist/tests/fieldviews.test.d.ts.map +0 -1
  138. package/dist/tests/fieldviews.test.js +0 -74
  139. package/dist/tests/fieldviews.test.js.map +0 -1
  140. package/dist/tests/file.test.d.ts +0 -2
  141. package/dist/tests/file.test.d.ts.map +0 -1
  142. package/dist/tests/file.test.js +0 -148
  143. package/dist/tests/file.test.js.map +0 -1
  144. package/dist/tests/filter.test.d.ts +0 -2
  145. package/dist/tests/filter.test.d.ts.map +0 -1
  146. package/dist/tests/filter.test.js +0 -496
  147. package/dist/tests/filter.test.js.map +0 -1
  148. package/dist/tests/form.test.d.ts +0 -2
  149. package/dist/tests/form.test.d.ts.map +0 -1
  150. package/dist/tests/form.test.js +0 -264
  151. package/dist/tests/form.test.js.map +0 -1
  152. package/dist/tests/list.test.d.ts +0 -2
  153. package/dist/tests/list.test.d.ts.map +0 -1
  154. package/dist/tests/list.test.js +0 -1037
  155. package/dist/tests/list.test.js.map +0 -1
  156. package/dist/tests/models.test.d.ts +0 -2
  157. package/dist/tests/models.test.d.ts.map +0 -1
  158. package/dist/tests/models.test.js +0 -417
  159. package/dist/tests/models.test.js.map +0 -1
  160. package/dist/tests/page.test.d.ts +0 -2
  161. package/dist/tests/page.test.d.ts.map +0 -1
  162. package/dist/tests/page.test.js +0 -26
  163. package/dist/tests/page.test.js.map +0 -1
  164. package/dist/tests/page_group.test.d.ts +0 -2
  165. package/dist/tests/page_group.test.d.ts.map +0 -1
  166. package/dist/tests/page_group.test.js +0 -51
  167. package/dist/tests/page_group.test.js.map +0 -1
  168. package/dist/tests/plugin.test.d.ts +0 -2
  169. package/dist/tests/plugin.test.d.ts.map +0 -1
  170. package/dist/tests/plugin.test.js +0 -60
  171. package/dist/tests/plugin.test.js.map +0 -1
  172. package/dist/tests/show.test.d.ts +0 -2
  173. package/dist/tests/show.test.d.ts.map +0 -1
  174. package/dist/tests/show.test.js +0 -561
  175. package/dist/tests/show.test.js.map +0 -1
  176. package/dist/tests/state.test.d.ts +0 -2
  177. package/dist/tests/state.test.d.ts.map +0 -1
  178. package/dist/tests/state.test.js +0 -82
  179. package/dist/tests/state.test.js.map +0 -1
  180. package/dist/tests/table.test.d.ts +0 -2
  181. package/dist/tests/table.test.d.ts.map +0 -1
  182. package/dist/tests/table.test.js +0 -2717
  183. package/dist/tests/table.test.js.map +0 -1
  184. package/dist/tests/table_history.test.d.ts +0 -2
  185. package/dist/tests/table_history.test.d.ts.map +0 -1
  186. package/dist/tests/table_history.test.js +0 -413
  187. package/dist/tests/table_history.test.js.map +0 -1
  188. package/dist/tests/tag.test.d.ts +0 -2
  189. package/dist/tests/tag.test.d.ts.map +0 -1
  190. package/dist/tests/tag.test.js +0 -97
  191. package/dist/tests/tag.test.js.map +0 -1
  192. package/dist/tests/user.test.d.ts +0 -2
  193. package/dist/tests/user.test.d.ts.map +0 -1
  194. package/dist/tests/user.test.js +0 -441
  195. package/dist/tests/user.test.js.map +0 -1
  196. package/dist/tests/view.test.d.ts +0 -2
  197. package/dist/tests/view.test.d.ts.map +0 -1
  198. package/dist/tests/view.test.js +0 -699
  199. package/dist/tests/view.test.js.map +0 -1
  200. package/dist/tests/workflow.test.d.ts +0 -2
  201. package/dist/tests/workflow.test.d.ts.map +0 -1
  202. package/dist/tests/workflow.test.js +0 -303
  203. package/dist/tests/workflow.test.js.map +0 -1
  204. package/dist/tests/workflow_run.test.d.ts +0 -2
  205. package/dist/tests/workflow_run.test.d.ts.map +0 -1
  206. package/dist/tests/workflow_run.test.js +0 -922
  207. package/dist/tests/workflow_run.test.js.map +0 -1
@@ -1,824 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const table_1 = __importDefault(require("../models/table"));
7
- const field_1 = __importDefault(require("../models/field"));
8
- const db_1 = __importDefault(require("../db"));
9
- const { getState } = require("../db/state");
10
- getState().registerPlugin("base", require("../base-plugin"));
11
- const mocks_1 = __importDefault(require("./mocks"));
12
- const { rick_file, plugin_with_routes, mockReqRes, createDefaultView } = mocks_1.default;
13
- const assertions_1 = require("./assertions");
14
- const globals_1 = require("@jest/globals");
15
- const expression_1 = __importDefault(require("../models/expression"));
16
- const user_1 = __importDefault(require("../models/user"));
17
- const { freeVariables } = expression_1.default;
18
- (0, globals_1.afterAll)(db_1.default.close);
19
- (0, globals_1.beforeAll)(async () => {
20
- await require("../db/reset_schema")();
21
- await require("../db/fixtures")();
22
- });
23
- jest.setTimeout(30000);
24
- const non_owner_user = { id: 3, email: "foo@bar.com", role_id: 80 };
25
- const owner_user = { id: 1, email: "foo@bar.com", role_id: 80 };
26
- const test_person_table = async (persons) => {
27
- const row = await persons.getRow({ age: 12 });
28
- (0, assertions_1.assertIsSet)(row);
29
- (0, globals_1.expect)(row.lastname).toBe("Joe");
30
- (0, globals_1.expect)(row.age).toBe(12);
31
- (0, globals_1.expect)(persons.is_owner(non_owner_user, row)).toBe(false);
32
- const not_owned_row = await persons.getJoinedRow({
33
- where: { id: row.id },
34
- forUser: non_owner_user,
35
- });
36
- (0, globals_1.expect)(not_owned_row).toBe(null);
37
- const row1 = await persons.getJoinedRow({
38
- where: { age: 13 },
39
- forUser: owner_user,
40
- });
41
- (0, assertions_1.assertIsSet)(row1);
42
- (0, globals_1.expect)(persons.is_owner({ id: 1, role_id: 100 }, row1)).toBe(true);
43
- const owned_row = await persons.getJoinedRow({
44
- where: { id: row1.id },
45
- forUser: owner_user,
46
- });
47
- (0, globals_1.expect)(!!owned_row).toBe(true);
48
- const owned_rows = await persons.getJoinedRows({
49
- where: {},
50
- forUser: owner_user,
51
- });
52
- (0, globals_1.expect)(owned_rows.length).toBe(1);
53
- (0, globals_1.expect)(owned_rows[0].age).toBe(13);
54
- const not_owned_rows = await persons.getJoinedRows({
55
- where: {},
56
- forUser: non_owner_user,
57
- });
58
- (0, globals_1.expect)(not_owned_rows.length).toBe(0);
59
- const public_owned_rows = await persons.getJoinedRows({
60
- where: {},
61
- forPublic: true,
62
- });
63
- (0, globals_1.expect)(public_owned_rows.length).toBe(0);
64
- const owned_rows1 = await persons.getJoinedRows({
65
- forUser: owner_user,
66
- });
67
- (0, globals_1.expect)(owned_rows1.length).toBe(1);
68
- (0, globals_1.expect)(owned_rows1[0].age).toBe(13);
69
- //show
70
- const view = await createDefaultView(persons, "Show", 100);
71
- const contents = await view.run_possibly_on_page({ id: row1.id }, { ...mockReqRes.req, user: non_owner_user }, mockReqRes.res);
72
- (0, globals_1.expect)(contents).toBe("No row selected");
73
- const contents1 = await view.run_possibly_on_page({ id: row1.id }, { ...mockReqRes.req, user: owner_user }, mockReqRes.res);
74
- (0, globals_1.expect)(contents1).toContain(">13<");
75
- const contentsmo = await view.runMany({}, {
76
- req: { ...mockReqRes.req, user: owner_user },
77
- res: mockReqRes.res,
78
- });
79
- (0, globals_1.expect)(contentsmo.length).toBe(1);
80
- // @ts-ignore
81
- (0, globals_1.expect)(contentsmo[0]?.row?.lastname).toBe("Sam");
82
- const contentsmno = await view.runMany({}, {
83
- req: { ...mockReqRes.req, user: non_owner_user },
84
- res: mockReqRes.res,
85
- });
86
- (0, globals_1.expect)(contentsmno.length).toBe(0);
87
- await view.delete();
88
- const { department, ...row1form } = row1;
89
- if (department)
90
- row1form.department = department.id;
91
- //edit
92
- const editView = await createDefaultView(persons, "Edit", 100);
93
- const econtents = await editView.run_possibly_on_page({ id: row1.id }, { ...mockReqRes.req, user: non_owner_user }, mockReqRes.res);
94
- (0, globals_1.expect)(econtents).not.toContain('value="13"');
95
- const econtents1 = await editView.run_possibly_on_page({ id: row1.id }, { ...mockReqRes.req, user: owner_user }, mockReqRes.res);
96
- (0, globals_1.expect)(econtents1).toContain('value="13"');
97
- await editView.runPost({}, { ...row1form, age: 5 }, {
98
- req: { ...mockReqRes.req, user: non_owner_user },
99
- res: mockReqRes.res,
100
- }, false);
101
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.age).toBe(13);
102
- await editView.runPost({}, { ...row1form, age: 5 }, {
103
- req: { ...mockReqRes.req, user: owner_user },
104
- res: mockReqRes.res,
105
- }, false);
106
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.age).toBe(5);
107
- await editView.delete();
108
- //update
109
- (0, globals_1.expect)(await persons.updateRow({ lastname: "Fred" }, row1.id, { role_id: 100 })).toBe("Not authorized");
110
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.lastname).toBe("Sam");
111
- (0, globals_1.expect)(await persons.updateRow({ lastname: "Fred" }, row1.id, non_owner_user)).toBe("Not authorized");
112
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.lastname).toBe("Sam");
113
- (0, globals_1.expect)(await persons.updateRow({ lastname: "Fred" }, row1.id, owner_user)).toBe(undefined);
114
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.lastname).toBe("Fred");
115
- if (!department) {
116
- await persons.updateRow({ lastname: "Sally", owner: non_owner_user.id }, row1.id, non_owner_user);
117
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.lastname).toBe("Fred");
118
- }
119
- //delete
120
- await persons.deleteRows({ id: row1.id }, { role_id: 100 });
121
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.age).toBe(5);
122
- await persons.deleteRows({ id: row1.id }, non_owner_user);
123
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.age).toBe(5);
124
- await persons.deleteRows({ id: row1.id }, owner_user);
125
- (0, globals_1.expect)((await persons.getRow({ id: row1.id }))?.age).toBe(undefined);
126
- };
127
- (0, globals_1.describe)("Table with row ownership field", () => {
128
- (0, globals_1.it)("should create and delete table", async () => {
129
- const persons = await table_1.default.create("TableOwned");
130
- await field_1.default.create({
131
- table: persons,
132
- name: "lastname",
133
- type: "String",
134
- });
135
- await field_1.default.create({
136
- table: persons,
137
- name: "age",
138
- type: "Integer",
139
- });
140
- const owner = await field_1.default.create({
141
- table: persons,
142
- name: "owner",
143
- type: "Key to users",
144
- });
145
- await persons.update({ ownership_field_id: owner.id });
146
- const joeid = await persons.insertRow({ lastname: "Joe", age: 12 });
147
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
148
- await test_person_table(persons);
149
- const owner_fnm = await persons.owner_fieldname();
150
- (0, globals_1.expect)(owner_fnm).toBe("owner");
151
- //insert
152
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, { role_id: 100 });
153
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
154
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, non_owner_user);
155
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
156
- const timid = await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, owner_user);
157
- const alexid = await persons.insertRow({ age: 99, lastname: "Alex", owner: owner_user.id }, owner_user);
158
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
159
- const aggs1 = await persons.aggregationQuery({
160
- npers: {
161
- field: "id",
162
- aggregate: "count",
163
- },
164
- });
165
- (0, globals_1.expect)(+aggs1.npers).toBe(3);
166
- const aggs2 = await persons.aggregationQuery({
167
- npers: {
168
- field: "id",
169
- aggregate: "count",
170
- },
171
- }, { where: { lastname: "Tim" } });
172
- const aggs_pub = await persons.aggregationQuery({
173
- npers: {
174
- field: "id",
175
- aggregate: "count",
176
- },
177
- }, { forPublic: true });
178
- (0, globals_1.expect)(+aggs_pub.npers).toBe(0);
179
- const aggs_owned = await persons.aggregationQuery({
180
- npers: {
181
- field: "id",
182
- aggregate: "count",
183
- },
184
- }, { forUser: owner_user });
185
- (0, globals_1.expect)(+aggs_owned.npers).toBe(2);
186
- const aggs_non_owned = await persons.aggregationQuery({
187
- npers: {
188
- field: "id",
189
- aggregate: "count",
190
- },
191
- }, { forUser: non_owner_user });
192
- (0, globals_1.expect)(+aggs_non_owned.npers).toBe(0);
193
- //not deleting as nonowner
194
- await persons.deleteRows({ id: timid }, non_owner_user);
195
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
196
- //not deleting as public
197
- await persons.deleteRows({ id: timid }, { role_id: 100 });
198
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
199
- //deleting without user
200
- await persons.deleteRows({ id: timid });
201
- (0, globals_1.expect)(await persons.getRow({ lastname: "Tim" })).toBe(null);
202
- //deleting as owner
203
- await persons.deleteRows({ id: alexid }, owner_user);
204
- (0, globals_1.expect)(await persons.getRow({ lastname: "Alex" })).toBe(null);
205
- await persons.delete();
206
- });
207
- });
208
- (0, globals_1.describe)("Table with row ownership field and calculated", () => {
209
- (0, globals_1.it)("should create and delete table", async () => {
210
- const persons = await table_1.default.create("TableOwned");
211
- await field_1.default.create({
212
- table: persons,
213
- name: "lastname",
214
- type: "String",
215
- });
216
- await field_1.default.create({
217
- table: persons,
218
- name: "age",
219
- type: "Integer",
220
- });
221
- await field_1.default.create({
222
- table: persons,
223
- name: "nameandage",
224
- type: "String",
225
- calculated: true,
226
- stored: true,
227
- expression: "lastname+age",
228
- });
229
- const owner = await field_1.default.create({
230
- table: persons,
231
- name: "owner",
232
- type: "Key to users",
233
- });
234
- await persons.update({ ownership_field_id: owner.id });
235
- await persons.insertRow({ lastname: "Joe", age: 12 });
236
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
237
- await test_person_table(persons);
238
- const owner_fnm = await persons.owner_fieldname();
239
- (0, globals_1.expect)(owner_fnm).toBe("owner");
240
- //insert
241
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, { role_id: 100 });
242
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
243
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, non_owner_user);
244
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
245
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, owner_user);
246
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
247
- await persons.delete();
248
- });
249
- });
250
- (0, globals_1.describe)("Table with row ownership formula", () => {
251
- (0, globals_1.it)("should create and delete table", async () => {
252
- const persons = await table_1.default.create("TableOwnedFml");
253
- await field_1.default.create({
254
- table: persons,
255
- name: "lastname",
256
- type: "String",
257
- });
258
- await field_1.default.create({
259
- table: persons,
260
- name: "age",
261
- type: "Integer",
262
- });
263
- const owner = await field_1.default.create({
264
- table: persons,
265
- name: "owner",
266
- type: "Key to users",
267
- });
268
- const own_opts = await table_1.default.findOne({
269
- name: "TableOwnedFml",
270
- })?.ownership_options();
271
- (0, globals_1.expect)(own_opts?.length).toBe(1);
272
- (0, globals_1.expect)(own_opts?.[0].label).toBe("owner");
273
- (0, globals_1.expect)(own_opts?.[0].value).toBe(`${owner.id}`);
274
- await persons.update({ ownership_formula: "user.id===owner" });
275
- await persons.insertRow({ lastname: "Joe", age: 12 });
276
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
277
- await test_person_table(persons);
278
- //insert
279
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, { role_id: 100 });
280
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
281
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, non_owner_user);
282
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
283
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, owner_user);
284
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
285
- await persons.deleteRows({ lastname: "Tim" }, non_owner_user);
286
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
287
- await persons.deleteRows({ lastname: "Tim" }, owner_user);
288
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
289
- (0, globals_1.expect)(persons.ownership_formula_where(owner_user)).toStrictEqual({
290
- owner: 1,
291
- });
292
- (0, globals_1.expect)(persons.ownership_formula_where(non_owner_user)).toStrictEqual({
293
- owner: 3,
294
- });
295
- await persons.delete();
296
- });
297
- (0, globals_1.it)("should create and delete table with reversed formula", async () => {
298
- const persons = await table_1.default.create("TableOwnedFml");
299
- await field_1.default.create({
300
- table: persons,
301
- name: "lastname",
302
- type: "String",
303
- });
304
- await field_1.default.create({
305
- table: persons,
306
- name: "age",
307
- type: "Integer",
308
- });
309
- const owner = await field_1.default.create({
310
- table: persons,
311
- name: "owner",
312
- type: "Key to users",
313
- });
314
- const own_opts = await table_1.default.findOne({
315
- name: "TableOwnedFml",
316
- })?.ownership_options();
317
- (0, globals_1.expect)(own_opts?.length).toBe(1);
318
- (0, globals_1.expect)(own_opts?.[0].label).toBe("owner");
319
- (0, globals_1.expect)(own_opts?.[0].value).toBe(`${owner.id}`);
320
- await persons.update({ ownership_formula: "owner===user.id" });
321
- await persons.insertRow({ lastname: "Joe", age: 12 });
322
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
323
- await test_person_table(persons);
324
- //insert
325
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, { role_id: 100 });
326
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
327
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, non_owner_user);
328
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
329
- await persons.insertRow({ age: 99, lastname: "Tim", owner: owner_user.id }, owner_user);
330
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
331
- await persons.deleteRows({ lastname: "Tim" }, non_owner_user);
332
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
333
- await persons.deleteRows({ lastname: "Tim" }, owner_user);
334
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
335
- (0, globals_1.expect)(persons.ownership_formula_where(owner_user)).toStrictEqual({
336
- owner: 1,
337
- });
338
- (0, globals_1.expect)(persons.ownership_formula_where(non_owner_user)).toStrictEqual({
339
- owner: 3,
340
- });
341
- await persons.delete();
342
- });
343
- });
344
- (0, globals_1.describe)("Table with row ownership joined formula nocalc", () => {
345
- (0, globals_1.it)("should create and delete table", async () => {
346
- const department = await table_1.default.create("_Department");
347
- await field_1.default.create({
348
- table: department,
349
- name: "name",
350
- type: "String",
351
- });
352
- const manager = await field_1.default.create({
353
- table: department,
354
- name: "manager",
355
- type: "Key to users",
356
- });
357
- await department.update({ ownership_field_id: manager.id });
358
- const persons = await table_1.default.create("TableOwnedJnFml");
359
- await field_1.default.create({
360
- table: persons,
361
- name: "lastname",
362
- type: "String",
363
- });
364
- await field_1.default.create({
365
- table: persons,
366
- name: "age",
367
- type: "Integer",
368
- });
369
- const deptkey = await field_1.default.create({
370
- table: persons,
371
- name: "department",
372
- type: "Key to _Department",
373
- });
374
- const own_opts = await table_1.default.findOne({
375
- name: "TableOwnedJnFml",
376
- })?.ownership_options();
377
- (0, globals_1.expect)(own_opts?.length).toBe(1);
378
- //expect(own_opts).toBe(1);
379
- (0, globals_1.expect)(own_opts?.[0].label).toBe("Inherit department");
380
- (0, globals_1.expect)(own_opts?.[0].value).toBe("Fml:department?.manager===user.id /* Inherit department */");
381
- await persons.update({
382
- ownership_formula: "department?.manager===user.id",
383
- });
384
- (0, globals_1.expect)(persons.ownership_formula_where(owner_user)).toStrictEqual({
385
- department: {
386
- inSelect: {
387
- field: "id",
388
- table: "_Department",
389
- tenant: "public",
390
- where: { manager: 1 },
391
- },
392
- },
393
- });
394
- await department.insertRow({ name: "Accounting", manager: 1 });
395
- await department.insertRow({ name: "HR", manager: 2 });
396
- await persons.insertRow({ lastname: "Joe", age: 12, department: 2 });
397
- await persons.insertRow({ lastname: "Sam", age: 13, department: 1 });
398
- await test_person_table(persons);
399
- //insert
400
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, { role_id: 100 });
401
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
402
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, non_owner_user);
403
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
404
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, owner_user);
405
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
406
- await persons.delete();
407
- await department.delete();
408
- });
409
- (0, globals_1.it)("should create and delete table reversed formula", async () => {
410
- const department = await table_1.default.create("_Department");
411
- await field_1.default.create({
412
- table: department,
413
- name: "name",
414
- type: "String",
415
- });
416
- const manager = await field_1.default.create({
417
- table: department,
418
- name: "manager",
419
- type: "Key to users",
420
- });
421
- await department.update({ ownership_field_id: manager.id });
422
- const persons = await table_1.default.create("TableOwnedJnFml");
423
- await field_1.default.create({
424
- table: persons,
425
- name: "lastname",
426
- type: "String",
427
- });
428
- await field_1.default.create({
429
- table: persons,
430
- name: "age",
431
- type: "Integer",
432
- });
433
- const deptkey = await field_1.default.create({
434
- table: persons,
435
- name: "department",
436
- type: "Key to _Department",
437
- });
438
- const own_opts = await table_1.default.findOne({
439
- name: "TableOwnedJnFml",
440
- })?.ownership_options();
441
- (0, globals_1.expect)(own_opts?.length).toBe(1);
442
- //expect(own_opts).toBe(1);
443
- (0, globals_1.expect)(own_opts?.[0].label).toBe("Inherit department");
444
- (0, globals_1.expect)(own_opts?.[0].value).toBe("Fml:department?.manager===user.id /* Inherit department */");
445
- await persons.update({
446
- ownership_formula: "user.id===department?.manager",
447
- });
448
- (0, globals_1.expect)(persons.ownership_formula_where(owner_user)).toStrictEqual({
449
- department: {
450
- inSelect: {
451
- field: "id",
452
- table: "_Department",
453
- tenant: "public",
454
- where: { manager: 1 },
455
- },
456
- },
457
- });
458
- await department.insertRow({ name: "Accounting", manager: 1 });
459
- await department.insertRow({ name: "HR", manager: 2 });
460
- await persons.insertRow({ lastname: "Joe", age: 12, department: 2 });
461
- await persons.insertRow({ lastname: "Sam", age: 13, department: 1 });
462
- await test_person_table(persons);
463
- //insert
464
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, { role_id: 100 });
465
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
466
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, non_owner_user);
467
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
468
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, owner_user);
469
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
470
- await persons.delete();
471
- await department.delete();
472
- });
473
- });
474
- (0, globals_1.describe)("Table with row ownership joined formula and stored calc", () => {
475
- (0, globals_1.it)("should create and delete table", async () => {
476
- const department = await table_1.default.create("_Department");
477
- await field_1.default.create({
478
- table: department,
479
- name: "name",
480
- type: "String",
481
- });
482
- const manager = await field_1.default.create({
483
- table: department,
484
- name: "manager",
485
- type: "Key to users",
486
- });
487
- await department.update({ ownership_field_id: manager.id });
488
- const persons = await table_1.default.create("TableOwnedJnFml");
489
- await field_1.default.create({
490
- table: persons,
491
- name: "lastname",
492
- type: "String",
493
- });
494
- await field_1.default.create({
495
- table: persons,
496
- name: "age",
497
- type: "Integer",
498
- });
499
- await field_1.default.create({
500
- table: persons,
501
- name: "nameandage",
502
- type: "String",
503
- calculated: true,
504
- stored: true,
505
- expression: "lastname+age",
506
- });
507
- const deptkey = await field_1.default.create({
508
- table: persons,
509
- name: "department",
510
- type: "Key to _Department",
511
- });
512
- const own_opts = await table_1.default.findOne({
513
- name: "TableOwnedJnFml",
514
- })?.ownership_options();
515
- (0, globals_1.expect)(own_opts?.length).toBe(1);
516
- //expect(own_opts).toBe(1);
517
- (0, globals_1.expect)(own_opts?.[0].label).toBe("Inherit department");
518
- (0, globals_1.expect)(own_opts?.[0].value).toBe("Fml:department?.manager===user.id /* Inherit department */");
519
- await persons.update({
520
- ownership_formula: "department?.manager===user.id",
521
- });
522
- await department.insertRow({ name: "Accounting", manager: 1 });
523
- await department.insertRow({ name: "HR", manager: 2 });
524
- await persons.insertRow({ lastname: "Joe", age: 12, department: 2 });
525
- await persons.insertRow({ lastname: "Sam", age: 13, department: 1 });
526
- await test_person_table(persons);
527
- //insert
528
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, { role_id: 100 });
529
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
530
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, non_owner_user);
531
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(undefined);
532
- await persons.insertRow({ age: 99, lastname: "Tim", department: 1 }, owner_user);
533
- (0, globals_1.expect)((await persons.getRow({ lastname: "Tim" }))?.age).toBe(99);
534
- await persons.delete();
535
- await department.delete();
536
- });
537
- });
538
- (0, globals_1.describe)("ownerhip of users table", () => {
539
- (0, globals_1.it)("should find own row", async () => {
540
- const users = table_1.default.findOne({ name: "users" });
541
- (0, assertions_1.assertIsSet)(users);
542
- const u3 = await users.getRow({ id: 3 });
543
- (0, assertions_1.assertIsSet)(u3);
544
- (0, globals_1.expect)(u3?.email).toBe("user@foo.com");
545
- const u3forUser = await users.getRow({ id: 3 }, { forUser: u3 });
546
- (0, globals_1.expect)(u3forUser?.email).toBe("user@foo.com");
547
- const u2forUser = await users.getRow({ id: 2 }, { forUser: u3 });
548
- (0, globals_1.expect)(u2forUser).toBe(null);
549
- });
550
- });
551
- (0, globals_1.describe)("User group no spaces", () => {
552
- (0, globals_1.it)("should support user groups", async () => {
553
- const projects = await table_1.default.create("Project");
554
- await field_1.default.create({
555
- table: projects,
556
- name: "name",
557
- type: "String",
558
- });
559
- const user_works_proj = await table_1.default.create("UserWorksOnProject");
560
- await field_1.default.create({
561
- table: user_works_proj,
562
- name: "user",
563
- type: "Key to users",
564
- });
565
- await field_1.default.create({
566
- table: user_works_proj,
567
- name: "project",
568
- type: "Key to Project",
569
- });
570
- await user_works_proj.update({ is_user_group: true });
571
- const projs = table_1.default.findOne({ name: "Project" });
572
- (0, assertions_1.assertIsSet)(projs);
573
- const own_opts = await projs.ownership_options();
574
- (0, globals_1.expect)(own_opts).toEqual([
575
- {
576
- label: "In UserWorksOnProject user group by project",
577
- value: "Fml:user.UserWorksOnProject_by_user.map(g=>g.project).includes(id) /* User group UserWorksOnProject */",
578
- },
579
- ]);
580
- await projs.update({
581
- ownership_formula: own_opts[0].value.replace("Fml:", ""),
582
- });
583
- const projid = await projects.insertRow({ name: "World domination" });
584
- const user = await user_1.default.findOne({ role_id: 80 });
585
- (0, assertions_1.assertIsSet)(user);
586
- await user_works_proj.insertRow({ project: projid, user: user.id });
587
- const uobj = await user_1.default.findForSession({ id: user.id });
588
- (0, assertions_1.assertIsSet)(uobj);
589
- (0, globals_1.expect)(uobj.id).toBe(user.id);
590
- (0, globals_1.expect)(uobj.role_id).toBe(80);
591
- (0, globals_1.expect)(uobj.UserWorksOnProject_by_user).toEqual([
592
- { id: 1, project: 1, user: 3 },
593
- ]);
594
- const owned_rows = await projs.getJoinedRows({
595
- where: {},
596
- forUser: uobj,
597
- });
598
- (0, globals_1.expect)(owned_rows.length).toBe(1);
599
- const myproj = await projs.getRow({ id: projid });
600
- (0, assertions_1.assertIsSet)(myproj);
601
- (0, globals_1.expect)(projs.is_owner(uobj, myproj)).toBe(true);
602
- const projid1 = await projects.insertRow({ name: "Take out trash" });
603
- const staff = await user_1.default.findOne({ role_id: 40 });
604
- (0, assertions_1.assertIsSet)(staff);
605
- await user_works_proj.insertRow({ project: projid1, user: staff.id });
606
- const myproj1 = await projs.getRow({ id: projid1 });
607
- (0, assertions_1.assertIsSet)(myproj1);
608
- const staffobj = await user_1.default.findForSession({ id: staff.id });
609
- (0, assertions_1.assertIsSet)(staffobj);
610
- (0, globals_1.expect)(projs.is_owner(staffobj, myproj)).toBe(false);
611
- (0, globals_1.expect)(projs.is_owner(staffobj, myproj1)).toBe(true);
612
- (0, globals_1.expect)(projs.is_owner(uobj, myproj1)).toBe(false);
613
- // admin is not "owner" but can still read/write due to min_role etc.
614
- const adminobj = await user_1.default.findForSession({ role_id: 1 });
615
- (0, assertions_1.assertIsSet)(adminobj);
616
- (0, globals_1.expect)(projs.is_owner(adminobj, myproj)).toBe(false);
617
- (0, globals_1.expect)(projs.is_owner(adminobj, myproj1)).toBe(false);
618
- const tasks = await table_1.default.create("tasks");
619
- await field_1.default.create({
620
- table: tasks,
621
- name: "project",
622
- type: "Key to Project",
623
- });
624
- const task_opts = await table_1.default.findOne({
625
- name: "tasks",
626
- })?.ownership_options();
627
- (0, globals_1.expect)(task_opts).toEqual([
628
- {
629
- label: "Inherit project",
630
- value: "Fml:user.UserWorksOnProject_by_user.map(g=>g.project).includes(project) /* Inherit project */",
631
- },
632
- ]);
633
- await tasks.update({
634
- ownership_formula: task_opts?.[0].value.replace("Fml:", ""),
635
- });
636
- const owned_rows1 = await tasks.getJoinedRows({
637
- where: {},
638
- forUser: uobj,
639
- });
640
- (0, globals_1.expect)(owned_rows1.length).toBe(0);
641
- const subtasks = await table_1.default.create("subtasks");
642
- await field_1.default.create({
643
- table: subtasks,
644
- name: "task",
645
- type: "Key to tasks",
646
- });
647
- const subtask_opts = await table_1.default.findOne({
648
- name: "subtasks",
649
- })?.ownership_options();
650
- (0, globals_1.expect)(subtask_opts).toEqual([
651
- {
652
- label: "Inherit task",
653
- value: "Fml:user.UserWorksOnProject_by_user.map(g=>g.project).includes(task?.project) /* Inherit task */",
654
- },
655
- ]);
656
- await subtasks.update({
657
- ownership_formula: subtask_opts?.[0].value.replace("Fml:", ""),
658
- });
659
- const owned_rows2 = await subtasks.getJoinedRows({
660
- where: {},
661
- forUser: uobj,
662
- });
663
- (0, globals_1.expect)(owned_rows2.length).toBe(0);
664
- await subtasks.delete();
665
- await tasks.delete();
666
- await user_works_proj.delete();
667
- await projects.delete();
668
- });
669
- });
670
- (0, globals_1.describe)("User group with spaces in name", () => {
671
- (0, globals_1.it)("should support user groups", async () => {
672
- const projects = await table_1.default.create("The Project");
673
- await field_1.default.create({
674
- table: projects,
675
- name: "name",
676
- type: "String",
677
- });
678
- const user_works_proj = await table_1.default.create("User Works On Project1");
679
- await field_1.default.create({
680
- table: user_works_proj,
681
- name: "user",
682
- type: "Key to users",
683
- });
684
- await field_1.default.create({
685
- table: user_works_proj,
686
- name: "project",
687
- type: "Key to The Project",
688
- });
689
- await user_works_proj.update({ is_user_group: true });
690
- const projs = table_1.default.findOne({ name: "The Project" });
691
- (0, assertions_1.assertIsSet)(projs);
692
- const own_opts = await projs.ownership_options();
693
- (0, globals_1.expect)(own_opts).toEqual([
694
- {
695
- label: "In User Works On Project1 user group by project",
696
- value: "Fml:user.UserWorksOnProject1_by_user.map(g=>g.project).includes(id) /* User group User Works On Project1 */",
697
- },
698
- ]);
699
- await projs.update({
700
- ownership_formula: own_opts[0].value.replace("Fml:", ""),
701
- });
702
- const projid = await projects.insertRow({ name: "World domination" });
703
- const user = await user_1.default.findOne({ role_id: 80 });
704
- (0, assertions_1.assertIsSet)(user);
705
- await user_works_proj.insertRow({ project: projid, user: user.id });
706
- const uobj = await user_1.default.findForSession({ id: user.id });
707
- (0, assertions_1.assertIsSet)(uobj);
708
- (0, globals_1.expect)(uobj.id).toBe(user.id);
709
- (0, globals_1.expect)(uobj.role_id).toBe(80);
710
- (0, globals_1.expect)(uobj.UserWorksOnProject1_by_user).toEqual([
711
- { id: 1, project: 1, user: 3 },
712
- ]);
713
- const myproj = await projs.getRow({ id: projid });
714
- (0, assertions_1.assertIsSet)(myproj);
715
- (0, globals_1.expect)(projs.is_owner(uobj, myproj)).toBe(true);
716
- const owned_rows = await projs.getJoinedRows({
717
- where: {},
718
- forUser: uobj,
719
- });
720
- (0, globals_1.expect)(owned_rows.length).toBe(1);
721
- const projid1 = await projects.insertRow({ name: "Take out trash" });
722
- const staff = await user_1.default.findOne({ role_id: 40 });
723
- (0, assertions_1.assertIsSet)(staff);
724
- await user_works_proj.insertRow({ project: projid1, user: staff.id });
725
- const myproj1 = await projs.getRow({ id: projid1 });
726
- (0, assertions_1.assertIsSet)(myproj1);
727
- const staffobj = await user_1.default.findForSession({ id: staff.id });
728
- (0, assertions_1.assertIsSet)(staffobj);
729
- (0, globals_1.expect)(projs.is_owner(staffobj, myproj)).toBe(false);
730
- (0, globals_1.expect)(projs.is_owner(staffobj, myproj1)).toBe(true);
731
- (0, globals_1.expect)(projs.is_owner(uobj, myproj1)).toBe(false);
732
- // admin is not "owner" but can still read/write due to min_role etc.
733
- const adminobj = await user_1.default.findForSession({ role_id: 1 });
734
- (0, assertions_1.assertIsSet)(adminobj);
735
- (0, globals_1.expect)(projs.is_owner(adminobj, myproj)).toBe(false);
736
- (0, globals_1.expect)(projs.is_owner(adminobj, myproj1)).toBe(false);
737
- const tasks = await table_1.default.create("tasks1");
738
- await field_1.default.create({
739
- table: tasks,
740
- name: "project",
741
- type: "Key to The Project",
742
- });
743
- const task_opts = await table_1.default.findOne({
744
- name: "tasks1",
745
- })?.ownership_options();
746
- (0, globals_1.expect)(task_opts).toEqual([
747
- {
748
- label: "Inherit project",
749
- value: "Fml:user.UserWorksOnProject1_by_user.map(g=>g.project).includes(project) /* Inherit project */",
750
- },
751
- ]);
752
- await tasks.update({
753
- ownership_formula: task_opts?.[0].value.replace("Fml:", ""),
754
- });
755
- const subtasks = await table_1.default.create("subtasks1");
756
- await field_1.default.create({
757
- table: subtasks,
758
- name: "task",
759
- type: "Key to tasks1",
760
- });
761
- const subtask_opts = await table_1.default.findOne({
762
- name: "subtasks1",
763
- })?.ownership_options();
764
- (0, globals_1.expect)(subtask_opts).toEqual([
765
- {
766
- label: "Inherit task",
767
- value: "Fml:user.UserWorksOnProject1_by_user.map(g=>g.project).includes(task?.project) /* Inherit task */",
768
- },
769
- ]);
770
- await subtasks.delete();
771
- await tasks.delete();
772
- await user_works_proj.delete();
773
- await projects.delete();
774
- });
775
- });
776
- (0, globals_1.describe)("ownership_formula_where", () => {
777
- (0, globals_1.it)("should create table", async () => {
778
- const tasks = await table_1.default.create("tasks1");
779
- await field_1.default.create({
780
- table: tasks,
781
- name: "name",
782
- type: "String",
783
- });
784
- });
785
- (0, globals_1.it)("should do constant eq user", async () => {
786
- const tasks = table_1.default.findOne("tasks1");
787
- (0, assertions_1.assertIsSet)(tasks);
788
- await tasks.update({ ownership_formula: 'user?.clearance==="ALL"' });
789
- const where = tasks.ownership_formula_where({
790
- id: 1,
791
- role_id: 80,
792
- clearance: "ALL",
793
- });
794
- (0, globals_1.expect)(where).toStrictEqual({ eq: ["ALL", "ALL"] });
795
- });
796
- (0, globals_1.it)("should do constant eq user", async () => {
797
- const tasks = table_1.default.findOne("tasks1");
798
- (0, assertions_1.assertIsSet)(tasks);
799
- await tasks.update({ ownership_formula: 'user?.clearance==="ALL"' });
800
- const where = tasks.ownership_formula_where({
801
- id: 1,
802
- role_id: 80,
803
- clearance: "NONE",
804
- });
805
- (0, globals_1.expect)(where).toStrictEqual({ eq: ["NONE", "ALL"] });
806
- });
807
- (0, globals_1.it)("should do constant eq user", async () => {
808
- const tasks = table_1.default.findOne("tasks1");
809
- (0, assertions_1.assertIsSet)(tasks);
810
- await tasks.update({
811
- ownership_formula: 'user.department === name || user.department === "ALL"',
812
- });
813
- const where = tasks.ownership_formula_where({
814
- id: 1,
815
- role_id: 80,
816
- department: "ALL",
817
- });
818
- (0, globals_1.expect)(JSON.stringify(where)).toBe(JSON.stringify({
819
- or: [{ eq: ["ALL", Symbol("name")] }, { eq: ["ALL", "ALL"] }],
820
- }));
821
- });
822
- });
823
- //user.department === bankid.access || user.department === "ALL
824
- //# sourceMappingURL=auth.test.js.map