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.
- package/dist/domain.objects/ContextDeclastruct.d.ts +1 -1
- package/dist/domain.objects/DeclastructChange.d.ts +1 -1
- package/dist/domain.objects/DeclastructChange.js.map +1 -1
- package/dist/domain.objects/DeclastructDao.d.ts +2 -2
- package/dist/domain.objects/DeclastructPlan.d.ts +2 -2
- package/dist/domain.objects/DeclastructProvider.d.ts +1 -1
- package/dist/domain.operations/apply/applyChanges.js +8 -3
- package/dist/domain.operations/apply/applyChanges.js.map +1 -1
- package/dist/domain.operations/plan/computeChange.js +2 -28
- package/dist/domain.operations/plan/computeChange.js.map +1 -1
- package/dist/domain.operations/plan/getDisplayableDiff.d.ts +10 -0
- package/dist/domain.operations/plan/getDisplayableDiff.js +40 -0
- package/dist/domain.operations/plan/getDisplayableDiff.js.map +1 -0
- package/dist/infra/asIsoTimestamp.d.ts +1 -1
- package/license.md +21 -0
- package/package.json +19 -9
- package/readme.md +52 -32
- package/dist/.test/assets/providers/demo.provider.d.ts +0 -32
- package/dist/.test/assets/providers/demo.provider.js +0 -101
- package/dist/.test/assets/providers/demo.provider.js.map +0 -1
- package/dist/contract/cli/apply.integration.test.d.ts +0 -1
- package/dist/contract/cli/apply.integration.test.js +0 -215
- package/dist/contract/cli/apply.integration.test.js.map +0 -1
- package/dist/contract/cli/plan.integration.test.d.ts +0 -1
- package/dist/contract/cli/plan.integration.test.js +0 -142
- package/dist/contract/cli/plan.integration.test.js.map +0 -1
- package/dist/domain.objects/ContextDeclastruct.test.d.ts +0 -1
- package/dist/domain.objects/ContextDeclastruct.test.js +0 -41
- package/dist/domain.objects/ContextDeclastruct.test.js.map +0 -1
- package/dist/domain.objects/DeclastructChange.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructChange.test.js +0 -59
- package/dist/domain.objects/DeclastructChange.test.js.map +0 -1
- package/dist/domain.objects/DeclastructDao.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructDao.test.js +0 -78
- package/dist/domain.objects/DeclastructDao.test.js.map +0 -1
- package/dist/domain.objects/DeclastructPlan.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructPlan.test.js +0 -31
- package/dist/domain.objects/DeclastructPlan.test.js.map +0 -1
- package/dist/domain.objects/DeclastructProvider.test.d.ts +0 -1
- package/dist/domain.objects/DeclastructProvider.test.js +0 -80
- package/dist/domain.objects/DeclastructProvider.test.js.map +0 -1
- package/dist/domain.objects/IsoTimestamp.test.d.ts +0 -1
- package/dist/domain.objects/IsoTimestamp.test.js +0 -10
- package/dist/domain.objects/IsoTimestamp.test.js.map +0 -1
- package/dist/domain.operations/apply/applyChange.test.d.ts +0 -1
- package/dist/domain.operations/apply/applyChange.test.js +0 -241
- package/dist/domain.operations/apply/applyChange.test.js.map +0 -1
- package/dist/domain.operations/apply/applyChanges.integration.test.d.ts +0 -1
- package/dist/domain.operations/apply/applyChanges.integration.test.js +0 -291
- package/dist/domain.operations/apply/applyChanges.integration.test.js.map +0 -1
- package/dist/domain.operations/plan/computeChange.test.d.ts +0 -1
- package/dist/domain.operations/plan/computeChange.test.js +0 -153
- package/dist/domain.operations/plan/computeChange.test.js.map +0 -1
- package/dist/domain.operations/plan/getDaoByResource.test.d.ts +0 -1
- package/dist/domain.operations/plan/getDaoByResource.test.js +0 -101
- package/dist/domain.operations/plan/getDaoByResource.test.js.map +0 -1
- package/dist/domain.operations/plan/planChanges.integration.test.d.ts +0 -1
- package/dist/domain.operations/plan/planChanges.integration.test.js +0 -200
- package/dist/domain.operations/plan/planChanges.integration.test.js.map +0 -1
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const bottleneck_1 = __importDefault(require("bottleneck"));
|
|
7
|
-
const fs_1 = require("fs");
|
|
8
|
-
const promises_1 = require("fs/promises");
|
|
9
|
-
const path_1 = require("path");
|
|
10
|
-
const demo_provider_1 = require("../../.test/assets/providers/demo.provider");
|
|
11
|
-
const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
|
|
12
|
-
const planChanges_1 = require("../plan/planChanges");
|
|
13
|
-
const applyChanges_1 = require("./applyChanges");
|
|
14
|
-
describe('applyChanges', () => {
|
|
15
|
-
const wishFilePath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/wish.fixture.ts');
|
|
16
|
-
beforeAll(async () => {
|
|
17
|
-
// initialize provider (creates temp directory)
|
|
18
|
-
await demo_provider_1.demoProvider.hooks.beforeAll();
|
|
19
|
-
});
|
|
20
|
-
const createContext = () => ({
|
|
21
|
-
bottleneck: new bottleneck_1.default({ maxConcurrent: 1 }),
|
|
22
|
-
log: {
|
|
23
|
-
info: jest.fn(),
|
|
24
|
-
error: jest.fn(),
|
|
25
|
-
warn: jest.fn(),
|
|
26
|
-
debug: jest.fn(),
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
it('should apply CREATE changes and verify files created on disk', async () => {
|
|
30
|
-
// define desired resources with automatic unique IDs
|
|
31
|
-
const resources = [
|
|
32
|
-
(0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
|
|
33
|
-
(0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
|
|
34
|
-
];
|
|
35
|
-
// plan changes
|
|
36
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
37
|
-
resources,
|
|
38
|
-
providers: [demo_provider_1.demoProvider],
|
|
39
|
-
wishFilePath,
|
|
40
|
-
}, createContext());
|
|
41
|
-
// verify plan has CREATE actions
|
|
42
|
-
expect(plan.changes.every((c) => c.action === DeclastructChange_1.DeclastructChangeAction.CREATE)).toBe(true);
|
|
43
|
-
// apply changes
|
|
44
|
-
const result = await (0, applyChanges_1.applyChanges)({
|
|
45
|
-
plan,
|
|
46
|
-
resources,
|
|
47
|
-
providers: [demo_provider_1.demoProvider],
|
|
48
|
-
}, createContext());
|
|
49
|
-
// verify changes were applied
|
|
50
|
-
expect(result.appliedChanges.length).toBe(2);
|
|
51
|
-
result.appliedChanges.forEach((change) => {
|
|
52
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.CREATE);
|
|
53
|
-
});
|
|
54
|
-
// verify files exist on disk
|
|
55
|
-
const file1Path = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[0].exid}.json`);
|
|
56
|
-
const file2Path = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[1].exid}.json`);
|
|
57
|
-
expect((0, fs_1.existsSync)(file1Path)).toBe(true);
|
|
58
|
-
expect((0, fs_1.existsSync)(file2Path)).toBe(true);
|
|
59
|
-
// verify file contents
|
|
60
|
-
const file1Json = await (0, promises_1.readFile)(file1Path, 'utf-8');
|
|
61
|
-
const file1Data = JSON.parse(file1Json);
|
|
62
|
-
expect(file1Data.exid).toBe(resources[0].exid);
|
|
63
|
-
expect(file1Data.name).toBe('First Test');
|
|
64
|
-
const file2Json = await (0, promises_1.readFile)(file2Path, 'utf-8');
|
|
65
|
-
const file2Data = JSON.parse(file2Json);
|
|
66
|
-
expect(file2Data.exid).toBe(resources[1].exid);
|
|
67
|
-
expect(file2Data.name).toBe('Second Test');
|
|
68
|
-
});
|
|
69
|
-
it('should apply UPDATE changes and verify files modified on disk', async () => {
|
|
70
|
-
// create initial resource
|
|
71
|
-
const initialResource = (0, demo_provider_1.genSampleDemoResource)({ name: 'Old Name' });
|
|
72
|
-
// create initial remote state
|
|
73
|
-
const dao = demo_provider_1.demoProvider.daos.DemoResource;
|
|
74
|
-
await dao.set.finsert(initialResource, {});
|
|
75
|
-
// define desired resource with updated name (same exid)
|
|
76
|
-
const resources = [initialResource.clone({ name: 'New Name' })];
|
|
77
|
-
// plan changes
|
|
78
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
79
|
-
resources,
|
|
80
|
-
providers: [demo_provider_1.demoProvider],
|
|
81
|
-
wishFilePath,
|
|
82
|
-
}, createContext());
|
|
83
|
-
// verify plan has UPDATE action
|
|
84
|
-
expect(plan.changes.length).toBe(1);
|
|
85
|
-
expect(plan.changes[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.UPDATE);
|
|
86
|
-
// apply changes
|
|
87
|
-
const result = await (0, applyChanges_1.applyChanges)({
|
|
88
|
-
plan,
|
|
89
|
-
resources,
|
|
90
|
-
providers: [demo_provider_1.demoProvider],
|
|
91
|
-
}, createContext());
|
|
92
|
-
// verify update was applied
|
|
93
|
-
expect(result.appliedChanges.length).toBe(1);
|
|
94
|
-
expect(result.appliedChanges[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.UPDATE);
|
|
95
|
-
// verify file was updated on disk
|
|
96
|
-
const filePath = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${initialResource.exid}.json`);
|
|
97
|
-
const fileJson = await (0, promises_1.readFile)(filePath, 'utf-8');
|
|
98
|
-
const fileData = JSON.parse(fileJson);
|
|
99
|
-
expect(fileData.name).toBe('New Name');
|
|
100
|
-
});
|
|
101
|
-
it('should skip KEEP changes without making modifications', async () => {
|
|
102
|
-
// create resource
|
|
103
|
-
const resource = (0, demo_provider_1.genSampleDemoResource)({ name: 'Unchanged' });
|
|
104
|
-
// create remote state
|
|
105
|
-
const dao = demo_provider_1.demoProvider.daos.DemoResource;
|
|
106
|
-
await dao.set.finsert(resource, {});
|
|
107
|
-
// define same resource (no changes)
|
|
108
|
-
const resources = [resource];
|
|
109
|
-
// plan changes
|
|
110
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
111
|
-
resources,
|
|
112
|
-
providers: [demo_provider_1.demoProvider],
|
|
113
|
-
wishFilePath,
|
|
114
|
-
}, createContext());
|
|
115
|
-
// verify plan has KEEP action
|
|
116
|
-
expect(plan.changes.length).toBe(1);
|
|
117
|
-
expect(plan.changes[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
|
|
118
|
-
// apply changes
|
|
119
|
-
const context = createContext();
|
|
120
|
-
const result = await (0, applyChanges_1.applyChanges)({
|
|
121
|
-
plan,
|
|
122
|
-
resources,
|
|
123
|
-
providers: [demo_provider_1.demoProvider],
|
|
124
|
-
}, context);
|
|
125
|
-
// verify KEEP was not included in applied changes
|
|
126
|
-
expect(result.appliedChanges.length).toBe(0);
|
|
127
|
-
// verify log was emitted for KEEP
|
|
128
|
-
expect(context.log.info).toHaveBeenCalledWith(expect.stringContaining('[KEEP]'), {});
|
|
129
|
-
// verify file still exists with same content
|
|
130
|
-
const filePath = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resource.exid}.json`);
|
|
131
|
-
const fileJson = await (0, promises_1.readFile)(filePath, 'utf-8');
|
|
132
|
-
const fileData = JSON.parse(fileJson);
|
|
133
|
-
expect(fileData.name).toBe('Unchanged');
|
|
134
|
-
});
|
|
135
|
-
it('should emit real-time logs as changes are applied', async () => {
|
|
136
|
-
// define resources
|
|
137
|
-
const resources = [
|
|
138
|
-
(0, demo_provider_1.genSampleDemoResource)({ name: 'First Test' }),
|
|
139
|
-
(0, demo_provider_1.genSampleDemoResource)({ name: 'Second Test' }),
|
|
140
|
-
];
|
|
141
|
-
// plan changes
|
|
142
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
143
|
-
resources,
|
|
144
|
-
providers: [demo_provider_1.demoProvider],
|
|
145
|
-
wishFilePath,
|
|
146
|
-
}, createContext());
|
|
147
|
-
// apply with spy on log
|
|
148
|
-
const context = createContext();
|
|
149
|
-
await (0, applyChanges_1.applyChanges)({
|
|
150
|
-
plan,
|
|
151
|
-
resources,
|
|
152
|
-
providers: [demo_provider_1.demoProvider],
|
|
153
|
-
}, context);
|
|
154
|
-
// verify logs were emitted (logs include the full slug with hash)
|
|
155
|
-
expect(context.log.info).toHaveBeenCalledWith(expect.stringContaining(`[CREATE] DemoResource.`), {});
|
|
156
|
-
expect(context.log.info).toHaveBeenCalled();
|
|
157
|
-
});
|
|
158
|
-
it('should handle mixed CREATE, UPDATE, and KEEP actions in single apply', async () => {
|
|
159
|
-
// create initial resources for remote state
|
|
160
|
-
const resource1 = (0, demo_provider_1.genSampleDemoResource)({ name: 'Unchanged' });
|
|
161
|
-
const resource2 = (0, demo_provider_1.genSampleDemoResource)({ name: 'Old Name' });
|
|
162
|
-
// create remote state for some resources
|
|
163
|
-
const dao = demo_provider_1.demoProvider.daos.DemoResource;
|
|
164
|
-
await dao.set.finsert(resource1, {});
|
|
165
|
-
await dao.set.finsert(resource2, {});
|
|
166
|
-
// define desired resources
|
|
167
|
-
const resources = [
|
|
168
|
-
resource1, // KEEP (unchanged)
|
|
169
|
-
resource2.clone({ name: 'New Name' }), // UPDATE
|
|
170
|
-
(0, demo_provider_1.genSampleDemoResource)({ name: 'Brand New' }), // CREATE
|
|
171
|
-
];
|
|
172
|
-
// plan changes
|
|
173
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
174
|
-
resources,
|
|
175
|
-
providers: [demo_provider_1.demoProvider],
|
|
176
|
-
wishFilePath,
|
|
177
|
-
}, createContext());
|
|
178
|
-
// verify mixed actions in plan
|
|
179
|
-
expect(plan.changes.length).toBe(3);
|
|
180
|
-
// apply changes
|
|
181
|
-
const result = await (0, applyChanges_1.applyChanges)({
|
|
182
|
-
plan,
|
|
183
|
-
resources,
|
|
184
|
-
providers: [demo_provider_1.demoProvider],
|
|
185
|
-
}, createContext());
|
|
186
|
-
// verify only CREATE and UPDATE were applied (not KEEP)
|
|
187
|
-
expect(result.appliedChanges.length).toBe(2);
|
|
188
|
-
const appliedActions = result.appliedChanges.map((c) => c.action);
|
|
189
|
-
expect(appliedActions).toContain(DeclastructChange_1.DeclastructChangeAction.UPDATE);
|
|
190
|
-
expect(appliedActions).toContain(DeclastructChange_1.DeclastructChangeAction.CREATE);
|
|
191
|
-
// verify all files exist with correct content
|
|
192
|
-
const file1Path = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[0].exid}.json`);
|
|
193
|
-
const file2Path = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[1].exid}.json`);
|
|
194
|
-
const file3Path = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[2].exid}.json`);
|
|
195
|
-
expect((0, fs_1.existsSync)(file1Path)).toBe(true);
|
|
196
|
-
expect((0, fs_1.existsSync)(file2Path)).toBe(true);
|
|
197
|
-
expect((0, fs_1.existsSync)(file3Path)).toBe(true);
|
|
198
|
-
const file2Json = await (0, promises_1.readFile)(file2Path, 'utf-8');
|
|
199
|
-
const file2Data = JSON.parse(file2Json);
|
|
200
|
-
expect(file2Data.name).toBe('New Name');
|
|
201
|
-
});
|
|
202
|
-
it('should detect and reject stale plans', async () => {
|
|
203
|
-
// define initial resource
|
|
204
|
-
const initialResources = [(0, demo_provider_1.genSampleDemoResource)({ name: 'Original Name' })];
|
|
205
|
-
// plan changes
|
|
206
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
207
|
-
resources: initialResources,
|
|
208
|
-
providers: [demo_provider_1.demoProvider],
|
|
209
|
-
wishFilePath,
|
|
210
|
-
}, createContext());
|
|
211
|
-
// apply the plan (creates the resource)
|
|
212
|
-
await (0, applyChanges_1.applyChanges)({
|
|
213
|
-
plan,
|
|
214
|
-
resources: initialResources,
|
|
215
|
-
providers: [demo_provider_1.demoProvider],
|
|
216
|
-
}, createContext());
|
|
217
|
-
// externally modify the resource
|
|
218
|
-
const dao = demo_provider_1.demoProvider.daos.DemoResource;
|
|
219
|
-
await dao.set.upsert(initialResources[0].clone({ name: 'Externally Modified' }), {});
|
|
220
|
-
// try to reapply the stale plan
|
|
221
|
-
await expect((0, applyChanges_1.applyChanges)({
|
|
222
|
-
plan, // stale plan still shows "Original Name"
|
|
223
|
-
resources: initialResources,
|
|
224
|
-
providers: [demo_provider_1.demoProvider],
|
|
225
|
-
}, createContext())).rejects.toThrow();
|
|
226
|
-
});
|
|
227
|
-
it('should be idempotent - reapplying same plan is safe', async () => {
|
|
228
|
-
// define resource
|
|
229
|
-
const resources = [(0, demo_provider_1.genSampleDemoResource)({ name: 'Test Resource' })];
|
|
230
|
-
// plan changes
|
|
231
|
-
const plan = await (0, planChanges_1.planChanges)({
|
|
232
|
-
resources,
|
|
233
|
-
providers: [demo_provider_1.demoProvider],
|
|
234
|
-
wishFilePath,
|
|
235
|
-
}, createContext());
|
|
236
|
-
// apply first time
|
|
237
|
-
const result1 = await (0, applyChanges_1.applyChanges)({
|
|
238
|
-
plan,
|
|
239
|
-
resources,
|
|
240
|
-
providers: [demo_provider_1.demoProvider],
|
|
241
|
-
}, createContext());
|
|
242
|
-
expect(result1.appliedChanges.length).toBe(1);
|
|
243
|
-
expect(result1.appliedChanges[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.CREATE);
|
|
244
|
-
// replan with same resources
|
|
245
|
-
const plan2 = await (0, planChanges_1.planChanges)({
|
|
246
|
-
resources,
|
|
247
|
-
providers: [demo_provider_1.demoProvider],
|
|
248
|
-
wishFilePath,
|
|
249
|
-
}, createContext());
|
|
250
|
-
// apply second time
|
|
251
|
-
const result2 = await (0, applyChanges_1.applyChanges)({
|
|
252
|
-
plan: plan2,
|
|
253
|
-
resources,
|
|
254
|
-
providers: [demo_provider_1.demoProvider],
|
|
255
|
-
}, createContext());
|
|
256
|
-
// verify second apply was KEEP (no changes)
|
|
257
|
-
expect(result2.appliedChanges.length).toBe(0);
|
|
258
|
-
expect(plan2.changes[0].action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
|
|
259
|
-
// verify file exists with correct content
|
|
260
|
-
const filePath = (0, path_1.resolve)(process.cwd(), `.test/demo/provider/.temp/${resources[0].exid}.json`);
|
|
261
|
-
const fileJson = await (0, promises_1.readFile)(filePath, 'utf-8');
|
|
262
|
-
const fileData = JSON.parse(fileJson);
|
|
263
|
-
expect(fileData.name).toBe('Test Resource');
|
|
264
|
-
});
|
|
265
|
-
it('should validate plan before applying to ensure it is still valid', async () => {
|
|
266
|
-
// define resource
|
|
267
|
-
const resources = [(0, demo_provider_1.genSampleDemoResource)({ name: 'Test Resource' })];
|
|
268
|
-
// plan changes
|
|
269
|
-
const originalPlan = await (0, planChanges_1.planChanges)({
|
|
270
|
-
resources,
|
|
271
|
-
providers: [demo_provider_1.demoProvider],
|
|
272
|
-
wishFilePath,
|
|
273
|
-
}, createContext());
|
|
274
|
-
// apply the plan (creates the resource)
|
|
275
|
-
await (0, applyChanges_1.applyChanges)({
|
|
276
|
-
plan: originalPlan,
|
|
277
|
-
resources,
|
|
278
|
-
providers: [demo_provider_1.demoProvider],
|
|
279
|
-
}, createContext());
|
|
280
|
-
// externally modify the remote resource to make original plan stale
|
|
281
|
-
const dao = demo_provider_1.demoProvider.daos.DemoResource;
|
|
282
|
-
await dao.set.upsert(resources[0].clone({ name: 'Externally Modified' }), {});
|
|
283
|
-
// try to apply the stale plan again
|
|
284
|
-
await expect((0, applyChanges_1.applyChanges)({
|
|
285
|
-
plan: originalPlan, // stale - remote state changed
|
|
286
|
-
resources,
|
|
287
|
-
providers: [demo_provider_1.demoProvider],
|
|
288
|
-
}, createContext())).rejects.toThrow('plan is stale');
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
//# sourceMappingURL=applyChanges.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"applyChanges.integration.test.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const domain_objects_1 = require("domain-objects");
|
|
4
|
-
const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
|
|
5
|
-
const computeChange_1 = require("./computeChange");
|
|
6
|
-
describe('computeChange', () => {
|
|
7
|
-
class DemoResource extends domain_objects_1.DomainEntity {
|
|
8
|
-
}
|
|
9
|
-
DemoResource.primary = ['id'];
|
|
10
|
-
DemoResource.unique = ['exid'];
|
|
11
|
-
DemoResource.updatable = ['name'];
|
|
12
|
-
it('should return CREATE when remote is null', () => {
|
|
13
|
-
const desired = new DemoResource({
|
|
14
|
-
exid: 'new-1',
|
|
15
|
-
name: 'New Resource',
|
|
16
|
-
});
|
|
17
|
-
const change = (0, computeChange_1.computeChange)({
|
|
18
|
-
desired,
|
|
19
|
-
remote: null,
|
|
20
|
-
});
|
|
21
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.CREATE);
|
|
22
|
-
expect(change.forResource.class).toBe('DemoResource');
|
|
23
|
-
expect(change.forResource.slug).toBe((0, domain_objects_1.getUniqueIdentifierSlug)(desired));
|
|
24
|
-
expect(change.state.desired).toBe(desired);
|
|
25
|
-
expect(change.state.remote).toBeNull();
|
|
26
|
-
expect(change.state.difference).toBeTruthy();
|
|
27
|
-
});
|
|
28
|
-
it('should return DESTROY when desired is null', () => {
|
|
29
|
-
const remote = new DemoResource({
|
|
30
|
-
exid: 'old-1',
|
|
31
|
-
name: 'Old Resource',
|
|
32
|
-
});
|
|
33
|
-
const change = (0, computeChange_1.computeChange)({
|
|
34
|
-
desired: null,
|
|
35
|
-
remote,
|
|
36
|
-
});
|
|
37
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.DESTROY);
|
|
38
|
-
expect(change.forResource.class).toBe('DemoResource');
|
|
39
|
-
expect(change.forResource.slug).toBe((0, domain_objects_1.getUniqueIdentifierSlug)(remote));
|
|
40
|
-
expect(change.state.desired).toBeNull();
|
|
41
|
-
expect(change.state.remote).toBe(remote);
|
|
42
|
-
expect(change.state.difference).toBeTruthy();
|
|
43
|
-
});
|
|
44
|
-
it('should return KEEP when resources are equivalent', () => {
|
|
45
|
-
const desired = new DemoResource({
|
|
46
|
-
exid: 'same-1',
|
|
47
|
-
name: 'Same Resource',
|
|
48
|
-
});
|
|
49
|
-
const remote = new DemoResource({
|
|
50
|
-
exid: 'same-1',
|
|
51
|
-
name: 'Same Resource',
|
|
52
|
-
});
|
|
53
|
-
const change = (0, computeChange_1.computeChange)({
|
|
54
|
-
desired,
|
|
55
|
-
remote,
|
|
56
|
-
});
|
|
57
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
|
|
58
|
-
expect(change.forResource.class).toBe('DemoResource');
|
|
59
|
-
expect(change.forResource.slug).toBe((0, domain_objects_1.getUniqueIdentifierSlug)(desired));
|
|
60
|
-
expect(change.state.desired).toBe(desired);
|
|
61
|
-
expect(change.state.remote).toBe(remote);
|
|
62
|
-
expect(change.state.difference).toBeNull();
|
|
63
|
-
});
|
|
64
|
-
it('should return UPDATE when resources differ', () => {
|
|
65
|
-
const desired = new DemoResource({
|
|
66
|
-
exid: 'update-1',
|
|
67
|
-
name: 'New Name',
|
|
68
|
-
});
|
|
69
|
-
const remote = new DemoResource({
|
|
70
|
-
exid: 'update-1',
|
|
71
|
-
name: 'Old Name',
|
|
72
|
-
});
|
|
73
|
-
const change = (0, computeChange_1.computeChange)({
|
|
74
|
-
desired,
|
|
75
|
-
remote,
|
|
76
|
-
});
|
|
77
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.UPDATE);
|
|
78
|
-
expect(change.forResource.class).toBe('DemoResource');
|
|
79
|
-
expect(change.forResource.slug).toBe((0, domain_objects_1.getUniqueIdentifierSlug)(desired));
|
|
80
|
-
expect(change.state.desired).toBe(desired);
|
|
81
|
-
expect(change.state.remote).toBe(remote);
|
|
82
|
-
expect(change.state.difference).toBeTruthy();
|
|
83
|
-
expect(change.state.difference).toContain('Old Name');
|
|
84
|
-
expect(change.state.difference).toContain('New Name');
|
|
85
|
-
});
|
|
86
|
-
it('should return KEEP when only metadata differs (ignores id, createdAt, updatedAt)', () => {
|
|
87
|
-
const desired = new DemoResource({
|
|
88
|
-
exid: 'meta-test-1',
|
|
89
|
-
name: 'Same Name',
|
|
90
|
-
});
|
|
91
|
-
const remote = new DemoResource({
|
|
92
|
-
id: 'db-id-123',
|
|
93
|
-
exid: 'meta-test-1',
|
|
94
|
-
name: 'Same Name',
|
|
95
|
-
createdAt: '2024-01-01T00:00:00Z',
|
|
96
|
-
updatedAt: '2024-01-02T00:00:00Z',
|
|
97
|
-
});
|
|
98
|
-
const change = (0, computeChange_1.computeChange)({
|
|
99
|
-
desired,
|
|
100
|
-
remote,
|
|
101
|
-
});
|
|
102
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
|
|
103
|
-
expect(change.state.difference).toBeNull();
|
|
104
|
-
});
|
|
105
|
-
it('should not include metadata in diff when resources differ', () => {
|
|
106
|
-
const desired = new DemoResource({
|
|
107
|
-
exid: 'diff-test-1',
|
|
108
|
-
name: 'New Name',
|
|
109
|
-
});
|
|
110
|
-
const remote = new DemoResource({
|
|
111
|
-
id: 'db-id-456',
|
|
112
|
-
exid: 'diff-test-1',
|
|
113
|
-
name: 'Old Name',
|
|
114
|
-
createdAt: '2024-01-01T00:00:00Z',
|
|
115
|
-
updatedAt: '2024-01-02T00:00:00Z',
|
|
116
|
-
});
|
|
117
|
-
const change = (0, computeChange_1.computeChange)({
|
|
118
|
-
desired,
|
|
119
|
-
remote,
|
|
120
|
-
});
|
|
121
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.UPDATE);
|
|
122
|
-
expect(change.state.difference).toBeTruthy();
|
|
123
|
-
expect(change.state.difference).toContain('New Name');
|
|
124
|
-
expect(change.state.difference).toContain('Old Name');
|
|
125
|
-
// metadata should not appear in diff
|
|
126
|
-
expect(change.state.difference).not.toContain('db-id-456');
|
|
127
|
-
expect(change.state.difference).not.toContain('createdAt');
|
|
128
|
-
expect(change.state.difference).not.toContain('updatedAt');
|
|
129
|
-
expect(change.state.difference).not.toContain('2024-01-01');
|
|
130
|
-
});
|
|
131
|
-
it('should return KEEP even when metadata values differ', () => {
|
|
132
|
-
const desired = new DemoResource({
|
|
133
|
-
exid: 'meta-diff-1',
|
|
134
|
-
name: 'Same Name',
|
|
135
|
-
});
|
|
136
|
-
const remote = new DemoResource({
|
|
137
|
-
id: 'db-id-789',
|
|
138
|
-
uuid: 'uuid-abc-123',
|
|
139
|
-
exid: 'meta-diff-1',
|
|
140
|
-
name: 'Same Name',
|
|
141
|
-
createdAt: '2024-01-01T00:00:00Z',
|
|
142
|
-
updatedAt: '2024-01-03T00:00:00Z',
|
|
143
|
-
});
|
|
144
|
-
const change = (0, computeChange_1.computeChange)({
|
|
145
|
-
desired,
|
|
146
|
-
remote,
|
|
147
|
-
});
|
|
148
|
-
// should be KEEP because only metadata differs
|
|
149
|
-
expect(change.action).toBe(DeclastructChange_1.DeclastructChangeAction.KEEP);
|
|
150
|
-
expect(change.state.difference).toBeNull();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
//# sourceMappingURL=computeChange.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computeChange.test.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/computeChange.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,101 +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 DeclastructProvider_1 = require("../../domain.objects/DeclastructProvider");
|
|
6
|
-
const getDaoByResource_1 = require("./getDaoByResource");
|
|
7
|
-
describe('getDaoByResource', () => {
|
|
8
|
-
class DemoResource extends domain_objects_1.DomainEntity {
|
|
9
|
-
}
|
|
10
|
-
DemoResource.unique = ['id'];
|
|
11
|
-
it('should return DAO and context when exactly one provider matches', () => {
|
|
12
|
-
const demoDao = {
|
|
13
|
-
get: {
|
|
14
|
-
byUnique: async () => null,
|
|
15
|
-
byRef: async () => null,
|
|
16
|
-
},
|
|
17
|
-
set: {
|
|
18
|
-
finsert: async (input) => input,
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
const providerContext = { testKey: 'testValue' };
|
|
22
|
-
const provider = new DeclastructProvider_1.DeclastructProvider({
|
|
23
|
-
name: 'test-provider',
|
|
24
|
-
daos: { DemoResource: demoDao },
|
|
25
|
-
context: providerContext,
|
|
26
|
-
hooks: {
|
|
27
|
-
beforeAll: async () => { },
|
|
28
|
-
afterAll: async () => { },
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
const resource = new DemoResource({ id: 'test-1', name: 'Test' });
|
|
32
|
-
const result = (0, getDaoByResource_1.getDaoByResource)({
|
|
33
|
-
resource,
|
|
34
|
-
providers: [provider],
|
|
35
|
-
});
|
|
36
|
-
expect(result.dao).toBe(demoDao);
|
|
37
|
-
expect(result.context).toBe(providerContext);
|
|
38
|
-
});
|
|
39
|
-
it('should throw UnexpectedCodePathError when multiple providers support same resource', () => {
|
|
40
|
-
const dao1 = {
|
|
41
|
-
get: {
|
|
42
|
-
byUnique: async () => null,
|
|
43
|
-
byRef: async () => null,
|
|
44
|
-
},
|
|
45
|
-
set: {
|
|
46
|
-
finsert: async (input) => input,
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
const dao2 = {
|
|
50
|
-
get: {
|
|
51
|
-
byUnique: async () => null,
|
|
52
|
-
byRef: async () => null,
|
|
53
|
-
},
|
|
54
|
-
set: {
|
|
55
|
-
finsert: async (input) => input,
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
const provider1 = new DeclastructProvider_1.DeclastructProvider({
|
|
59
|
-
name: 'provider-1',
|
|
60
|
-
daos: { DemoResource: dao1 },
|
|
61
|
-
context: {},
|
|
62
|
-
hooks: {
|
|
63
|
-
beforeAll: async () => { },
|
|
64
|
-
afterAll: async () => { },
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
const provider2 = new DeclastructProvider_1.DeclastructProvider({
|
|
68
|
-
name: 'provider-2',
|
|
69
|
-
daos: { DemoResource: dao2 },
|
|
70
|
-
context: {},
|
|
71
|
-
hooks: {
|
|
72
|
-
beforeAll: async () => { },
|
|
73
|
-
afterAll: async () => { },
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
const resource = new DemoResource({ id: 'test-1', name: 'Test' });
|
|
77
|
-
const error = (0, helpful_errors_1.getError)(() => (0, getDaoByResource_1.getDaoByResource)({
|
|
78
|
-
resource,
|
|
79
|
-
providers: [provider1, provider2],
|
|
80
|
-
}));
|
|
81
|
-
expect(error.message).toContain('multiple providers support same resource');
|
|
82
|
-
});
|
|
83
|
-
it('should throw UnexpectedCodePathError when no provider supports resource', () => {
|
|
84
|
-
const provider = new DeclastructProvider_1.DeclastructProvider({
|
|
85
|
-
name: 'empty-provider',
|
|
86
|
-
daos: {},
|
|
87
|
-
context: {},
|
|
88
|
-
hooks: {
|
|
89
|
-
beforeAll: async () => { },
|
|
90
|
-
afterAll: async () => { },
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
const resource = new DemoResource({ id: 'test-1', name: 'Test' });
|
|
94
|
-
const error = (0, helpful_errors_1.getError)(() => (0, getDaoByResource_1.getDaoByResource)({
|
|
95
|
-
resource,
|
|
96
|
-
providers: [provider],
|
|
97
|
-
}));
|
|
98
|
-
expect(error.message).toContain('no DAO found for resource');
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
//# sourceMappingURL=getDaoByResource.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getDaoByResource.test.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/getDaoByResource.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|