@antelopejs/interface-data-api 0.0.2

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 (42) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +45 -0
  3. package/dist/antelope.test.d.ts +2 -0
  4. package/dist/antelope.test.js +59 -0
  5. package/dist/antelope.test.js.map +1 -0
  6. package/dist/components.d.ts +72 -0
  7. package/dist/components.js +344 -0
  8. package/dist/components.js.map +1 -0
  9. package/dist/index.d.ts +93 -0
  10. package/dist/index.js +217 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/metadata.d.ts +290 -0
  13. package/dist/metadata.js +444 -0
  14. package/dist/metadata.js.map +1 -0
  15. package/dist/tests/components/access_control.test.d.ts +1 -0
  16. package/dist/tests/components/access_control.test.js +138 -0
  17. package/dist/tests/components/access_control.test.js.map +1 -0
  18. package/dist/tests/components/listable.test.d.ts +1 -0
  19. package/dist/tests/components/listable.test.js +361 -0
  20. package/dist/tests/components/listable.test.js.map +1 -0
  21. package/dist/tests/components/mandatory.test.d.ts +1 -0
  22. package/dist/tests/components/mandatory.test.js +193 -0
  23. package/dist/tests/components/mandatory.test.js.map +1 -0
  24. package/dist/tests/components/per_action_access.test.d.ts +1 -0
  25. package/dist/tests/components/per_action_access.test.js +115 -0
  26. package/dist/tests/components/per_action_access.test.js.map +1 -0
  27. package/dist/tests/components/validator.test.d.ts +1 -0
  28. package/dist/tests/components/validator.test.js +178 -0
  29. package/dist/tests/components/validator.test.js.map +1 -0
  30. package/dist/tests/constants.d.ts +3 -0
  31. package/dist/tests/constants.js +7 -0
  32. package/dist/tests/constants.js.map +1 -0
  33. package/dist/tests/index/routes.test.d.ts +1 -0
  34. package/dist/tests/index/routes.test.js +210 -0
  35. package/dist/tests/index/routes.test.js.map +1 -0
  36. package/dist/tests/integration.test.d.ts +1 -0
  37. package/dist/tests/integration.test.js +838 -0
  38. package/dist/tests/integration.test.js.map +1 -0
  39. package/dist/tests/utils.d.ts +12 -0
  40. package/dist/tests/utils.js +70 -0
  41. package/dist/tests/utils.js.map +1 -0
  42. package/package.json +78 -0
