@saltcorn/admin-models 1.6.0-alpha.7 → 1.6.0-alpha.8

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backup.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.test.d.ts","sourceRoot":"","sources":["../../tests/backup.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,204 @@
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 index_1 = __importDefault(require("@saltcorn/data/db/index"));
7
+ const { getState } = require("@saltcorn/data/db/state");
8
+ getState().registerPlugin("base", require("@saltcorn/data/base-plugin"));
9
+ const backup_1 = __importDefault(require("../models/backup"));
10
+ const { create_backup, restore } = backup_1.default;
11
+ const reset = require("@saltcorn/data/db/reset_schema");
12
+ const promises_1 = require("fs/promises");
13
+ const table_1 = __importDefault(require("@saltcorn/data/models/table"));
14
+ const view_1 = __importDefault(require("@saltcorn/data/models/view"));
15
+ const user_1 = __importDefault(require("@saltcorn/data/models/user"));
16
+ const config_1 = __importDefault(require("@saltcorn/data/models/config"));
17
+ const { setConfig, getConfig } = config_1.default;
18
+ const trigger_1 = __importDefault(require("@saltcorn/data/models/trigger"));
19
+ const library_1 = __importDefault(require("@saltcorn/data/models/library"));
20
+ const metadata_1 = __importDefault(require("@saltcorn/data/models/metadata"));
21
+ const role_1 = __importDefault(require("@saltcorn/data/models/role"));
22
+ const workflow_step_1 = __importDefault(require("@saltcorn/data/models/workflow_step"));
23
+ const assertions_1 = require("@saltcorn/data/tests/assertions");
24
+ const globals_1 = require("@jest/globals");
25
+ const field_1 = __importDefault(require("@saltcorn/data/models/field"));
26
+ const mocks_1 = __importDefault(require("@saltcorn/data/tests/mocks"));
27
+ const { mockReqRes, plugin_with_routes } = mocks_1.default;
28
+ (0, globals_1.afterAll)(index_1.default.close);
29
+ (0, globals_1.beforeAll)(async () => {
30
+ await require("@saltcorn/data/db/reset_schema")();
31
+ await require("@saltcorn/data/db/fixtures")();
32
+ getState().registerPlugin("mock_plugin", plugin_with_routes());
33
+ });
34
+ jest.setTimeout(30000);
35
+ (0, globals_1.describe)("Backup and restore", () => {
36
+ (0, globals_1.it)("should create and restore backup", async () => {
37
+ await setConfig("site_name", "backups rule!");
38
+ await setConfig("menu_items", [
39
+ {
40
+ type: "Page",
41
+ label: "a_page",
42
+ min_role: 100,
43
+ pagename: "a_page",
44
+ },
45
+ {
46
+ url: "https://www.bbc.co.uk/news",
47
+ icon: "undefined",
48
+ text: "BBC",
49
+ type: "Link",
50
+ label: "BBC",
51
+ style: "",
52
+ location: "Standard",
53
+ min_role: 100,
54
+ },
55
+ ]);
56
+ const sn1 = await getConfig("site_name");
57
+ (0, globals_1.expect)(sn1).toBe("backups rule!");
58
+ await role_1.default.create({ role: "paid", id: 60 });
59
+ await table_1.default.create("myblanktable", { min_role_read: 60 });
60
+ const vtbl = await table_1.default.create("myversionedtable", {
61
+ min_role_read: 80,
62
+ versioned: true,
63
+ });
64
+ await field_1.default.create({
65
+ name: "name",
66
+ type: "String",
67
+ table: vtbl,
68
+ });
69
+ await vtbl.insertRow({ name: "Fred" });
70
+ await vtbl.updateRow({ name: "Sam" }, 1);
71
+ await vtbl.insertRow({ name: 'My \nSp\\ecial "Friend"' });
72
+ await trigger_1.default.create({
73
+ name: "footrig",
74
+ table_id: 1,
75
+ when_trigger: "Insert",
76
+ action: "run_js_code",
77
+ configuration: { code: "console.log('new user')" },
78
+ });
79
+ await trigger_1.default.create({
80
+ name: "hourtrig",
81
+ when_trigger: "Hourly",
82
+ action: "run_js_code",
83
+ configuration: { code: "console.log('cuckoo')" },
84
+ });
85
+ const trigger = await trigger_1.default.create({
86
+ action: "Workflow",
87
+ when_trigger: "Never",
88
+ name: "mywf",
89
+ });
90
+ await workflow_step_1.default.create({
91
+ trigger_id: trigger.id,
92
+ name: "first_step",
93
+ next_step: "second_step",
94
+ action_name: "run_js_code",
95
+ initial_step: true,
96
+ configuration: { code: `return {x:1}` },
97
+ });
98
+ await workflow_step_1.default.create({
99
+ trigger_id: trigger.id,
100
+ name: "second_step",
101
+ next_step: "third_step",
102
+ action_name: "run_js_code",
103
+ initial_step: false,
104
+ configuration: { code: `return {y:x+1}` },
105
+ });
106
+ await library_1.default.create({
107
+ name: "foo",
108
+ icon: "fa-bar",
109
+ layout: { baz: "bar" },
110
+ });
111
+ await metadata_1.default.create({
112
+ type: "PromptSummary",
113
+ name: "View45",
114
+ user_id: 1,
115
+ written_at: new Date(),
116
+ body: { foo: { bar: 1 }, baz: 7 },
117
+ });
118
+ await table_1.default.create("JoeTable", {
119
+ provider_name: "provtab",
120
+ provider_cfg: { middle_name: "Robinette" },
121
+ });
122
+ await user_1.default.table.update({
123
+ min_role_read: 40,
124
+ description: "Users are the best",
125
+ });
126
+ await getState().refresh_tables();
127
+ const fnm = await create_backup();
128
+ const t1 = table_1.default.findOne({ name: "books" });
129
+ (0, assertions_1.assertIsSet)(t1);
130
+ const t1c = await t1.countRows();
131
+ const v1 = await view_1.default.find();
132
+ (0, globals_1.expect)(!!t1).toBe(true);
133
+ await reset();
134
+ const admu = await user_1.default.create({
135
+ email: "admin@foo.com",
136
+ password: "AhGGr6rhu45",
137
+ role_id: 1,
138
+ });
139
+ (0, assertions_1.assertsObjectIsUser)(admu);
140
+ (0, globals_1.expect)(typeof admu.password).toBe("string");
141
+ (0, globals_1.expect)(user_1.default.table.min_role_read).toBe(1);
142
+ const t2 = table_1.default.findOne({ name: "books" });
143
+ (0, globals_1.expect)(t2).toBe(null);
144
+ const sn0 = await getConfig("site_name");
145
+ (0, globals_1.expect)(sn0).toBe("Saltcorn");
146
+ const menus0 = await getConfig("menu_items", []);
147
+ (0, globals_1.expect)(menus0.length).toBe(7); // newly liberated menu items
148
+ //restore
149
+ const restore_res = await restore(fnm, (p) => { });
150
+ await (0, promises_1.unlink)(fnm);
151
+ (0, globals_1.expect)(restore_res).toBe(undefined);
152
+ const t3 = table_1.default.findOne({ name: "books" });
153
+ (0, assertions_1.assertIsSet)(t3);
154
+ (0, globals_1.expect)(!!t3).toBe(true);
155
+ const t5 = table_1.default.findOne({ name: "myblanktable" });
156
+ (0, assertions_1.assertIsSet)(t5);
157
+ const t6 = table_1.default.findOne({ name: "myversionedtable" });
158
+ (0, assertions_1.assertIsSet)(t6);
159
+ const vhist = await t6.get_history();
160
+ (0, globals_1.expect)(vhist.length).toBe(3);
161
+ const t6row = await t6.getRow({ id: 2 });
162
+ (0, assertions_1.assertIsSet)(t6row);
163
+ (0, globals_1.expect)(t6row.name).toBe('My \nSp\\ecial "Friend"');
164
+ (0, globals_1.expect)(!!t5).toBe(true);
165
+ (0, globals_1.expect)(t5.min_role_read).toBe(60);
166
+ const t3c = await t3.countRows();
167
+ (0, globals_1.expect)(t1c).toBe(t3c);
168
+ const v2 = await view_1.default.find();
169
+ (0, globals_1.expect)(v1.length).toBe(v2.length);
170
+ const sn = await getConfig("site_name");
171
+ (0, globals_1.expect)(sn).toBe("backups rule!");
172
+ const menus = await getConfig("menu_items");
173
+ (0, globals_1.expect)(menus.length).toBe(2);
174
+ (0, globals_1.expect)(menus[0].type).toBe("Page");
175
+ (0, globals_1.expect)(menus[0].pagename).toBe("a_page");
176
+ (0, globals_1.expect)(menus[1].type).toBe("Link");
177
+ (0, globals_1.expect)(menus[1].url).toBe("https://www.bbc.co.uk/news");
178
+ await t3.insertRow({ author: "Marcus Rediker", pages: 224 });
179
+ const staff = await user_1.default.findOne({ email: "staff@foo.com" });
180
+ (0, globals_1.expect)(!!staff).toBe(true);
181
+ (0, assertions_1.assertsObjectIsUser)(staff);
182
+ (0, globals_1.expect)(typeof staff.password).toBe("string");
183
+ const trig = await trigger_1.default.findOne({ name: "footrig" });
184
+ (0, globals_1.expect)(!!trig).toBe(true);
185
+ const htrig = await trigger_1.default.findOne({ name: "hourtrig" });
186
+ (0, globals_1.expect)(!!htrig).toBe(true);
187
+ const mywf = await trigger_1.default.findOne({ name: "mywf" });
188
+ (0, globals_1.expect)(!!mywf).toBe(true);
189
+ const mySteps = await workflow_step_1.default.find({ trigger_id: mywf.id });
190
+ (0, globals_1.expect)(mySteps.length).toBe(2);
191
+ const lib = await library_1.default.findOne({ name: "foo" });
192
+ (0, globals_1.expect)(!!lib).toBe(true);
193
+ const md = await metadata_1.default.findOne({ type: "PromptSummary" });
194
+ (0, globals_1.expect)(!!md).toBe(true);
195
+ (0, globals_1.expect)(md.body.foo.bar).toBe(1);
196
+ const tp = table_1.default.findOne({ name: "JoeTable" });
197
+ (0, globals_1.expect)(tp?.provider_name).toBe("provtab");
198
+ (0, globals_1.expect)(tp?.provider_cfg?.middle_name).toBe("Robinette");
199
+ (0, globals_1.expect)(staff.checkPassword("ghrarhr54hg")).toBe(true);
200
+ (0, globals_1.expect)(user_1.default.table.min_role_read).toBe(40);
201
+ (0, globals_1.expect)(user_1.default.table.description).toBe("Users are the best");
202
+ });
203
+ });
204
+ //# sourceMappingURL=backup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.test.js","sourceRoot":"","sources":["../../tests/backup.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cfgcheck.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfgcheck.test.d.ts","sourceRoot":"","sources":["../../tests/cfgcheck.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
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 index_1 = __importDefault(require("@saltcorn/data/db/index"));
7
+ const { getState } = require("@saltcorn/data/db/state");
8
+ const globals_1 = require("@jest/globals");
9
+ const { runConfigurationCheck } = require("../models/config-check");
10
+ const mocks_1 = __importDefault(require("@saltcorn/data/tests/mocks"));
11
+ const { mockReqRes } = mocks_1.default;
12
+ getState().registerPlugin("base", require("@saltcorn/data/base-plugin"));
13
+ getState().registerPlugin("sbadmin2", require("@saltcorn/sbadmin2"));
14
+ (0, globals_1.beforeAll)(async () => {
15
+ await require("@saltcorn/data/db/reset_schema")();
16
+ await require("@saltcorn/data/db/fixtures")();
17
+ });
18
+ (0, globals_1.afterAll)(async () => {
19
+ await index_1.default.close();
20
+ });
21
+ jest.setTimeout(30000);
22
+ // todo tests for broken view
23
+ // todo tests for broken trigger / action
24
+ // todo tests for broken page
25
+ (0, globals_1.describe)("config check", () => {
26
+ (0, globals_1.it)("runs", async () => {
27
+ const { errors, passes, pass } = await runConfigurationCheck(mockReqRes.req);
28
+ (0, globals_1.expect)(errors).toStrictEqual([]);
29
+ (0, globals_1.expect)(passes.length).toBeGreaterThan(10);
30
+ (0, globals_1.expect)(pass).toBe(true);
31
+ });
32
+ });
33
+ //# sourceMappingURL=cfgcheck.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfgcheck.test.js","sourceRoot":"","sources":["../../tests/cfgcheck.test.ts"],"names":[],"mappings":";;;;;AAAA,oEAAyC;AAEzC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAExD,2CAA0E;AAC1E,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACpE,uEAA+C;AAE/C,MAAM,EAAE,UAAU,EAAE,GAAG,eAAK,CAAC;AAE7B,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACzE,QAAQ,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAErE,IAAA,mBAAS,EAAC,KAAK,IAAI,EAAE;IACnB,MAAM,OAAO,CAAC,gCAAgC,CAAC,EAAE,CAAC;IAClD,MAAM,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAA,kBAAQ,EAAC,KAAK,IAAI,EAAE;IAClB,MAAM,eAAE,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,6BAA6B;AAC7B,yCAAyC;AACzC,6BAA6B;AAC7B,IAAA,kBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAA,YAAE,EAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,CAC1D,UAAU,CAAC,GAAG,CACf,CAAC;QACF,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACjC,IAAA,gBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pack.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.test.d.ts","sourceRoot":"","sources":["../../tests/pack.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,624 @@
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 index_1 = __importDefault(require("@saltcorn/data/db/index"));
7
+ const pack_1 = __importDefault(require("../models/pack"));
8
+ const { table_pack, view_pack, plugin_pack, page_pack, page_group_pack, library_pack, trigger_pack, role_pack, tag_pack, model_pack, model_instance_pack, fetch_available_packs, fetch_pack_by_name, install_pack, can_install_pack, uninstall_pack, create_pack_from_tag, } = pack_1.default;
9
+ const utils_1 = __importDefault(require("@saltcorn/data/utils"));
10
+ const { isStale } = utils_1.default;
11
+ const { getState } = require("@saltcorn/data/db/state");
12
+ const table_1 = __importDefault(require("@saltcorn/data/models/table"));
13
+ const tag_1 = __importDefault(require("@saltcorn/data/models/tag"));
14
+ const globals_1 = require("@jest/globals");
15
+ const trigger_1 = __importDefault(require("@saltcorn/data/models/trigger"));
16
+ const page_group_1 = __importDefault(require("@saltcorn/data/models/page_group"));
17
+ const workflow_step_1 = __importDefault(require("@saltcorn/data/models/workflow_step"));
18
+ const assertions_1 = require("@saltcorn/data/tests/assertions");
19
+ const view_1 = __importDefault(require("@saltcorn/data/models/view"));
20
+ const common_types_1 = require("@saltcorn/types/common_types");
21
+ //import Trigger from "@saltcorn/data/models/trigger";
22
+ getState().registerPlugin("base", require("@saltcorn/data/base-plugin"));
23
+ (0, globals_1.beforeAll)(async () => {
24
+ await require("@saltcorn/data/db/reset_schema")();
25
+ await require("@saltcorn/data/db/fixtures")();
26
+ });
27
+ (0, globals_1.afterAll)(async () => {
28
+ await require("@saltcorn/data/db/reset_schema")();
29
+ await require("@saltcorn/data/db/fixtures")();
30
+ await index_1.default.close();
31
+ });
32
+ jest.setTimeout(30000);
33
+ (0, globals_1.describe)("pack create", () => {
34
+ // table packs
35
+ (0, globals_1.it)("creates table pack", async () => {
36
+ const tpack = await table_pack("patients");
37
+ (0, globals_1.expect)(tpack.fields.length > 1).toBe(true);
38
+ (0, globals_1.expect)(tpack.name).toBe("patients");
39
+ });
40
+ (0, globals_1.it)("creates table pack for patients 2", async () => {
41
+ const table = table_1.default.findOne({ name: "patients" });
42
+ (0, globals_1.expect)(table !== null).toBe(true);
43
+ const tpack = await table_pack(table !== null ? table : "patients");
44
+ (0, globals_1.expect)(tpack.fields.length > 1).toBe(true);
45
+ (0, globals_1.expect)(tpack.name).toBe("patients");
46
+ });
47
+ (0, globals_1.it)("creates table pack for users", async () => {
48
+ const tpack = await table_pack("users");
49
+ (0, globals_1.expect)(tpack.fields.length > 1).toBe(true);
50
+ (0, globals_1.expect)(tpack.name).toBe("users");
51
+ });
52
+ (0, globals_1.it)("creates table pack for non existing table", async () => {
53
+ try {
54
+ await table_pack("nonexist_table");
55
+ }
56
+ catch (error) {
57
+ (0, globals_1.expect)(error.message).toMatch("Unable to find table 'nonexist_table'");
58
+ }
59
+ });
60
+ // view packs
61
+ (0, globals_1.it)("creates view pack", async () => {
62
+ const vpack = await view_pack("authorlist");
63
+ (0, globals_1.expect)(vpack).toEqual({
64
+ attributes: null,
65
+ configuration: {
66
+ columns: [
67
+ { field_name: "author", state_field: "on", type: "Field" },
68
+ { type: "ViewLink", view: "Own:authorshow" },
69
+ { action_name: "Delete", type: "Action" },
70
+ {
71
+ agg_field: "name",
72
+ agg_relation: "patients.favbook",
73
+ stat: "Count",
74
+ type: "Aggregation",
75
+ },
76
+ ],
77
+ },
78
+ exttable_name: null,
79
+ min_role: 100,
80
+ name: "authorlist",
81
+ description: "",
82
+ menu_label: undefined,
83
+ slug: null,
84
+ table: "books",
85
+ viewtemplate: "List",
86
+ default_render_page: null,
87
+ });
88
+ });
89
+ (0, globals_1.it)("creates view pack for non existing view", async () => {
90
+ try {
91
+ await view_pack("nonexist_view");
92
+ }
93
+ catch (error) {
94
+ (0, globals_1.expect)(error.message).toMatch("Unable to find view 'nonexist_view'");
95
+ }
96
+ });
97
+ // plugin packs
98
+ (0, globals_1.it)("creates plugin pack", async () => {
99
+ const ppack = await plugin_pack("base");
100
+ (0, globals_1.expect)(ppack).toStrictEqual({
101
+ configuration: null,
102
+ location: "@saltcorn/base-plugin",
103
+ name: "base",
104
+ deploy_private_key: null,
105
+ source: "npm",
106
+ version: "latest",
107
+ });
108
+ });
109
+ (0, globals_1.it)("creates plugin pack for non existing plugin", async () => {
110
+ try {
111
+ await plugin_pack("nonexist_plugin");
112
+ }
113
+ catch (error) {
114
+ (0, globals_1.expect)(error.message).toMatch("Unable to find plugin 'nonexist_plugin'");
115
+ }
116
+ });
117
+ // page packs
118
+ (0, globals_1.it)("creates page pack", async () => {
119
+ const ppack = await page_pack("a_page");
120
+ (0, globals_1.expect)(ppack).toEqual({
121
+ name: "a_page",
122
+ title: "grgw",
123
+ attributes: null,
124
+ description: "rgerg",
125
+ menu_label: undefined,
126
+ min_role: 100,
127
+ layout: {
128
+ above: [
129
+ {
130
+ type: "blank",
131
+ block: false,
132
+ contents: "Hello world",
133
+ textStyle: "",
134
+ },
135
+ { type: "line_break" },
136
+ { type: "blank", isHTML: true, contents: "<h1> foo</h1>" },
137
+ {
138
+ url: "https://saltcorn.com/",
139
+ text: "Click here",
140
+ type: "link",
141
+ block: false,
142
+ textStyle: "",
143
+ },
144
+ {
145
+ type: "card",
146
+ title: "header",
147
+ contents: {
148
+ above: [
149
+ null,
150
+ {
151
+ aligns: ["left", "left"],
152
+ widths: [6, 6],
153
+ besides: [
154
+ {
155
+ above: [
156
+ null,
157
+ {
158
+ type: "blank",
159
+ block: false,
160
+ contents: "Hello world",
161
+ textStyle: "",
162
+ },
163
+ ],
164
+ },
165
+ {
166
+ above: [
167
+ null,
168
+ {
169
+ type: "blank",
170
+ block: false,
171
+ contents: "Bye bye",
172
+ textStyle: "",
173
+ },
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ ],
179
+ },
180
+ },
181
+ ],
182
+ },
183
+ fixed_states: {},
184
+ root_page_for_roles: [],
185
+ });
186
+ });
187
+ (0, globals_1.it)("creates page pack for non existing page", async () => {
188
+ try {
189
+ await page_pack("nonexist_page");
190
+ }
191
+ catch (error) {
192
+ (0, globals_1.expect)(error.message).toMatch("Unable to find page 'nonexist_page'");
193
+ }
194
+ });
195
+ (0, globals_1.it)("creates page group pack", async () => {
196
+ const groupPack = await page_group_pack("page_group");
197
+ (0, globals_1.expect)(groupPack).toEqual({
198
+ name: "page_group",
199
+ description: null,
200
+ min_role: 100,
201
+ random_allocation: false,
202
+ members: [
203
+ {
204
+ page_name: "iPhone SE",
205
+ description: null,
206
+ sequence: 1,
207
+ eligible_formula: "width < 380 && height < 670 && user.id === 1 && locale === 'en'",
208
+ },
209
+ {
210
+ page_name: "iPhone XR",
211
+ description: null,
212
+ sequence: 2,
213
+ eligible_formula: "width < 415 && height < 900 && user.id === 1 && locale === 'en'",
214
+ },
215
+ {
216
+ page_name: "Surface Pro 7",
217
+ description: null,
218
+ sequence: 3,
219
+ eligible_formula: "width < 915 && height < 1370 && user.id === 1 && locale === 'en'",
220
+ },
221
+ {
222
+ page_name: "Laptop",
223
+ description: null,
224
+ sequence: 4,
225
+ eligible_formula: "width <= 1920 && height <= 1000 && user.id === 1 && locale === 'en'",
226
+ },
227
+ ],
228
+ });
229
+ });
230
+ (0, globals_1.it)("creates page pack for non existing page group", async () => {
231
+ try {
232
+ await page_group_pack("nonexist_page_group");
233
+ }
234
+ catch (error) {
235
+ (0, globals_1.expect)(error.message).toMatch("Unable to find page group 'nonexist_page_group'");
236
+ }
237
+ });
238
+ // todo library packs - needs to add library to fixture
239
+ // trigger packs
240
+ (0, globals_1.it)("creates trigger pack", async () => {
241
+ // triggers
242
+ await trigger_1.default.create({
243
+ name: "NeverActionTrigger",
244
+ action: "webhook",
245
+ description: "This is test trigger1",
246
+ //table_id: null
247
+ when_trigger: "Never",
248
+ configuration: {
249
+ // from https://requestbin.com/
250
+ // to inspect https://pipedream.com/sources/dc_jku44wk
251
+ url: "https://b6af540a71dce96ec130de5a0c47ada6.m.pipedream.net",
252
+ },
253
+ });
254
+ const trpack = await trigger_pack("NeverActionTrigger");
255
+ //expect(trpack.name ).toBe(true);
256
+ (0, globals_1.expect)(trpack.when_trigger).toBe("Never");
257
+ });
258
+ (0, globals_1.it)("creates trigger pack", async () => {
259
+ const trigger = await trigger_1.default.create({
260
+ action: "Workflow",
261
+ when_trigger: "Never",
262
+ name: "mywf",
263
+ });
264
+ await workflow_step_1.default.create({
265
+ trigger_id: trigger.id,
266
+ name: "first_step",
267
+ next_step: "second_step",
268
+ action_name: "run_js_code",
269
+ initial_step: true,
270
+ configuration: { code: `return {x:1}` },
271
+ });
272
+ await workflow_step_1.default.create({
273
+ trigger_id: trigger.id,
274
+ name: "second_step",
275
+ next_step: "third_step",
276
+ action_name: "run_js_code",
277
+ initial_step: false,
278
+ configuration: { code: `return {y:x+1}` },
279
+ });
280
+ const trpack = await trigger_pack("mywf");
281
+ //expect(trpack.name ).toBe(true);
282
+ (0, globals_1.expect)(trpack.when_trigger).toBe("Never");
283
+ (0, globals_1.expect)(trpack.steps?.map((s) => s.name)).toContain("second_step");
284
+ });
285
+ // role packs
286
+ (0, globals_1.it)("creates roles pack", async () => {
287
+ const rpack = await role_pack("admin");
288
+ (0, globals_1.expect)(rpack.id === 1).toBe(true);
289
+ (0, globals_1.expect)(rpack.role).toBe("admin");
290
+ });
291
+ // tag packs
292
+ (0, globals_1.it)("creates tags pack", async () => {
293
+ const tpack = await tag_pack("tag1");
294
+ (0, globals_1.expect)(tpack).toEqual({
295
+ name: "tag1",
296
+ entries: [
297
+ { table_name: "books" },
298
+ { view_name: "authorlist" },
299
+ { view_name: "authorshow" },
300
+ { view_name: "authoredit" },
301
+ ],
302
+ });
303
+ await (0, globals_1.expect)((async () => await tag_pack("tag0"))()).rejects.toThrow();
304
+ });
305
+ // model packs
306
+ (0, globals_1.it)("creates model pack", async () => {
307
+ const mpack = await model_pack("regression_model", "books");
308
+ (0, globals_1.expect)(mpack).toEqual({
309
+ name: "regression_model",
310
+ table_name: "books",
311
+ modelpattern: "regression",
312
+ configuration: { numcluster: 2 },
313
+ });
314
+ await (0, globals_1.expect)((async () => await model_pack("invalid_model", "books"))()).rejects.toThrow();
315
+ await (0, globals_1.expect)((async () => await model_pack("regression_model", "invalid_table"))()).rejects.toThrow();
316
+ });
317
+ // model instance pack
318
+ (0, globals_1.it)("creates model instance pack", async () => {
319
+ const mipack = await model_instance_pack("regression_model_instance", "regression_model", "books");
320
+ (0, globals_1.expect)(mipack).toEqual({
321
+ name: "regression_model_instance",
322
+ table_name: "books",
323
+ state: {},
324
+ hyperparameters: { numcluster: 2 },
325
+ parameters: {},
326
+ metric_values: {},
327
+ trained_on: new Date("2019-11-11T10:34:00.000Z"),
328
+ fit_object: Buffer.from("foo"),
329
+ is_default: false,
330
+ report: "report",
331
+ model_name: "regression_model",
332
+ });
333
+ await (0, globals_1.expect)((async () => await model_instance_pack("invalid_model_instance", "regression_model", "books"))()).rejects.toThrow();
334
+ await (0, globals_1.expect)((async () => await model_instance_pack("regression_model_instance", "invalid_model", "books"))()).rejects.toThrow();
335
+ await (0, globals_1.expect)((async () => await model_instance_pack("regression_model_instance", "regression_model", "invalid_table"))()).rejects.toThrow();
336
+ });
337
+ (0, globals_1.it)("creates pack from tag", async () => {
338
+ const tag = await tag_1.default.findOne({ name: "tag1" });
339
+ const pack = await create_pack_from_tag(tag);
340
+ (0, globals_1.expect)(pack.tables.length).toBe(1);
341
+ (0, globals_1.expect)(pack.tags.length).toBe(1);
342
+ (0, globals_1.expect)(pack.tags[0].name).toBe("tag1");
343
+ });
344
+ });
345
+ // pack store
346
+ (0, globals_1.describe)("pack store", () => {
347
+ let packs = new Array();
348
+ (0, globals_1.it)("reset the pack store cache", async () => {
349
+ await getState().deleteConfig("available_packs");
350
+ await getState().deleteConfig("available_packs_fetched_at");
351
+ });
352
+ (0, globals_1.it)("fetches the pack store", async () => {
353
+ packs = await fetch_available_packs();
354
+ (0, globals_1.expect)(packs.length > 0).toBe(true);
355
+ const cache = getState().getConfig("available_packs", false);
356
+ (0, globals_1.expect)(packs).toStrictEqual(cache);
357
+ });
358
+ (0, globals_1.it)("fetches packs from the pack store", async () => {
359
+ const pack = await fetch_pack_by_name(packs[0].name);
360
+ // todo expect
361
+ // todo more cases
362
+ });
363
+ (0, globals_1.it)("tries to fetch dummy pack from the pack store", async () => {
364
+ const nopack = await fetch_pack_by_name("nosuchpack");
365
+ (0, globals_1.expect)(nopack).toBe(null);
366
+ });
367
+ (0, globals_1.it)("caches the pack store", async () => {
368
+ const stored_at = getState().getConfig("available_packs_fetched_at", false);
369
+ (0, globals_1.expect)(isStale(stored_at)).toBe(false);
370
+ await getState().setConfig("available_packs", []);
371
+ const packs1 = await fetch_available_packs();
372
+ (0, globals_1.expect)(packs1).toEqual([]);
373
+ });
374
+ (0, globals_1.it)("reset the pack store cache", async () => {
375
+ await getState().deleteConfig("available_packs");
376
+ await getState().deleteConfig("available_packs_fetched_at");
377
+ });
378
+ });
379
+ const todoPack = {
380
+ views: [
381
+ {
382
+ name: "EditTodo",
383
+ table: "TodoItems",
384
+ on_menu: false,
385
+ min_role: 100,
386
+ viewtemplate: "Edit",
387
+ configuration: {
388
+ fixed: { done: false },
389
+ layout: {
390
+ above: [
391
+ {
392
+ aligns: ["left", "left"],
393
+ widths: [2, 10],
394
+ besides: [
395
+ {
396
+ above: [
397
+ null,
398
+ {
399
+ type: "blank",
400
+ block: false,
401
+ contents: "Description",
402
+ textStyle: "",
403
+ },
404
+ ],
405
+ },
406
+ {
407
+ above: [
408
+ null,
409
+ {
410
+ type: "field",
411
+ block: false,
412
+ fieldview: "edit",
413
+ textStyle: "",
414
+ field_name: "description",
415
+ },
416
+ ],
417
+ },
418
+ ],
419
+ },
420
+ { type: "line_break" },
421
+ { type: "action", block: false, minRole: 100, action_name: "Save" },
422
+ ],
423
+ },
424
+ columns: [
425
+ { type: "Field", fieldview: "edit", field_name: "description" },
426
+ { type: "Action", minRole: 100, action_name: "Save" },
427
+ ],
428
+ viewname: "EditTodo",
429
+ view_when_done: "List Todos",
430
+ },
431
+ },
432
+ {
433
+ name: "List Todos",
434
+ table: "TodoItems",
435
+ min_role: 100,
436
+ menu_label: "List",
437
+ viewtemplate: "List",
438
+ configuration: {
439
+ columns: [
440
+ {
441
+ stat: "Count",
442
+ type: "Field",
443
+ view: "Own:EditTodo",
444
+ fieldview: "as_text",
445
+ field_name: "description",
446
+ join_field: "",
447
+ action_name: "Delete",
448
+ state_field: "on",
449
+ agg_relation: "",
450
+ },
451
+ {
452
+ stat: "Count",
453
+ type: "Field",
454
+ view: "Own:EditTodo",
455
+ fieldview: "show",
456
+ field_name: "done",
457
+ join_field: "",
458
+ action_name: "Delete",
459
+ state_field: "on",
460
+ agg_relation: "",
461
+ },
462
+ {
463
+ stat: "Count",
464
+ type: "Action",
465
+ view: "Own:EditTodo",
466
+ fieldview: "as_text",
467
+ field_name: "description",
468
+ join_field: "",
469
+ action_name: "Toggle done",
470
+ state_field: "on",
471
+ agg_relation: "",
472
+ },
473
+ ],
474
+ viewname: "List Todos",
475
+ default_state: { done: false, description: "" },
476
+ view_to_create: "EditTodo",
477
+ },
478
+ },
479
+ ],
480
+ tables: [
481
+ {
482
+ name: "TodoItems",
483
+ fields: [
484
+ {
485
+ name: "description",
486
+ type: "String",
487
+ label: "Description",
488
+ required: true,
489
+ is_unique: false,
490
+ attributes: { options: "" },
491
+ },
492
+ {
493
+ name: "done",
494
+ type: "Bool",
495
+ label: "Done",
496
+ required: true,
497
+ is_unique: false,
498
+ attributes: {},
499
+ },
500
+ ],
501
+ min_role_read: 1,
502
+ min_role_write: 1,
503
+ },
504
+ ],
505
+ pages: [
506
+ {
507
+ name: "FooPage",
508
+ menu_label: "FooPage",
509
+ title: "Foo",
510
+ description: "Foo",
511
+ layout: {},
512
+ min_role: 100,
513
+ root_page_for_roles: ["public"],
514
+ },
515
+ ],
516
+ page_groups: [
517
+ {
518
+ name: "FooPageGroup",
519
+ description: "Foo",
520
+ min_role: 100,
521
+ random_allocation: false,
522
+ members: [
523
+ {
524
+ page_name: "FooPage",
525
+ description: "Foo",
526
+ eligible_formula: "width < 380 && height < 670 && user.id === 1",
527
+ },
528
+ ],
529
+ },
530
+ ],
531
+ plugins: [],
532
+ roles: [],
533
+ library: [],
534
+ triggers: [],
535
+ tags: [],
536
+ models: [],
537
+ model_instances: [],
538
+ };
539
+ (0, globals_1.describe)("pack install", () => {
540
+ (0, globals_1.it)("installs pack", async () => {
541
+ const can = await can_install_pack(todoPack);
542
+ (0, globals_1.expect)(can).toBe(true);
543
+ await install_pack(todoPack, "Todo list", () => { });
544
+ const tbl = table_1.default.findOne({ name: "TodoItems" });
545
+ (0, globals_1.expect)(!!tbl).toBe(true);
546
+ const menu = getState().getConfig("menu_items", []);
547
+ (0, globals_1.expect)(menu).toContainEqual({
548
+ label: "List",
549
+ type: "View",
550
+ viewname: "List Todos",
551
+ min_role: 100,
552
+ });
553
+ (0, globals_1.expect)(menu).toContainEqual({
554
+ label: "FooPage",
555
+ pagename: "FooPage",
556
+ type: "Page",
557
+ min_role: 100,
558
+ });
559
+ const pubhome = getState().getConfig("public_home", []);
560
+ (0, globals_1.expect)(pubhome).toBe("FooPage");
561
+ const group = page_group_1.default.findOne({ name: "FooPageGroup" });
562
+ (0, assertions_1.assertIsSet)(group);
563
+ (0, globals_1.expect)(group.members.length).toBe(1);
564
+ (0, globals_1.expect)(group.members[0]).toEqual({
565
+ id: 5,
566
+ page_group_id: 2,
567
+ page_id: 8,
568
+ sequence: 1,
569
+ eligible_formula: "width < 380 && height < 670 && user.id === 1",
570
+ description: "Foo",
571
+ });
572
+ });
573
+ (0, globals_1.it)("installs pack again", async () => {
574
+ await install_pack(todoPack, "Todo list", () => { });
575
+ });
576
+ (0, globals_1.it)("uninstalls pack", async () => {
577
+ // todo make pack with trigger to cover all logic!
578
+ await uninstall_pack(todoPack, "Todo list");
579
+ const tbl = table_1.default.findOne({ name: "TodoItems" });
580
+ (0, globals_1.expect)(!!tbl).toBe(false);
581
+ });
582
+ (0, globals_1.it)("installs pack updates view", async () => {
583
+ const newpack = JSON.parse(JSON.stringify(todoPack));
584
+ newpack.views[0].configuration.fixed.done = true;
585
+ const can = await can_install_pack(newpack);
586
+ (0, globals_1.expect)(can).toBe(true);
587
+ await install_pack(newpack, "Todo list", () => { });
588
+ const view = view_1.default.findOne({ name: "EditTodo" });
589
+ (0, globals_1.expect)(view?.configuration.fixed.done).toBe(true);
590
+ });
591
+ (0, globals_1.it)("installs pack adds table field", async () => {
592
+ const newpack = JSON.parse(JSON.stringify(todoPack));
593
+ newpack.tables[0].fields.push({
594
+ name: "important",
595
+ label: "Important",
596
+ type: "Bool",
597
+ });
598
+ const can = await can_install_pack(newpack);
599
+ (0, globals_1.expect)(can).toBe(true);
600
+ await install_pack(newpack, "Todo list", () => { });
601
+ const table = table_1.default.findOne({ name: "TodoItems" });
602
+ (0, assertions_1.assertIsSet)(table);
603
+ const fimp = table.getField("important");
604
+ (0, globals_1.expect)((0, common_types_1.instanceOfType)(fimp?.type) && fimp?.type?.name).toBe("Bool");
605
+ });
606
+ (0, globals_1.it)("warns on clashing types", async () => {
607
+ const newpack = JSON.parse(JSON.stringify(todoPack));
608
+ newpack.tables[0].fields.push({
609
+ name: "important",
610
+ label: "Important",
611
+ type: "String",
612
+ });
613
+ const can = await can_install_pack(newpack);
614
+ (0, globals_1.expect)(can).toStrictEqual({
615
+ warning: "Clashing field types for important on table TodoItems",
616
+ });
617
+ await install_pack(newpack, "Todo list", () => { });
618
+ const table = table_1.default.findOne({ name: "TodoItems" });
619
+ (0, assertions_1.assertIsSet)(table);
620
+ const fimp = table.getField("important");
621
+ (0, globals_1.expect)((0, common_types_1.instanceOfType)(fimp?.type) && fimp?.type?.name).toBe("String");
622
+ });
623
+ });
624
+ //# sourceMappingURL=pack.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.test.js","sourceRoot":"","sources":["../../tests/pack.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=random.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../../tests/random.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
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 { random_table, fill_table_row, all_views, } = require("@saltcorn/data/models/random");
7
+ const index_1 = __importDefault(require("@saltcorn/data/db/index"));
8
+ const { getState } = require("@saltcorn/data/db/state");
9
+ getState().registerPlugin("base", require("@saltcorn/data/base-plugin"));
10
+ const { set_seed } = require("chaos-guinea-pig");
11
+ const generators_1 = __importDefault(require("@saltcorn/types/generators"));
12
+ const { oneOf, generateBool } = generators_1.default;
13
+ const form_1 = __importDefault(require("@saltcorn/data/models/form"));
14
+ const user_1 = __importDefault(require("@saltcorn/data/models/user"));
15
+ const index_2 = __importDefault(require("@saltcorn/markup/index"));
16
+ const { renderForm } = index_2.default;
17
+ const promises_1 = require("fs/promises");
18
+ const backup_1 = __importDefault(require("../models/backup"));
19
+ const { create_backup, restore, create_csv_from_rows } = backup_1.default;
20
+ const reset = require("@saltcorn/data/db/reset_schema");
21
+ const mocks_1 = __importDefault(require("@saltcorn/data/tests/mocks"));
22
+ const { mockReqRes, plugin_with_routes } = mocks_1.default;
23
+ const table_1 = __importDefault(require("@saltcorn/data/models/table"));
24
+ const tmp_promise_1 = require("tmp-promise");
25
+ const path_1 = require("path");
26
+ const assertions_1 = require("@saltcorn/data/tests/assertions");
27
+ const globals_1 = require("@jest/globals");
28
+ jest.setTimeout(80000);
29
+ (0, globals_1.afterAll)(index_1.default.close);
30
+ (0, globals_1.beforeAll)(async () => {
31
+ await require("@saltcorn/data/db/reset_schema")();
32
+ await require("@saltcorn/data/db/fixtures")();
33
+ getState().registerPlugin("mock_plugin", plugin_with_routes());
34
+ });
35
+ const seed = set_seed();
36
+ (0, globals_1.describe)("Random tables", () => {
37
+ let fnm;
38
+ let tableCounts = new Array();
39
+ (0, globals_1.it)("can create with seed " + seed, async () => {
40
+ if (!index_1.default.isSQLite)
41
+ await index_1.default.query('create extension if not exists "uuid-ossp";');
42
+ let has_rows = false;
43
+ for (let index = 0; index < 20; index++) {
44
+ //db.set_sql_logging(true);
45
+ const table = await random_table();
46
+ const rows = await table.getJoinedRows({});
47
+ const fields = table.getFields();
48
+ const nonFkey = fields.filter((f) => !f.is_fkey && !f.primary_key);
49
+ (0, globals_1.expect)(rows.length > -1).toBe(true);
50
+ //enable versioning
51
+ if (generateBool())
52
+ await table.update({ versioned: true });
53
+ //update a row
54
+ let id;
55
+ if (rows.length > 0) {
56
+ has_rows = true;
57
+ id = oneOf(rows.map((r) => r.id));
58
+ const row = await table.getRow({ id });
59
+ if (nonFkey.length > 0) {
60
+ const f = oneOf(nonFkey);
61
+ row[f.name] = await f.generate();
62
+ await table.tryUpdateRow(row, row.id);
63
+ }
64
+ }
65
+ //insert
66
+ await fill_table_row(table);
67
+ //toggle bool
68
+ const prels = await table.get_parent_relations();
69
+ const crels = await table.get_child_relations();
70
+ // add non-required field
71
+ const form = new form_1.default({ action: "/", fields });
72
+ await form.fill_fkey_options();
73
+ const rendered = renderForm(form, "123");
74
+ (0, globals_1.expect)(rendered).toContain("<form");
75
+ const { list, show, edit } = await all_views(table, "List");
76
+ const listres = await list.run({}, mockReqRes);
77
+ (0, globals_1.expect)(listres).toContain("<table");
78
+ const editres = await edit.run({}, mockReqRes);
79
+ (0, globals_1.expect)(editres).toContain("<form");
80
+ if (id) {
81
+ const showres = await show.run({ id }, mockReqRes);
82
+ if (fields.length > 1 && showres !== "<br /><br />")
83
+ (0, globals_1.expect)(showres).toContain("<div");
84
+ const editres1 = await edit.run({ id }, mockReqRes);
85
+ (0, globals_1.expect)(editres1).toContain("<form");
86
+ }
87
+ }
88
+ (0, globals_1.expect)(has_rows).toBe(true);
89
+ });
90
+ (0, globals_1.it)("can backup random tables with seed " + seed, async () => {
91
+ const tables = await table_1.default.find({});
92
+ for (const table of tables) {
93
+ const count = await table.countRows();
94
+ table.getFields();
95
+ tableCounts.push([table, count]);
96
+ }
97
+ fnm = await create_backup();
98
+ });
99
+ (0, globals_1.it)("can restore random tables with seed " + seed, async () => {
100
+ await reset();
101
+ if (!index_1.default.isSQLite)
102
+ await index_1.default.query('create extension if not exists "uuid-ossp";');
103
+ await user_1.default.create({
104
+ email: "admin@foo.com",
105
+ password: "AhGGr6rhu45",
106
+ role_id: 1,
107
+ });
108
+ const restoreres = await restore(fnm, (p) => { });
109
+ for (const [oldtable, n] of tableCounts) {
110
+ const table = table_1.default.findOne({ name: oldtable.name });
111
+ (0, assertions_1.assertIsSet)(table);
112
+ (0, globals_1.expect)(!!table).toBe(true);
113
+ const count = await table.countRows();
114
+ if (count !== n) {
115
+ console.log(restoreres);
116
+ console.log(JSON.stringify(table, null, 2));
117
+ }
118
+ (0, globals_1.expect)([table.name, count]).toEqual([oldtable.name, n]);
119
+ (0, globals_1.expect)(await table.owner_fieldname()).toEqual(await oldtable.owner_fieldname());
120
+ }
121
+ (0, globals_1.expect)(restoreres).toBe(undefined);
122
+ await (0, promises_1.unlink)(fnm);
123
+ });
124
+ });
125
+ (0, globals_1.describe)("Random table CSV io", () => {
126
+ (0, globals_1.it)("can create with seed " + seed, async () => {
127
+ for (let index = 0; index < 20; index++) {
128
+ const newDir = await (0, tmp_promise_1.dir)({ unsafeCleanup: false });
129
+ await reset();
130
+ if (!index_1.default.isSQLite)
131
+ await index_1.default.query('create extension if not exists "uuid-ossp";');
132
+ await user_1.default.create({
133
+ email: "admin@foo.com",
134
+ password: "AhGGr6rhu45",
135
+ role_id: 1,
136
+ });
137
+ await random_table();
138
+ const table = await random_table({ force_int_pk: true });
139
+ const rows1 = await table.getRows({}, { orderBy: "id" });
140
+ if (rows1.length > 0) {
141
+ const fnm = (0, path_1.join)(newDir.path, table.name + ".csv");
142
+ await create_csv_from_rows(rows1, fnm);
143
+ const crres = await table_1.default.create_from_csv("replica", fnm);
144
+ (0, assertions_1.assertsIsSuccessMessage)(crres);
145
+ const rows2 = await crres.table.getRows({}, { orderBy: "id" });
146
+ (0, globals_1.expect)(rows2.length).toBe(rows1.length);
147
+ //expect(rows2).toEqual(rows1);
148
+ }
149
+ }
150
+ });
151
+ });
152
+ //# sourceMappingURL=random.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.test.js","sourceRoot":"","sources":["../../tests/random.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tenant.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.test.d.ts","sourceRoot":"","sources":["../../tests/tenant.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
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 index_1 = __importDefault(require("@saltcorn/data/db/index"));
7
+ const { getState, add_tenant, init_multi_tenant, restart_tenant, } = require("@saltcorn/data/db/state");
8
+ getState().registerPlugin("base", require("@saltcorn/data/base-plugin"));
9
+ const tenant_1 = __importDefault(require("../models/tenant"));
10
+ const { create_tenant, deleteTenant, getAllTenants, switchToTenant, insertTenant, Tenant, getAllTenantRows, eachTenant, } = tenant_1.default;
11
+ const config_1 = __importDefault(require("@saltcorn/data/models/config"));
12
+ const { getConfig } = config_1.default;
13
+ const globals_1 = require("@jest/globals");
14
+ (0, globals_1.afterAll)(index_1.default.close);
15
+ (0, globals_1.beforeAll)(async () => {
16
+ if (!index_1.default.isSQLite)
17
+ await index_1.default.query(`drop schema if exists test10 CASCADE `);
18
+ if (!index_1.default.isSQLite)
19
+ await index_1.default.query(`drop schema if exists test11 CASCADE `);
20
+ });
21
+ (0, globals_1.describe)("Tenant", () => {
22
+ if (!index_1.default.isSQLite) {
23
+ (0, globals_1.it)("can create a new tenant", async () => {
24
+ index_1.default.enable_multi_tenant();
25
+ await getState().setConfig("base_url", "http://example.com/");
26
+ await index_1.default.query(`drop schema if exists test10 CASCADE `);
27
+ add_tenant("test10");
28
+ await switchToTenant(await insertTenant("test10", "foo@foo.com", "tenant test10 will be template for test11"), "http://test10.example.com/");
29
+ await create_tenant({
30
+ t: "test10",
31
+ loadAndSaveNewPlugin(plugin) { },
32
+ plugin_loader() { },
33
+ });
34
+ index_1.default.runWithTenant("test10", async () => {
35
+ const ten = index_1.default.getTenantSchema();
36
+ (0, globals_1.expect)(ten).toBe("test10");
37
+ // test base url
38
+ const base = await getConfig("base_url");
39
+ (0, globals_1.expect)(base).toBe("http://test10.example.com/");
40
+ const state = getState();
41
+ (0, globals_1.expect)(!!state).toBe(true);
42
+ const tables = state.tables;
43
+ (0, globals_1.expect)(tables.length).toBe(1);
44
+ (0, globals_1.expect)(tables[0].name).toBe("users");
45
+ });
46
+ });
47
+ (0, globals_1.it)("check tenant list", async () => {
48
+ const tens = await getAllTenants();
49
+ (0, globals_1.expect)(tens).toContain("test10");
50
+ (0, globals_1.expect)(tens).not.toContain("public");
51
+ await init_multi_tenant(() => { }, undefined, tens);
52
+ });
53
+ (0, globals_1.it)("can update template", async () => {
54
+ await Tenant.update("test10", { description: "new description 123" });
55
+ const t = await Tenant.findOne({ subdomain: "test10" });
56
+ (0, globals_1.expect)(t?.description).toBe("new description 123");
57
+ });
58
+ (0, globals_1.it)("can create a new tenant with template without description", async () => {
59
+ await getState().setConfig("tenant_template", "test10");
60
+ const tenant_template = getState().getConfig("tenant_template");
61
+ await index_1.default.query(`drop schema if exists test11 CASCADE `);
62
+ add_tenant("test11");
63
+ await switchToTenant(await insertTenant("test11", undefined, undefined, tenant_template), "http://test11.example.com/");
64
+ await create_tenant({
65
+ t: "test11",
66
+ loadAndSaveNewPlugin(plugin) { },
67
+ plugin_loader() { },
68
+ tenant_template,
69
+ });
70
+ // check template
71
+ const t = await Tenant.findOne({ subdomain: "test11" });
72
+ (0, globals_1.expect)(t?.template).toBe(tenant_template);
73
+ });
74
+ (0, globals_1.it)("can find tenant", async () => {
75
+ const ten = await Tenant.find({ subdomain: "test11" });
76
+ (0, globals_1.expect)(ten[0]?.subdomain).toContain("test11");
77
+ });
78
+ (0, globals_1.it)("can get all tenant rows", async () => {
79
+ const tens = await getAllTenantRows();
80
+ (0, globals_1.expect)(tens[0]?.subdomain).toContain("test10");
81
+ });
82
+ (0, globals_1.it)("can run function for each tenant", async () => {
83
+ await eachTenant(async () => {
84
+ const domain = index_1.default.getTenantSchema();
85
+ (0, globals_1.expect)(domain).toBeDefined();
86
+ });
87
+ });
88
+ (0, globals_1.it)("can restart a tenant", async () => {
89
+ await index_1.default.runWithTenant("test10", async () => {
90
+ await restart_tenant(() => { });
91
+ });
92
+ });
93
+ (0, globals_1.it)("can delete a tenant", async () => {
94
+ index_1.default.enable_multi_tenant();
95
+ await deleteTenant("test10");
96
+ });
97
+ }
98
+ else {
99
+ (0, globals_1.it)("does not support tenants on SQLite", async () => {
100
+ (0, globals_1.expect)(index_1.default.isSQLite).toBe(true);
101
+ });
102
+ }
103
+ });
104
+ //# sourceMappingURL=tenant.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.test.js","sourceRoot":"","sources":["../../tests/tenant.test.ts"],"names":[],"mappings":";;;;;AAAA,oEAAyC;AAEzC,MAAM,EACJ,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,cAAc,GACf,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACzE,8DAAsC;AACtC,MAAM,EACJ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,UAAU,GACX,GAAG,gBAAM,CAAC;AACX,0EAAkD;AAClD,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAM,CAAC;AAC7B,2CAA0E;AAE1E,IAAA,kBAAQ,EAAC,eAAE,CAAC,KAAK,CAAC,CAAC;AAEnB,IAAA,mBAAS,EAAC,KAAK,IAAI,EAAE;IACnB,IAAI,CAAC,eAAE,CAAC,QAAQ;QAAE,MAAM,eAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC1E,IAAI,CAAC,eAAE,CAAC,QAAQ;QAAE,MAAM,eAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC;AAEH,IAAA,kBAAQ,EAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,eAAE,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAA,YAAE,EAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,eAAE,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,QAAQ,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YAC9D,MAAM,eAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAExD,UAAU,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,cAAc,CAClB,MAAM,YAAY,CAChB,QAAQ,EACR,aAAa,EACb,2CAA2C,CAC5C,EACD,4BAA4B,CAC7B,CAAC;YAEF,MAAM,aAAa,CAAC;gBAClB,CAAC,EAAE,QAAQ;gBACX,oBAAoB,CAAC,MAAc,IAAS,CAAC;gBAC7C,aAAa,KAAI,CAAC;aACnB,CAAC,CAAC;YACH,eAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACpC,MAAM,GAAG,GAAG,eAAE,CAAC,eAAe,EAAE,CAAC;gBAEjC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,gBAAgB;gBAChB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACzB,IAAA,gBAAM,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC5B,IAAA,gBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;YACnC,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,IAAA,gBAAM,EAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,QAAQ,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YAExD,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAChE,MAAM,eAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACxD,UAAU,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,cAAc,CAClB,MAAM,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,EACnE,4BAA4B,CAC7B,CAAC;YAEF,MAAM,aAAa,CAAC;gBAClB,CAAC,EAAE,QAAQ;gBACX,oBAAoB,CAAC,MAAc,IAAS,CAAC;gBAC7C,aAAa,KAAI,CAAC;gBAClB,eAAe;aAChB,CAAC,CAAC;YACH,iBAAiB;YACjB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,IAAA,gBAAM,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;YACtC,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,MAAM,GAAG,eAAE,CAAC,eAAe,EAAE,CAAC;gBACpC,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,eAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC1C,MAAM,cAAc,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,YAAE,EAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,eAAE,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAA,YAAE,EAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,IAAA,gBAAM,EAAC,eAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saltcorn/admin-models",
3
- "version": "1.6.0-alpha.7",
3
+ "version": "1.6.0-alpha.8",
4
4
  "description": "models only required by the admin interface for Saltcorn, open-source no-code platform",
5
5
  "homepage": "https://saltcorn.com",
6
6
  "scripts": {
@@ -27,10 +27,10 @@
27
27
  "!dist/tsconfig.ref.tsbuildinfo"
28
28
  ],
29
29
  "dependencies": {
30
- "@saltcorn/types": "1.6.0-alpha.7",
31
- "@saltcorn/markup": "1.6.0-alpha.7",
32
- "@saltcorn/db-common": "1.6.0-alpha.7",
33
- "@saltcorn/data": "1.6.0-alpha.7",
30
+ "@saltcorn/types": "1.6.0-alpha.8",
31
+ "@saltcorn/markup": "1.6.0-alpha.8",
32
+ "@saltcorn/db-common": "1.6.0-alpha.8",
33
+ "@saltcorn/data": "1.6.0-alpha.8",
34
34
  "adm-zip": "0.5.16",
35
35
  "aws-sdk": "^2.1692.0",
36
36
  "chaos-guinea-pig": "0.2.1",
@@ -47,7 +47,7 @@
47
47
  "access": "public"
48
48
  },
49
49
  "devDependencies": {
50
- "@saltcorn/sbadmin2": "1.6.0-alpha.7",
50
+ "@saltcorn/sbadmin2": "1.6.0-alpha.8",
51
51
  "@types/adm-zip": "0.5.7",
52
52
  "@types/dateformat": "5.0.0",
53
53
  "@types/jest": "29.5.14",