declastruct 1.2.0 → 1.3.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 (59) hide show
  1. package/dist/domain.objects/ContextDeclastruct.d.ts +1 -1
  2. package/dist/domain.objects/DeclastructChange.d.ts +1 -1
  3. package/dist/domain.objects/DeclastructChange.js.map +1 -1
  4. package/dist/domain.objects/DeclastructDao.d.ts +2 -2
  5. package/dist/domain.objects/DeclastructPlan.d.ts +2 -2
  6. package/dist/domain.objects/DeclastructProvider.d.ts +1 -1
  7. package/dist/domain.operations/apply/applyChanges.js +8 -3
  8. package/dist/domain.operations/apply/applyChanges.js.map +1 -1
  9. package/dist/domain.operations/plan/computeChange.js +2 -28
  10. package/dist/domain.operations/plan/computeChange.js.map +1 -1
  11. package/dist/domain.operations/plan/getDisplayableDiff.d.ts +10 -0
  12. package/dist/domain.operations/plan/getDisplayableDiff.js +40 -0
  13. package/dist/domain.operations/plan/getDisplayableDiff.js.map +1 -0
  14. package/dist/infra/asIsoTimestamp.d.ts +1 -1
  15. package/license.md +21 -0
  16. package/package.json +19 -9
  17. package/readme.md +52 -32
  18. package/dist/.test/assets/providers/demo.provider.d.ts +0 -32
  19. package/dist/.test/assets/providers/demo.provider.js +0 -101
  20. package/dist/.test/assets/providers/demo.provider.js.map +0 -1
  21. package/dist/contract/cli/apply.integration.test.d.ts +0 -1
  22. package/dist/contract/cli/apply.integration.test.js +0 -215
  23. package/dist/contract/cli/apply.integration.test.js.map +0 -1
  24. package/dist/contract/cli/plan.integration.test.d.ts +0 -1
  25. package/dist/contract/cli/plan.integration.test.js +0 -142
  26. package/dist/contract/cli/plan.integration.test.js.map +0 -1
  27. package/dist/domain.objects/ContextDeclastruct.test.d.ts +0 -1
  28. package/dist/domain.objects/ContextDeclastruct.test.js +0 -41
  29. package/dist/domain.objects/ContextDeclastruct.test.js.map +0 -1
  30. package/dist/domain.objects/DeclastructChange.test.d.ts +0 -1
  31. package/dist/domain.objects/DeclastructChange.test.js +0 -59
  32. package/dist/domain.objects/DeclastructChange.test.js.map +0 -1
  33. package/dist/domain.objects/DeclastructDao.test.d.ts +0 -1
  34. package/dist/domain.objects/DeclastructDao.test.js +0 -78
  35. package/dist/domain.objects/DeclastructDao.test.js.map +0 -1
  36. package/dist/domain.objects/DeclastructPlan.test.d.ts +0 -1
  37. package/dist/domain.objects/DeclastructPlan.test.js +0 -31
  38. package/dist/domain.objects/DeclastructPlan.test.js.map +0 -1
  39. package/dist/domain.objects/DeclastructProvider.test.d.ts +0 -1
  40. package/dist/domain.objects/DeclastructProvider.test.js +0 -80
  41. package/dist/domain.objects/DeclastructProvider.test.js.map +0 -1
  42. package/dist/domain.objects/IsoTimestamp.test.d.ts +0 -1
  43. package/dist/domain.objects/IsoTimestamp.test.js +0 -10
  44. package/dist/domain.objects/IsoTimestamp.test.js.map +0 -1
  45. package/dist/domain.operations/apply/applyChange.test.d.ts +0 -1
  46. package/dist/domain.operations/apply/applyChange.test.js +0 -241
  47. package/dist/domain.operations/apply/applyChange.test.js.map +0 -1
  48. package/dist/domain.operations/apply/applyChanges.integration.test.d.ts +0 -1
  49. package/dist/domain.operations/apply/applyChanges.integration.test.js +0 -291
  50. package/dist/domain.operations/apply/applyChanges.integration.test.js.map +0 -1
  51. package/dist/domain.operations/plan/computeChange.test.d.ts +0 -1
  52. package/dist/domain.operations/plan/computeChange.test.js +0 -153
  53. package/dist/domain.operations/plan/computeChange.test.js.map +0 -1
  54. package/dist/domain.operations/plan/getDaoByResource.test.d.ts +0 -1
  55. package/dist/domain.operations/plan/getDaoByResource.test.js +0 -101
  56. package/dist/domain.operations/plan/getDaoByResource.test.js.map +0 -1
  57. package/dist/domain.operations/plan/planChanges.integration.test.d.ts +0 -1
  58. package/dist/domain.operations/plan/planChanges.integration.test.js +0 -200
  59. package/dist/domain.operations/plan/planChanges.integration.test.js.map +0 -1
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const domain_objects_1 = require("domain-objects");
4
- describe('DeclastructDao', () => {
5
- class DemoResource extends domain_objects_1.DomainEntity {
6
- }
7
- DemoResource.unique = ['id'];
8
- it('should implement the interface structure', () => {
9
- // type verification
10
- const dao = {
11
- get: {
12
- byUnique: async () => null,
13
- byRef: async () => null,
14
- },
15
- set: {
16
- finsert: async (input) => input,
17
- },
18
- };
19
- expect(dao.get.byUnique).toBeDefined();
20
- expect(dao.get.byRef).toBeDefined();
21
- expect(dao.set.finsert).toBeDefined();
22
- });
23
- it('should support optional methods', () => {
24
- // type verification
25
- const dao = {
26
- get: {
27
- byUnique: async () => null,
28
- byPrimary: async () => null,
29
- byRef: async () => null,
30
- },
31
- set: {
32
- finsert: async (input) => input,
33
- upsert: async (input) => input,
34
- delete: async () => { },
35
- },
36
- };
37
- expect(dao.get.byPrimary).toBeDefined();
38
- expect(dao.set.upsert).toBeDefined();
39
- expect(dao.set.delete).toBeDefined();
40
- });
41
- describe('resource with optional primary key', () => {
42
- class DemoResourceWithOptionalPrimary extends domain_objects_1.DomainEntity {
43
- }
44
- DemoResourceWithOptionalPrimary.primary = ['uuid'];
45
- DemoResourceWithOptionalPrimary.unique = ['name'];
46
- it('RefByPrimary should require uuid (not optional)', () => {
47
- // type test: this should compile
48
- const ref = {
49
- uuid: 'test-uuid',
50
- };
51
- // verify ref has uuid
52
- expect(ref.uuid).toBe('test-uuid');
53
- // note: the following would fail type check (but we can't test that at runtime)
54
- // @ts-expect-error - uuid should be required, empty object should fail
55
- const badRef = {};
56
- expect(badRef).toBeDefined(); // suppress unused var warning
57
- });
58
- it('dao.get.byPrimary should accept RefByPrimary with required uuid', () => {
59
- // type verification: byPrimary input should have uuid as required (not optional)
60
- const dao = {
61
- get: {
62
- byUnique: async () => null,
63
- byPrimary: async (input) => {
64
- // input.uuid should be string (not string | undefined)
65
- // this assignment would fail if uuid were optional
66
- const uuid = input.uuid;
67
- expect(uuid).toBeDefined();
68
- return null;
69
- },
70
- byRef: async () => null,
71
- },
72
- set: { finsert: async (r) => r },
73
- };
74
- expect(dao.get.byPrimary).toBeDefined();
75
- });
76
- });
77
- });
78
- //# sourceMappingURL=DeclastructDao.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeclastructDao.test.js","sourceRoot":"","sources":["../../src/domain.objects/DeclastructDao.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const DeclastructPlan_1 = require("./DeclastructPlan");
4
- describe('DeclastructPlan', () => {
5
- it('should build a plan with all required properties', () => {
6
- const plan = new DeclastructPlan_1.DeclastructPlan({
7
- hash: 'abc123',
8
- createdAt: '2025-11-22T10:30:00.000Z',
9
- wish: { uri: '/path/to/wish.ts' },
10
- changes: [],
11
- });
12
- expect(plan.hash).toBe('abc123');
13
- expect(plan.createdAt).toBe('2025-11-22T10:30:00.000Z');
14
- expect(plan.wish.uri).toBe('/path/to/wish.ts');
15
- expect(plan.changes).toEqual([]);
16
- });
17
- it('should have unique key set to hash', () => {
18
- expect(DeclastructPlan_1.DeclastructPlan.unique).toEqual(['hash']);
19
- });
20
- it('should extend DomainEntity', () => {
21
- const plan = new DeclastructPlan_1.DeclastructPlan({
22
- hash: 'test-hash',
23
- createdAt: '2025-11-22T10:30:00.000Z',
24
- wish: { uri: '/test' },
25
- changes: [],
26
- });
27
- // domain entities should have constructor.name
28
- expect(plan.constructor.name).toBe('DeclastructPlan');
29
- });
30
- });
31
- //# sourceMappingURL=DeclastructPlan.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeclastructPlan.test.js","sourceRoot":"","sources":["../../src/domain.objects/DeclastructPlan.test.ts"],"names":[],"mappings":";;AAAA,uDAAoD;AAEpD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,IAAI,iCAAe,CAAC;YAC/B,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,0BAA0B;YACrC,IAAI,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;YACjC,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,iCAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,iCAAe,CAAC;YAC/B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,0BAA0B;YACrC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;YACtB,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const domain_objects_1 = require("domain-objects");
4
- const DeclastructProvider_1 = require("./DeclastructProvider");
5
- describe('DeclastructProvider', () => {
6
- it('should build a provider with all required properties', () => {
7
- const provider = new DeclastructProvider_1.DeclastructProvider({
8
- name: 'test-provider',
9
- daos: {},
10
- context: {},
11
- hooks: {
12
- beforeAll: async () => { },
13
- afterAll: async () => { },
14
- },
15
- });
16
- expect(provider.name).toBe('test-provider');
17
- expect(provider.daos).toEqual({});
18
- expect(provider.context).toEqual({});
19
- expect(provider.hooks.beforeAll).toBeDefined();
20
- expect(provider.hooks.afterAll).toBeDefined();
21
- });
22
- it('should work without explicit type arguments', () => {
23
- // type verification - default type parameters should work
24
- const provider = new DeclastructProvider_1.DeclastructProvider({
25
- name: 'default-provider',
26
- daos: {},
27
- context: {},
28
- hooks: {
29
- beforeAll: async () => { },
30
- afterAll: async () => { },
31
- },
32
- });
33
- expect(provider).toBeDefined();
34
- });
35
- describe('resource with optional primary key', () => {
36
- class DemoResourceWithOptionalPrimary extends domain_objects_1.DomainEntity {
37
- }
38
- DemoResourceWithOptionalPrimary.primary = ['uuid'];
39
- DemoResourceWithOptionalPrimary.unique = ['name'];
40
- it('should work with daos that have optional primary keys and byPrimary defined', () => {
41
- // define a dao for the resource with optional primary key
42
- const demoDao = {
43
- get: {
44
- byUnique: async () => null,
45
- byPrimary: async (input) => {
46
- // input.uuid should be string (not string | undefined)
47
- const uuid = input.uuid;
48
- expect(uuid).toBeDefined();
49
- return null;
50
- },
51
- byRef: async () => null,
52
- },
53
- set: {
54
- finsert: async (r) => r,
55
- },
56
- };
57
- // build provider with the dao
58
- const provider = new DeclastructProvider_1.DeclastructProvider({
59
- name: 'optional-primary-key-provider',
60
- daos: {
61
- DemoResourceWithOptionalPrimary: demoDao,
62
- },
63
- context: {},
64
- hooks: {
65
- beforeAll: async () => { },
66
- afterAll: async () => { },
67
- },
68
- });
69
- // verify provider structure
70
- expect(provider.name).toBe('optional-primary-key-provider');
71
- expect(provider.daos.DemoResourceWithOptionalPrimary).toBeDefined();
72
- // access dao to verify structure
73
- const dao = provider.daos.DemoResourceWithOptionalPrimary;
74
- expect(dao?.get.byPrimary).toBeDefined();
75
- expect(dao?.get.byUnique).toBeDefined();
76
- expect(dao?.set.finsert).toBeDefined();
77
- });
78
- });
79
- });
80
- //# sourceMappingURL=DeclastructProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeclastructProvider.test.js","sourceRoot":"","sources":["../../src/domain.objects/DeclastructProvider.test.ts"],"names":[],"mappings":";;AAAA,mDAA8C;AAG9C,+DAA4D;AAE5D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;YACvC,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QASlD,MAAM,+BACJ,SAAQ,6BAA6C;;QAGvC,uCAAO,GAAG,CAAC,MAAM,CAAU,CAAC;QAC5B,sCAAM,GAAG,CAAC,MAAM,CAAU,CAAC;QAG3C,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;YACrF,0DAA0D;YAC1D,MAAM,OAAO,GAIT;gBACF,GAAG,EAAE;oBACH,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;oBAC1B,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBACzB,uDAAuD;wBACvD,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC;wBAChC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;wBAC3B,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;iBACxB;gBACD,GAAG,EAAE;oBACH,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAQ;iBAC/B;aACF,CAAC;YAEF,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,IAAI,yCAAmB,CAAC;gBACvC,IAAI,EAAE,+BAA+B;gBACrC,IAAI,EAAE;oBACJ,+BAA+B,EAAE,OAAO;iBACzC;gBACD,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE;oBACL,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;oBACzB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;iBACzB;aACF,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,WAAW,EAAE,CAAC;YAEpE,iCAAiC;YACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC;YAC1D,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- describe('IsoTimestamp', () => {
4
- it('should be a string type', () => {
5
- // type verification
6
- const timestamp = '2025-11-22T10:30:00.000Z';
7
- expect(typeof timestamp).toBe('string');
8
- });
9
- });
10
- //# sourceMappingURL=IsoTimestamp.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IsoTimestamp.test.js","sourceRoot":"","sources":["../../src/domain.objects/IsoTimestamp.test.ts"],"names":[],"mappings":";;AAEA,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,oBAAoB;QACpB,MAAM,SAAS,GAAiB,0BAA0B,CAAC;QAC3D,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,241 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const domain_objects_1 = require("domain-objects");
4
- const helpful_errors_1 = require("helpful-errors");
5
- const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
6
- const DeclastructProvider_1 = require("../../domain.objects/DeclastructProvider");
7
- const applyChange_1 = require("./applyChange");
8
- describe('applyChange', () => {
9
- class DemoResource extends domain_objects_1.DomainEntity {
10
- }
11
- DemoResource.unique = ['id'];
12
- it('should return immediately for KEEP action without calling DAO', async () => {
13
- const resource = new DemoResource({ id: 'keep-1', name: 'Keep Me' });
14
- const change = new DeclastructChange_1.DeclastructChange({
15
- forResource: {
16
- class: DemoResource.name,
17
- slug: 'keep-1',
18
- },
19
- action: DeclastructChange_1.DeclastructChangeAction.KEEP,
20
- state: {
21
- desired: resource,
22
- remote: resource,
23
- difference: null,
24
- },
25
- });
26
- const result = await (0, applyChange_1.applyChange)({
27
- resource,
28
- change,
29
- providers: [],
30
- });
31
- expect(result).toBe(change);
32
- });
33
- it('should call finsert for CREATE action', async () => {
34
- const resource = new DemoResource({ id: 'create-1', name: 'Create Me' });
35
- const finsertSpy = jest.fn().mockResolvedValue(resource);
36
- const dao = {
37
- get: {
38
- byUnique: async () => null,
39
- byRef: async () => null,
40
- },
41
- set: {
42
- finsert: finsertSpy,
43
- },
44
- };
45
- const provider = new DeclastructProvider_1.DeclastructProvider({
46
- name: 'test-provider',
47
- daos: { DemoResource: dao },
48
- context: {},
49
- hooks: {
50
- beforeAll: async () => { },
51
- afterAll: async () => { },
52
- },
53
- });
54
- const change = new DeclastructChange_1.DeclastructChange({
55
- forResource: {
56
- class: DemoResource.name,
57
- slug: 'create-1',
58
- },
59
- action: DeclastructChange_1.DeclastructChangeAction.CREATE,
60
- state: {
61
- desired: resource,
62
- remote: null,
63
- difference: 'some diff',
64
- },
65
- });
66
- await (0, applyChange_1.applyChange)({
67
- resource,
68
- change,
69
- providers: [provider],
70
- });
71
- expect(finsertSpy).toHaveBeenCalledWith(resource, {});
72
- });
73
- it('should call upsert for UPDATE action', async () => {
74
- const remote = new DemoResource({ id: 'update-1', name: 'Old Name' });
75
- const desired = new DemoResource({ id: 'update-1', name: 'New Name' });
76
- const upsertSpy = jest.fn().mockResolvedValue(desired);
77
- const dao = {
78
- get: {
79
- byUnique: async () => null,
80
- byRef: async () => null,
81
- },
82
- set: {
83
- finsert: async (input) => input,
84
- upsert: upsertSpy,
85
- },
86
- };
87
- const provider = new DeclastructProvider_1.DeclastructProvider({
88
- name: 'test-provider',
89
- daos: { DemoResource: dao },
90
- context: {},
91
- hooks: {
92
- beforeAll: async () => { },
93
- afterAll: async () => { },
94
- },
95
- });
96
- const change = new DeclastructChange_1.DeclastructChange({
97
- forResource: {
98
- class: DemoResource.name,
99
- slug: 'update-1',
100
- },
101
- action: DeclastructChange_1.DeclastructChangeAction.UPDATE,
102
- state: {
103
- desired,
104
- remote,
105
- difference: 'some diff',
106
- },
107
- });
108
- await (0, applyChange_1.applyChange)({
109
- resource: desired,
110
- change,
111
- providers: [provider],
112
- });
113
- expect(upsertSpy).toHaveBeenCalledWith(desired, {});
114
- });
115
- it('should throw when UPDATE action but DAO does not support upsert', async () => {
116
- const remote = new DemoResource({ id: 'update-1', name: 'Old Name' });
117
- const desired = new DemoResource({ id: 'update-1', name: 'New Name' });
118
- const dao = {
119
- get: {
120
- byUnique: async () => null,
121
- byRef: async () => null,
122
- },
123
- set: {
124
- finsert: async (input) => input,
125
- },
126
- };
127
- const provider = new DeclastructProvider_1.DeclastructProvider({
128
- name: 'test-provider',
129
- daos: { DemoResource: dao },
130
- context: {},
131
- hooks: {
132
- beforeAll: async () => { },
133
- afterAll: async () => { },
134
- },
135
- });
136
- const change = new DeclastructChange_1.DeclastructChange({
137
- forResource: {
138
- class: DemoResource.name,
139
- slug: 'update-1',
140
- },
141
- action: DeclastructChange_1.DeclastructChangeAction.UPDATE,
142
- state: {
143
- desired,
144
- remote,
145
- difference: 'some diff',
146
- },
147
- });
148
- const error = await (0, helpful_errors_1.getError)(() => (0, applyChange_1.applyChange)({
149
- resource: desired,
150
- change,
151
- providers: [provider],
152
- }));
153
- expect(error.message).toContain('DAO does not support updates');
154
- });
155
- it('should call delete for DESTROY action', async () => {
156
- const resource = new DemoResource({ id: 'destroy-1', name: 'Delete Me' });
157
- const deleteSpy = jest.fn().mockResolvedValue(undefined);
158
- const dao = {
159
- get: {
160
- byUnique: async () => null,
161
- byRef: async () => null,
162
- },
163
- set: {
164
- finsert: async (input) => input,
165
- delete: deleteSpy,
166
- },
167
- };
168
- const provider = new DeclastructProvider_1.DeclastructProvider({
169
- name: 'test-provider',
170
- daos: { DemoResource: dao },
171
- context: {},
172
- hooks: {
173
- beforeAll: async () => { },
174
- afterAll: async () => { },
175
- },
176
- });
177
- const change = new DeclastructChange_1.DeclastructChange({
178
- forResource: {
179
- class: DemoResource.name,
180
- slug: 'destroy-1',
181
- },
182
- action: DeclastructChange_1.DeclastructChangeAction.DESTROY,
183
- state: {
184
- desired: null,
185
- remote: resource,
186
- difference: 'some diff',
187
- },
188
- });
189
- await (0, applyChange_1.applyChange)({
190
- resource,
191
- change,
192
- providers: [provider],
193
- });
194
- expect(deleteSpy).toHaveBeenCalledWith(resource, {});
195
- });
196
- it('should call delete then finsert for REPLACE action', async () => {
197
- const remote = new DemoResource({ id: 'replace-1', name: 'Old' });
198
- const desired = new DemoResource({ id: 'replace-2', name: 'New' });
199
- const deleteSpy = jest.fn().mockResolvedValue(undefined);
200
- const finsertSpy = jest.fn().mockResolvedValue(desired);
201
- const dao = {
202
- get: {
203
- byUnique: async () => null,
204
- byRef: async () => null,
205
- },
206
- set: {
207
- finsert: finsertSpy,
208
- delete: deleteSpy,
209
- },
210
- };
211
- const provider = new DeclastructProvider_1.DeclastructProvider({
212
- name: 'test-provider',
213
- daos: { DemoResource: dao },
214
- context: {},
215
- hooks: {
216
- beforeAll: async () => { },
217
- afterAll: async () => { },
218
- },
219
- });
220
- const change = new DeclastructChange_1.DeclastructChange({
221
- forResource: {
222
- class: DemoResource.name,
223
- slug: 'replace-1',
224
- },
225
- action: DeclastructChange_1.DeclastructChangeAction.REPLACE,
226
- state: {
227
- desired,
228
- remote,
229
- difference: 'some diff',
230
- },
231
- });
232
- await (0, applyChange_1.applyChange)({
233
- resource: desired,
234
- change,
235
- providers: [provider],
236
- });
237
- expect(deleteSpy).toHaveBeenCalledWith(remote, {});
238
- expect(finsertSpy).toHaveBeenCalledWith(desired, {});
239
- });
240
- });
241
- //# sourceMappingURL=applyChange.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"applyChange.test.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChange.test.ts"],"names":[],"mappings":"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"}