@@ -0,0 +1,444 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModifierKey = exports.ModelReference = exports.Filter = exports.Validator = exports.Foreign = exports.Sortable = exports.Optional = exports.Mandatory = exports.Listable = exports.Access = exports.DataAPIMeta = exports.AccessMode = void 0;
4
+ const interface_core_1 = require("@antelopejs/interface-core");
5
+ const decorators_1 = require("@antelopejs/interface-core/decorators");
6
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
7
+ /**
8
+ * Field access mode enum.
9
+ */
10
+ var AccessMode;
11
+ (function (AccessMode) {
12
+ AccessMode[AccessMode["ReadOnly"] = 1] = "ReadOnly";
13
+ AccessMode[AccessMode["WriteOnly"] = 2] = "WriteOnly";
14
+ AccessMode[AccessMode["ReadWrite"] = 3] = "ReadWrite";
15
+ })(AccessMode || (exports.AccessMode = AccessMode = {}));
16
+ /**
17
+ * Metadata Class containing the DataAPI information.
18
+ */
19
+ class DataAPIMeta {
20
+ target;
21
+ /**
22
+ * Key symbol.
23
+ */
24
+ static key = Symbol();
25
+ filters = {};
26
+ /**
27
+ * Fields information.
28
+ */
29
+ fields = {};
30
+ /**
31
+ * Fields to pluck in listing endpoints.
32
+ */
33
+ pluck = {};
34
+ /**
35
+ * Key of the DataAPI class containing a database table instance.
36
+ */
37
+ modelKey;
38
+ /**
39
+ * Keys of the DataAPI class containing database modifier keys.
40
+ */
41
+ modifierKeys = new Map();
42
+ /**
43
+ * Schema name where the table is registered.
44
+ */
45
+ schemaName;
46
+ /**
47
+ * Database Schema class.
48
+ */
49
+ tableClass;
50
+ /**
51
+ * Database Schema table name.
52
+ */
53
+ tableName;
54
+ /**
55
+ * Readable fields.
56
+ */
57
+ readable = {};
58
+ /**
59
+ * Writeable fields.
60
+ */
61
+ writable = {};
62
+ /**
63
+ * Registered DataAPI endpoints.
64
+ */
65
+ endpoints = {};
66
+ constructor(target) {
67
+ this.target = target;
68
+ }
69
+ inherit(parent) {
70
+ const merge = (src, dst) => {
71
+ for (const key in src) {
72
+ if (!(key in dst)) {
73
+ dst[key] = src[key];
74
+ }
75
+ else if (Array.isArray(dst[key])) {
76
+ dst[key].push(...src[key]);
77
+ }
78
+ }
79
+ };
80
+ merge(parent.filters, this.filters);
81
+ merge(parent.fields, this.fields);
82
+ for (const [key, list] of Object.entries(parent.pluck)) {
83
+ this.pluck[key] = new Set(list);
84
+ }
85
+ if (!("modelKey" in this)) {
86
+ this.modelKey = parent.modelKey;
87
+ }
88
+ for (const key of parent.modifierKeys.keys()) {
89
+ if (!this.modifierKeys.has(key)) {
90
+ const value = parent.modifierKeys.get(key);
91
+ if (value !== undefined)
92
+ this.modifierKeys.set(key, value);
93
+ }
94
+ }
95
+ this.recomputeAccess();
96
+ merge(parent.endpoints, this.endpoints);
97
+ this.tableClass = parent.tableClass;
98
+ this.tableName = parent.tableName;
99
+ this.schemaName = parent.schemaName;
100
+ }
101
+ field(name) {
102
+ if (!(name in this.fields)) {
103
+ this.fields[name] = {};
104
+ }
105
+ return this.fields[name];
106
+ }
107
+ recomputeListable() {
108
+ for (const set of Object.values(this.pluck)) {
109
+ set.clear();
110
+ }
111
+ for (const [_, field] of Object.entries(this.fields)) {
112
+ if (field.listable) {
113
+ for (const [mode, names] of Object.entries(field.listable)) {
114
+ if (!(mode in this.pluck)) {
115
+ this.pluck[mode] = new Set();
116
+ }
117
+ for (const name of names) {
118
+ this.pluck[mode].add(name);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ recomputeAccess() {
125
+ for (const key of Object.keys(this.readable)) {
126
+ delete this.readable[key];
127
+ }
128
+ for (const key of Object.keys(this.writable)) {
129
+ delete this.writable[key];
130
+ }
131
+ const actions = new Set(["_default"]);
132
+ for (const field of Object.values(this.fields)) {
133
+ if (field.modeOverrides) {
134
+ for (const action of Object.keys(field.modeOverrides)) {
135
+ actions.add(action);
136
+ }
137
+ }
138
+ }
139
+ for (const action of actions) {
140
+ this.readable[action] = { getters: [], props: [] };
141
+ this.writable[action] = { setters: [], props: [] };
142
+ }
143
+ for (const [key, field] of Object.entries(this.fields)) {
144
+ for (const action of actions) {
145
+ const effectiveMode = action === "_default"
146
+ ? field.mode
147
+ : (field.modeOverrides?.[action] ?? field.mode);
148
+ if (!effectiveMode) {
149
+ continue;
150
+ }
151
+ if (effectiveMode & AccessMode.ReadOnly) {
152
+ const target = field.desc?.get ? "getters" : "props";
153
+ this.readable[action][target].push([key, field]);
154
+ }
155
+ if (effectiveMode & AccessMode.WriteOnly) {
156
+ const target = field.desc?.set ? "setters" : "props";
157
+ this.writable[action][target].push([key, field]);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Sets the access mode of the given field.
164
+ *
165
+ * @param name Field name
166
+ * @param mode Access mode
167
+ */
168
+ setMode(name, mode, overrides) {
169
+ const field = this.field(name);
170
+ field.mode = mode;
171
+ field.modeOverrides = overrides;
172
+ this.recomputeAccess();
173
+ return this;
174
+ }
175
+ /**
176
+ * Sets whether a field should be included in list endpoints.
177
+ *
178
+ * @param name Field name
179
+ * @param requiredFields Boolean or table field list
180
+ * @param mode List mode (default: 'list')
181
+ */
182
+ setListable(name, requiredFields, mode = "list") {
183
+ const field = this.field(name);
184
+ const names = typeof requiredFields === "boolean"
185
+ ? requiredFields
186
+ ? [name]
187
+ : []
188
+ : requiredFields;
189
+ if (!field.listable) {
190
+ field.listable = {};
191
+ }
192
+ field.listable[mode] = names;
193
+ this.recomputeListable();
194
+ return this;
195
+ }
196
+ /**
197
+ * Sets whether or not this field must be present in requests for the given method.
198
+ *
199
+ * @param name Field name
200
+ * @param modes DataAPI methods
201
+ */
202
+ setMandatory(name, modes) {
203
+ this.field(name).mandatory = new Set(modes);
204
+ return this;
205
+ }
206
+ /**
207
+ * Sets whether or not this field can be used to sort in list endpoints.
208
+ *
209
+ * @param name Field name
210
+ * @param active Sortable
211
+ * @param noIndex Ignore database indexes
212
+ * @returns
213
+ */
214
+ setSortable(name, active, noIndex) {
215
+ this.field(name).sortable = active ? { indexed: !noIndex } : undefined;
216
+ return this;
217
+ }
218
+ /**
219
+ * Declares a field to be a foreign key.
220
+ *
221
+ * @param name Field name
222
+ * @param table Other table
223
+ * @param index Other table index
224
+ * @param multi Index is a multi index
225
+ */
226
+ setForeign(name, table, index, multi, pluck) {
227
+ const databaseSchema = (0, interface_database_decorators_1.getTablesForSchema)(this.schemaName);
228
+ if (!databaseSchema)
229
+ throw new Error(`Schema "${this.schemaName}" not found`);
230
+ if (typeof table === "string") {
231
+ this.field(name).foreign = [
232
+ table,
233
+ databaseSchema[table],
234
+ index,
235
+ multi || undefined,
236
+ pluck || undefined,
237
+ ];
238
+ }
239
+ else {
240
+ const tableName = Object.entries(databaseSchema).find(([, table_]) => table_ === table)?.[0];
241
+ if (!tableName) {
242
+ throw new Error(`Unable to infer foreign table name for field "${name}"`);
243
+ }
244
+ this.field(name).foreign = [
245
+ tableName,
246
+ table,
247
+ index,
248
+ multi || undefined,
249
+ pluck || undefined,
250
+ ];
251
+ }
252
+ return this;
253
+ }
254
+ /**
255
+ * Set the validation function of a field.
256
+ *
257
+ * @param name Field name
258
+ * @param validator Value validator callback
259
+ */
260
+ setValidator(name, validator) {
261
+ this.field(name).validator = validator;
262
+ return this;
263
+ }
264
+ /**
265
+ * Updates the known field descriptor of this field.
266
+ *
267
+ * @param name Field name
268
+ * @param desc Field descriptor
269
+ */
270
+ setDescriptor(name, desc) {
271
+ this.field(name).desc = desc;
272
+ return this;
273
+ }
274
+ /**
275
+ * Creates a filter.
276
+ *
277
+ * @param name Filter name
278
+ * @param func Filter callback
279
+ * @param index
280
+ */
281
+ setFilter(name, func, useIndex) {
282
+ this.filters[name] = func;
283
+ const field = this.field(name);
284
+ if (useIndex) {
285
+ const tableMeta = (0, interface_database_decorators_1.getMetadata)(this.tableClass, interface_database_decorators_1.DatumStaticMetadata);
286
+ const index = tableMeta.indexes[field.dbName ?? name];
287
+ if (index && index.length === 1) {
288
+ field.indexable = true;
289
+ }
290
+ }
291
+ else {
292
+ field.indexable = false;
293
+ }
294
+ return this;
295
+ }
296
+ /**
297
+ * Sets the key containing the database table instance.
298
+ *
299
+ * @param name Field name
300
+ */
301
+ setModelKey(name) {
302
+ this.modelKey = name;
303
+ return this;
304
+ }
305
+ /**
306
+ * Sets the key containing the key for the given database modifier.
307
+ *
308
+ * @param name Field name
309
+ * @param modifierClass Modifier
310
+ */
311
+ setModifierKey(name, modifierClass) {
312
+ this.modifierKeys.set(modifierClass, name);
313
+ return this;
314
+ }
315
+ /**
316
+ * Adds the given endpoint to the DataAPI
317
+ *
318
+ * @param key field name
319
+ * @param endpoint callback information
320
+ */
321
+ addEndpoint(key, endpoint) {
322
+ if (!endpoint) {
323
+ delete this.endpoints[key];
324
+ }
325
+ else {
326
+ this.endpoints[key] = endpoint;
327
+ }
328
+ }
329
+ }
330
+ exports.DataAPIMeta = DataAPIMeta;
331
+ /**
332
+ * Sets the access mode of a DataAPI field.
333
+ *
334
+ * @param mode Access mode
335
+ */
336
+ exports.Access = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, mode, overrides) => {
337
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
338
+ .setDescriptor(key, desc)
339
+ .setMode(key, mode, overrides);
340
+ });
341
+ /**
342
+ * Sets the listable state of a DataAPI field.
343
+ *
344
+ * Listable fields will be included in list method calls.
345
+ *
346
+ * Listable getters must specificy the list of in-database field names they use.
347
+ *
348
+ * @param requiredFields Boolean or table field list
349
+ */
350
+ exports.Listable = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, requiredFields, mode) => {
351
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
352
+ .setDescriptor(key, desc)
353
+ .setListable(key, typeof requiredFields !== "undefined" ? requiredFields : true, mode);
354
+ });
355
+ /**
356
+ * Declares a field to be mandatory in calls to the given methods.
357
+ *
358
+ * @param modes DataAPI methods (ex: `new`, `edit`)
359
+ */
360
+ exports.Mandatory = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, ...modes) => {
361
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
362
+ .setDescriptor(key, desc)
363
+ .setMandatory(key, modes);
364
+ });
365
+ /**
366
+ * Declares a field as being optional.
367
+ *
368
+ * This must be used on fields with no other decorators.
369
+ */
370
+ exports.Optional = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc) => {
371
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
372
+ .setDescriptor(key, desc)
373
+ .setMandatory(key, []);
374
+ });
375
+ /**
376
+ * Declares a field to be useable as the sorting key.
377
+ *
378
+ * @param options Options
379
+ */
380
+ exports.Sortable = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, options) => {
381
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
382
+ .setDescriptor(key, desc)
383
+ .setSortable(key, true, options?.noIndex ?? false);
384
+ });
385
+ /**
386
+ * Declares a field to be a foreign key.
387
+ *
388
+ * @param table Other table
389
+ * @param index Other table index
390
+ * @param multi Index is a multi index
391
+ */
392
+ exports.Foreign = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, table, index, multi, pluck) => {
393
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
394
+ .setDescriptor(key, desc)
395
+ .setForeign(key, table, index, multi, pluck);
396
+ });
397
+ /**
398
+ * Set the validation function of a field.
399
+ *
400
+ * @param validator Value validator callback
401
+ */
402
+ exports.Validator = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, validator) => {
403
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
404
+ .setDescriptor(key, desc)
405
+ .setValidator(key, validator);
406
+ });
407
+ const DEFAULT_FILTER_OPERATORS = {
408
+ eq: (proxy, value) => proxy.eq(value),
409
+ ne: (proxy, value) => proxy.ne(value),
410
+ gt: (proxy, value) => proxy.gt(value),
411
+ ge: (proxy, value) => proxy.ge(value),
412
+ lt: (proxy, value) => proxy.lt(value),
413
+ le: (proxy, value) => proxy.le(value),
414
+ };
415
+ function applyDefaultFilterMode(proxy, value, mode) {
416
+ return DEFAULT_FILTER_OPERATORS[mode](proxy, value);
417
+ }
418
+ function createDefaultFilter() {
419
+ return (_context, proxy, _key, value, mode) => applyDefaultFilterMode(proxy, value, mode);
420
+ }
421
+ const FilterDecoratorFactory = (0, decorators_1.MakePropertyDecorator)((target, key, func, useIndex) => {
422
+ (0, interface_core_1.GetMetadata)(key ? target.constructor : target, DataAPIMeta).setFilter(key, func || createDefaultFilter(), useIndex === undefined ? !func : useIndex);
423
+ });
424
+ /**
425
+ * Creates a field filter.
426
+ *
427
+ * @param func Custom filter function
428
+ */
429
+ exports.Filter = FilterDecoratorFactory;
430
+ /**
431
+ * Sets which field will contain the reference to the database model instance.
432
+ */
433
+ exports.ModelReference = (0, decorators_1.MakePropertyDecorator)((target, key) => {
434
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta).setModelKey(key);
435
+ });
436
+ /**
437
+ * Sets which field will contain the key for the given database modifier.
438
+ *
439
+ * @param modifierClass Modifier
440
+ */
441
+ exports.ModifierKey = (0, decorators_1.MakePropertyDecorator)((target, key, modifierClass) => {
442
+ (0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta).setModifierKey(key, modifierClass);
443
+ });
444
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const interface_api_1 = require("@antelopejs/interface-api");
17
+ const interface_data_api_1 = require("@antelopejs/interface-data-api");
18
+ const metadata_1 = require("@antelopejs/interface-data-api/metadata");
19
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
20
+ const chai_1 = require("chai");
21
+ const utils_1 = require("../utils");
22
+ const currentTestName = node_path_1.default
23
+ .basename(__filename)
24
+ .replace(/\.test\.(ts|js)$/, "");
25
+ const userTableName = `users-${currentTestName}`;
26
+ const schemaName = "default";
27
+ let User = class User extends interface_database_decorators_1.Table {
28
+ };
29
+ __decorate([
30
+ (0, interface_database_decorators_1.Index)(),
31
+ __metadata("design:type", String)
32
+ ], User.prototype, "email", void 0);
33
+ User = __decorate([
34
+ (0, interface_database_decorators_1.RegisterTable)(userTableName, schemaName)
35
+ ], User);
36
+ class UserModel extends (0, interface_database_decorators_1.BasicDataModel)(User, userTableName) {
37
+ }
38
+ let database;
39
+ const defaultUserDataset = {
40
+ name: "Jean Test",
41
+ email: "jean.test@email.com",
42
+ age: 30,
43
+ password: "very-secure-qwerty123",
44
+ };
45
+ describe("Field Access Control", () => {
46
+ it("read in a read write field", async () => await readInReadWriteField());
47
+ it("write in a read write field", async () => await writeInReadWriteField());
48
+ it("read in a write only field", async () => await readInWriteOnlyField());
49
+ it("write in a read only field", async () => await writeInReadOnlyField());
50
+ it("read in a read only field", async () => await readInReadOnlyField());
51
+ it("write in a write only field", async () => await writeInWriteOnlyField());
52
+ after(async () => { });
53
+ });
54
+ async function _createDataController(testName, user) {
55
+ let _AccessTestAPI = class _AccessTestAPI extends (0, interface_data_api_1.DataController)(User, interface_data_api_1.DefaultRoutes.All, (0, interface_api_1.Controller)(`/${testName}`)) {
56
+ };
57
+ __decorate([
58
+ (0, metadata_1.ModelReference)(),
59
+ (0, interface_database_decorators_1.Model)(UserModel),
60
+ __metadata("design:type", UserModel)
61
+ ], _AccessTestAPI.prototype, "userModel", void 0);
62
+ __decorate([
63
+ (0, metadata_1.Access)(metadata_1.AccessMode.ReadOnly),
64
+ __metadata("design:type", String)
65
+ ], _AccessTestAPI.prototype, "_id", void 0);
66
+ __decorate([
67
+ (0, metadata_1.Access)(metadata_1.AccessMode.WriteOnly),
68
+ __metadata("design:type", String)
69
+ ], _AccessTestAPI.prototype, "password", void 0);
70
+ __decorate([
71
+ (0, metadata_1.Access)(metadata_1.AccessMode.ReadWrite),
72
+ __metadata("design:type", String)
73
+ ], _AccessTestAPI.prototype, "name", void 0);
74
+ __decorate([
75
+ (0, metadata_1.Access)(metadata_1.AccessMode.ReadOnly),
76
+ __metadata("design:type", Number)
77
+ ], _AccessTestAPI.prototype, "age", void 0);
78
+ __decorate([
79
+ (0, metadata_1.Access)(metadata_1.AccessMode.ReadWrite),
80
+ __metadata("design:type", String)
81
+ ], _AccessTestAPI.prototype, "email", void 0);
82
+ _AccessTestAPI = __decorate([
83
+ (0, interface_data_api_1.RegisterDataController)()
84
+ ], _AccessTestAPI);
85
+ await (0, interface_database_decorators_1.CreateDatabaseSchemaInstance)(schemaName);
86
+ database = (0, utils_1.getSchemaInstance)(schemaName);
87
+ const userModel = new UserModel(database);
88
+ const insertResult = await userModel.insert(user);
89
+ return { id: insertResult[0], userModel };
90
+ }
91
+ async function readInReadWriteField() {
92
+ const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
93
+ const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
94
+ (0, chai_1.expect)(response.status).to.equal(200);
95
+ const data = (await response.json());
96
+ (0, chai_1.expect)(data.name).to.equal(defaultUserDataset.name);
97
+ (0, chai_1.expect)(data.age).to.equal(defaultUserDataset.age);
98
+ (0, chai_1.expect)(data.email).to.equal(defaultUserDataset.email);
99
+ (0, chai_1.expect)(data.password).to.equal(undefined);
100
+ }
101
+ async function writeInReadWriteField() {
102
+ const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
103
+ const replacementEmail = "bob.test@email.com";
104
+ const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { email: replacementEmail }, { id });
105
+ (0, chai_1.expect)(response.status).to.equal(200);
106
+ const user = await userModel.get(id);
107
+ (0, chai_1.expect)(user?.email).to.equal(replacementEmail);
108
+ }
109
+ async function readInWriteOnlyField() {
110
+ const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
111
+ const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
112
+ (0, chai_1.expect)(response.status).to.equal(200);
113
+ const data = (await response.json());
114
+ (0, chai_1.expect)(data.password).to.equal(undefined);
115
+ }
116
+ async function writeInReadOnlyField() {
117
+ const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
118
+ const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { age: (defaultUserDataset.age ?? 0) + 5 }, { id });
119
+ (0, chai_1.expect)(response.status).to.equal(200);
120
+ const user = await userModel.get(id);
121
+ (0, chai_1.expect)(user?.age).to.equal(defaultUserDataset.age);
122
+ }
123
+ async function readInReadOnlyField() {
124
+ const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
125
+ const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
126
+ (0, chai_1.expect)(response.status).to.equal(200);
127
+ const data = (await response.json());
128
+ (0, chai_1.expect)(data.email).to.equal(defaultUserDataset.email);
129
+ }
130
+ async function writeInWriteOnlyField() {
131
+ const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
132
+ const replacementPassword = "new-password";
133
+ const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { password: replacementPassword }, { id });
134
+ (0, chai_1.expect)(response.status).to.equal(200);
135
+ const user = await userModel.get(id);
136
+ (0, chai_1.expect)(user?.password).to.equal(replacementPassword);
137
+ }
138
+ //# sourceMappingURL=access_control.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access_control.test.js","sourceRoot":"","sources":["../../../src/tests/components/access_control.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};