@arrai-innovations/reactive-helpers 13.1.0 → 14.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.
- package/README.md +11 -1
- package/config/listCrud.js +4 -1
- package/config/objectCrud.js +10 -4
- package/docs/README.md +1 -1
- package/docs/config/listCrud.md +20 -2
- package/docs/config/objectCrud.md +51 -15
- package/docs/use/list.md +6 -0
- package/docs/use/listCalculated.md +58 -39
- package/docs/use/listFilter.md +57 -39
- package/docs/use/listInstance.md +29 -11
- package/docs/use/listRelated.md +47 -28
- package/docs/use/listSearch.md +40 -28
- package/docs/use/listSort.md +58 -39
- package/docs/use/listSubscription.md +8 -2
- package/docs/use/object.md +28 -14
- package/docs/use/objectCalculated.md +26 -13
- package/docs/use/objectInstance.md +49 -24
- package/docs/use/objectRelated.md +27 -14
- package/docs/use/objectSubscription.md +18 -9
- package/docs/use/paginatedListInstance.md +8 -2
- package/docs/use/search.md +8 -2
- package/docs/utils/{getFakeId.md → getFakePk.md} +7 -7
- package/index.js +1 -1
- package/package.json +1 -1
- package/tests/unit/use/listCalculated.spec.js +4 -4
- package/tests/unit/use/listFilter.spec.js +10 -9
- package/tests/unit/use/listInstance.spec.js +147 -23
- package/tests/unit/use/listRelated.spec.js +5 -5
- package/tests/unit/use/listSearch.spec.js +14 -12
- package/tests/unit/use/listSort.spec.js +8 -1
- package/tests/unit/use/listSubscription.spec.js +119 -10
- package/tests/unit/use/objectInstance.spec.js +575 -46
- package/tests/unit/use/objectSubscription.spec.js +152 -23
- package/tests/unit/use/search.spec.js +11 -11
- package/use/list.js +1 -0
- package/use/listCalculated.js +3 -2
- package/use/listFilter.js +9 -9
- package/use/listInstance.js +39 -28
- package/use/listKeys.js +4 -3
- package/use/listRelated.js +23 -22
- package/use/listSearch.js +37 -33
- package/use/listSort.js +1 -0
- package/use/listSubscription.js +25 -15
- package/use/object.js +8 -13
- package/use/objectCalculated.js +2 -1
- package/use/objectInstance.js +29 -14
- package/use/objectRelated.js +3 -2
- package/use/objectSubscription.js +31 -11
- package/use/paginatedListInstance.js +1 -1
- package/use/search.js +13 -4
- package/utils/{getFakeId.js → getFakePk.js} +4 -4
|
@@ -24,6 +24,11 @@ describe("use/objectInstance.js", function () {
|
|
|
24
24
|
__str__: "asdf",
|
|
25
25
|
name: "zxcv",
|
|
26
26
|
};
|
|
27
|
+
const crudRetrieveResolvedNonStandardPrimaryKey = {
|
|
28
|
+
unique: 1,
|
|
29
|
+
__str__: "test",
|
|
30
|
+
name: "test",
|
|
31
|
+
};
|
|
27
32
|
const crudRetrieveRejected = {
|
|
28
33
|
errors: ["Not found"],
|
|
29
34
|
data: null,
|
|
@@ -33,8 +38,13 @@ describe("use/objectInstance.js", function () {
|
|
|
33
38
|
};
|
|
34
39
|
const crudCreateResolved = {
|
|
35
40
|
id: 1,
|
|
36
|
-
__str__: "
|
|
37
|
-
name: "
|
|
41
|
+
__str__: "tset",
|
|
42
|
+
name: "tset",
|
|
43
|
+
};
|
|
44
|
+
const crudCreateResolvedNonStandardPK = {
|
|
45
|
+
unique: 1,
|
|
46
|
+
__str__: "tset",
|
|
47
|
+
name: "tset",
|
|
38
48
|
};
|
|
39
49
|
const crudCreateRejected = {
|
|
40
50
|
errors: [
|
|
@@ -52,6 +62,11 @@ describe("use/objectInstance.js", function () {
|
|
|
52
62
|
__str__: "asdf!",
|
|
53
63
|
name: "zxcv!",
|
|
54
64
|
};
|
|
65
|
+
const crudUpdateResolvedWithNonStandardPk = {
|
|
66
|
+
unique: 1,
|
|
67
|
+
__str__: "asdf!",
|
|
68
|
+
name: "zxcv!",
|
|
69
|
+
};
|
|
55
70
|
const crudUpdateRejected = {
|
|
56
71
|
errors: [
|
|
57
72
|
{
|
|
@@ -68,6 +83,11 @@ describe("use/objectInstance.js", function () {
|
|
|
68
83
|
__str__: "asdf!",
|
|
69
84
|
name: "zxcv!",
|
|
70
85
|
};
|
|
86
|
+
const crudPatchResolvedWithNonStandardPk = {
|
|
87
|
+
unique: 1,
|
|
88
|
+
__str__: "asdf!",
|
|
89
|
+
name: "zxcv!",
|
|
90
|
+
};
|
|
71
91
|
const crudPatchRejected = {
|
|
72
92
|
errors: [
|
|
73
93
|
{
|
|
@@ -101,7 +121,8 @@ describe("use/objectInstance.js", function () {
|
|
|
101
121
|
const objectInstance = useObjectInstance({
|
|
102
122
|
props: {
|
|
103
123
|
crudArgs: { stream: "test_stream" },
|
|
104
|
-
id,
|
|
124
|
+
pk: id,
|
|
125
|
+
pkKey: "id",
|
|
105
126
|
retrieveArgs,
|
|
106
127
|
},
|
|
107
128
|
});
|
|
@@ -131,20 +152,67 @@ describe("use/objectInstance.js", function () {
|
|
|
131
152
|
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
|
|
132
153
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
133
154
|
crudArgs: { stream: "test_stream" },
|
|
134
|
-
|
|
155
|
+
pk: 1,
|
|
156
|
+
pkKey: "id",
|
|
135
157
|
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
136
158
|
});
|
|
137
159
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
138
160
|
await nextTick();
|
|
139
161
|
await expect(oiRetrieveResolve).resolves.toBe(true);
|
|
140
162
|
});
|
|
141
|
-
it("success
|
|
163
|
+
it("success with non-standard pk", async function () {
|
|
142
164
|
const id = ref(1);
|
|
143
165
|
const retrieveArgs = reactive({ fields });
|
|
144
166
|
const objectInstance = useObjectInstance({
|
|
145
167
|
props: {
|
|
146
168
|
crudArgs: { stream: "test_stream" },
|
|
147
|
-
id,
|
|
169
|
+
pk: id,
|
|
170
|
+
pkKey: "unique",
|
|
171
|
+
retrieveArgs,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
objectInstance.state.crud.retrieve = vi.fn();
|
|
175
|
+
let crudRetrieveResolve;
|
|
176
|
+
const crudRetrievePromise = new Promise((resolve) => {
|
|
177
|
+
crudRetrieveResolve = resolve;
|
|
178
|
+
});
|
|
179
|
+
objectInstance.state.crud.retrieve.mockReturnValueOnce(crudRetrievePromise);
|
|
180
|
+
|
|
181
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
182
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
183
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
184
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
185
|
+
const oiRetrieveResolve = objectInstance.retrieve();
|
|
186
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
187
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
188
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
189
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
190
|
+
await nextTick();
|
|
191
|
+
// @ts-ignore - crudRetrieveResolve is set in the promise, so it will be defined
|
|
192
|
+
crudRetrieveResolve(crudRetrieveResolvedNonStandardPrimaryKey);
|
|
193
|
+
await flushPromises();
|
|
194
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
195
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
196
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
197
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolvedNonStandardPrimaryKey);
|
|
198
|
+
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
199
|
+
crudArgs: { stream: "test_stream" },
|
|
200
|
+
pk: 1,
|
|
201
|
+
pkKey: "unique",
|
|
202
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
203
|
+
});
|
|
204
|
+
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
205
|
+
await nextTick();
|
|
206
|
+
await expect(oiRetrieveResolve).resolves.toBe(true);
|
|
207
|
+
});
|
|
208
|
+
it("success (retrieveArgs)", async function () {
|
|
209
|
+
const pk = ref(1);
|
|
210
|
+
const retrieveArgs = reactive({ fields });
|
|
211
|
+
const objectInstance = useObjectInstance({
|
|
212
|
+
props: {
|
|
213
|
+
crudArgs: { stream: "test_stream" },
|
|
214
|
+
pk,
|
|
215
|
+
pkKey: "id",
|
|
148
216
|
retrieveArgs,
|
|
149
217
|
},
|
|
150
218
|
});
|
|
@@ -172,7 +240,8 @@ describe("use/objectInstance.js", function () {
|
|
|
172
240
|
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
|
|
173
241
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
174
242
|
crudArgs: { stream: "test_stream" },
|
|
175
|
-
|
|
243
|
+
pk: 1,
|
|
244
|
+
pkKey: "id",
|
|
176
245
|
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
177
246
|
});
|
|
178
247
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
@@ -180,12 +249,13 @@ describe("use/objectInstance.js", function () {
|
|
|
180
249
|
expect(returnValue).toBe(true);
|
|
181
250
|
});
|
|
182
251
|
it("errored", async function () {
|
|
183
|
-
const
|
|
252
|
+
const pk = ref(1);
|
|
184
253
|
const retrieveArgs = reactive({ fields });
|
|
185
254
|
const objectInstance = useObjectInstance({
|
|
186
255
|
props: {
|
|
187
256
|
crudArgs: { stream: "test_stream" },
|
|
188
|
-
|
|
257
|
+
pk,
|
|
258
|
+
pkKey: "id",
|
|
189
259
|
retrieveArgs,
|
|
190
260
|
},
|
|
191
261
|
});
|
|
@@ -213,7 +283,51 @@ describe("use/objectInstance.js", function () {
|
|
|
213
283
|
expect({ ...objectInstance.state.object }).toEqual({});
|
|
214
284
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
215
285
|
crudArgs: { stream: "test_stream" },
|
|
216
|
-
|
|
286
|
+
pk: 1,
|
|
287
|
+
pkKey: "id",
|
|
288
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
289
|
+
});
|
|
290
|
+
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
291
|
+
const returnValue = await oiRetrieveResolve;
|
|
292
|
+
expect(returnValue).toBe(false);
|
|
293
|
+
});
|
|
294
|
+
it("errored with non-matching pkKey", async function () {
|
|
295
|
+
const pk = ref(1);
|
|
296
|
+
const retrieveArgs = reactive({ fields });
|
|
297
|
+
const objectInstance = useObjectInstance({
|
|
298
|
+
props: {
|
|
299
|
+
crudArgs: { stream: "test_stream" },
|
|
300
|
+
pk,
|
|
301
|
+
pkKey: "pk",
|
|
302
|
+
retrieveArgs,
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
objectInstance.state.crud.retrieve = vi.fn();
|
|
306
|
+
let crudRetrieveReject;
|
|
307
|
+
const crudRetrievePromise = new Promise((resolve, reject) => {
|
|
308
|
+
crudRetrieveReject = reject;
|
|
309
|
+
});
|
|
310
|
+
objectInstance.state.crud.retrieve.mockReturnValueOnce(crudRetrievePromise);
|
|
311
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
312
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
313
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
314
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
315
|
+
const oiRetrieveResolve = objectInstance.retrieve();
|
|
316
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
317
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
318
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
319
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
320
|
+
// @ts-ignore - crudRetrieveReject is set in the promise, so it will be defined
|
|
321
|
+
crudRetrieveReject(crudRetrieveRejected);
|
|
322
|
+
await flushPromises();
|
|
323
|
+
expect(objectInstance.state.error).toEqual(crudRetrieveRejected);
|
|
324
|
+
expect(objectInstance.state.errored).toBe(true);
|
|
325
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
326
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
327
|
+
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
328
|
+
crudArgs: { stream: "test_stream" },
|
|
329
|
+
pk: 1,
|
|
330
|
+
pkKey: "pk",
|
|
217
331
|
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
218
332
|
});
|
|
219
333
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
@@ -221,12 +335,13 @@ describe("use/objectInstance.js", function () {
|
|
|
221
335
|
expect(returnValue).toBe(false);
|
|
222
336
|
});
|
|
223
337
|
it("already loading", async function () {
|
|
224
|
-
const
|
|
338
|
+
const pk = ref(1);
|
|
225
339
|
const retrieveArgs = reactive({ fields });
|
|
226
340
|
const objectInstance = useObjectInstance({
|
|
227
341
|
props: {
|
|
228
342
|
crudArgs: { stream: "test_stream" },
|
|
229
|
-
|
|
343
|
+
pk,
|
|
344
|
+
pkKey: "id",
|
|
230
345
|
retrieveArgs,
|
|
231
346
|
},
|
|
232
347
|
});
|
|
@@ -252,12 +367,13 @@ describe("use/objectInstance.js", function () {
|
|
|
252
367
|
expect({ ...objectInstance.state.object }).toEqual({});
|
|
253
368
|
});
|
|
254
369
|
it("double retrieve gets the same promise", async function () {
|
|
255
|
-
const
|
|
370
|
+
const pk = ref(1);
|
|
256
371
|
const retrieveArgs = reactive({ fields });
|
|
257
372
|
const objectInstance = useObjectInstance({
|
|
258
373
|
props: {
|
|
259
374
|
crudArgs: { stream: "test_stream" },
|
|
260
|
-
|
|
375
|
+
pk,
|
|
376
|
+
pkKey: "id",
|
|
261
377
|
retrieveArgs,
|
|
262
378
|
},
|
|
263
379
|
});
|
|
@@ -273,7 +389,8 @@ describe("use/objectInstance.js", function () {
|
|
|
273
389
|
expect(firstPromise).toBe(secondPromise);
|
|
274
390
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
|
|
275
391
|
crudArgs: { stream: "test_stream" },
|
|
276
|
-
|
|
392
|
+
pk: 1,
|
|
393
|
+
pkKey: "id",
|
|
277
394
|
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
278
395
|
});
|
|
279
396
|
expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
|
|
@@ -290,7 +407,8 @@ describe("use/objectInstance.js", function () {
|
|
|
290
407
|
const objectInstance = useObjectInstance({
|
|
291
408
|
props: {
|
|
292
409
|
crudArgs: { stream: "test_stream" },
|
|
293
|
-
id,
|
|
410
|
+
pk: id,
|
|
411
|
+
pkKey: "id",
|
|
294
412
|
retrieveArgs,
|
|
295
413
|
},
|
|
296
414
|
});
|
|
@@ -329,6 +447,7 @@ describe("use/objectInstance.js", function () {
|
|
|
329
447
|
object: {
|
|
330
448
|
name: "qwer",
|
|
331
449
|
},
|
|
450
|
+
pkKey: "id",
|
|
332
451
|
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
333
452
|
});
|
|
334
453
|
expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
|
|
@@ -341,7 +460,8 @@ describe("use/objectInstance.js", function () {
|
|
|
341
460
|
const objectInstance = useObjectInstance({
|
|
342
461
|
props: {
|
|
343
462
|
crudArgs: { stream: "test_stream" },
|
|
344
|
-
id,
|
|
463
|
+
pk: id,
|
|
464
|
+
pkKey: "id",
|
|
345
465
|
retrieveArgs,
|
|
346
466
|
},
|
|
347
467
|
});
|
|
@@ -375,6 +495,7 @@ describe("use/objectInstance.js", function () {
|
|
|
375
495
|
crudArgs: {
|
|
376
496
|
stream: "test_stream",
|
|
377
497
|
},
|
|
498
|
+
pkKey: "id",
|
|
378
499
|
object: {
|
|
379
500
|
name: "qwer",
|
|
380
501
|
},
|
|
@@ -384,13 +505,119 @@ describe("use/objectInstance.js", function () {
|
|
|
384
505
|
const returnValue = await oiCreateResolve;
|
|
385
506
|
expect(returnValue).toBe(true);
|
|
386
507
|
});
|
|
508
|
+
it("success with non-standard pk", async function () {
|
|
509
|
+
const id = ref(1);
|
|
510
|
+
const retrieveArgs = reactive({ fields });
|
|
511
|
+
const objectInstance = useObjectInstance({
|
|
512
|
+
props: {
|
|
513
|
+
crudArgs: { stream: "test_stream" },
|
|
514
|
+
pk: id,
|
|
515
|
+
pkKey: "unique",
|
|
516
|
+
retrieveArgs,
|
|
517
|
+
},
|
|
518
|
+
});
|
|
519
|
+
objectInstance.state.crud.create = vi.fn();
|
|
520
|
+
let crudCreateResolve;
|
|
521
|
+
const crudCreatePromise = new Promise((resolve) => {
|
|
522
|
+
crudCreateResolve = resolve;
|
|
523
|
+
});
|
|
524
|
+
objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
|
|
525
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
526
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
527
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
528
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
529
|
+
const oiCreateResolve = objectInstance.create({
|
|
530
|
+
object: {
|
|
531
|
+
name: "qwer",
|
|
532
|
+
},
|
|
533
|
+
fields,
|
|
534
|
+
});
|
|
535
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
536
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
537
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
538
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
539
|
+
await nextTick();
|
|
540
|
+
// @ts-ignore - crudCreateResolve is set in the promise, so it will be defined
|
|
541
|
+
crudCreateResolve(crudCreateResolvedNonStandardPK);
|
|
542
|
+
await flushPromises();
|
|
543
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
544
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
545
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
546
|
+
expect({ ...objectInstance.state.object }).toEqual(crudCreateResolvedNonStandardPK);
|
|
547
|
+
expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
|
|
548
|
+
crudArgs: {
|
|
549
|
+
stream: "test_stream",
|
|
550
|
+
},
|
|
551
|
+
object: {
|
|
552
|
+
name: "qwer",
|
|
553
|
+
},
|
|
554
|
+
pkKey: "unique",
|
|
555
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
556
|
+
});
|
|
557
|
+
expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
|
|
558
|
+
await nextTick();
|
|
559
|
+
await expect(oiCreateResolve).resolves.toBe(true);
|
|
560
|
+
});
|
|
387
561
|
it("errored", async function () {
|
|
388
562
|
const id = ref(undefined);
|
|
389
563
|
const retrieveArgs = reactive({ fields });
|
|
390
564
|
const objectInstance = useObjectInstance({
|
|
391
565
|
props: {
|
|
392
566
|
crudArgs: { stream: "test_stream" },
|
|
393
|
-
id,
|
|
567
|
+
pk: id,
|
|
568
|
+
pkKey: "id",
|
|
569
|
+
retrieveArgs,
|
|
570
|
+
},
|
|
571
|
+
});
|
|
572
|
+
objectInstance.state.crud.create = vi.fn();
|
|
573
|
+
let crudCreateReject;
|
|
574
|
+
const crudCreatePromise = new Promise((resolve, reject) => {
|
|
575
|
+
crudCreateReject = reject;
|
|
576
|
+
});
|
|
577
|
+
objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
|
|
578
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
579
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
580
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
581
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
582
|
+
const oiCreateResolve = objectInstance.create({
|
|
583
|
+
object: {
|
|
584
|
+
name: "qwer",
|
|
585
|
+
},
|
|
586
|
+
fields,
|
|
587
|
+
});
|
|
588
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
589
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
590
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
591
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
592
|
+
// @ts-ignore - crudCreateReject is set in the promise, so it will be defined
|
|
593
|
+
crudCreateReject(crudCreateRejected);
|
|
594
|
+
await flushPromises();
|
|
595
|
+
expect(objectInstance.state.error).toEqual(crudCreateRejected);
|
|
596
|
+
expect(objectInstance.state.errored).toBe(true);
|
|
597
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
598
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
599
|
+
expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
|
|
600
|
+
crudArgs: {
|
|
601
|
+
stream: "test_stream",
|
|
602
|
+
},
|
|
603
|
+
pkKey: "id",
|
|
604
|
+
object: {
|
|
605
|
+
name: "qwer",
|
|
606
|
+
},
|
|
607
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
608
|
+
});
|
|
609
|
+
expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
|
|
610
|
+
const returnValue = await oiCreateResolve;
|
|
611
|
+
expect(returnValue).toBe(false);
|
|
612
|
+
});
|
|
613
|
+
it("errored with non-matching pkKey", async function () {
|
|
614
|
+
const id = ref(undefined);
|
|
615
|
+
const retrieveArgs = reactive({ fields });
|
|
616
|
+
const objectInstance = useObjectInstance({
|
|
617
|
+
props: {
|
|
618
|
+
crudArgs: { stream: "test_stream" },
|
|
619
|
+
pk: id,
|
|
620
|
+
pkKey: "pk",
|
|
394
621
|
retrieveArgs,
|
|
395
622
|
},
|
|
396
623
|
});
|
|
@@ -425,6 +652,7 @@ describe("use/objectInstance.js", function () {
|
|
|
425
652
|
crudArgs: {
|
|
426
653
|
stream: "test_stream",
|
|
427
654
|
},
|
|
655
|
+
pkKey: "pk",
|
|
428
656
|
object: {
|
|
429
657
|
name: "qwer",
|
|
430
658
|
},
|
|
@@ -440,7 +668,8 @@ describe("use/objectInstance.js", function () {
|
|
|
440
668
|
const objectInstance = useObjectInstance({
|
|
441
669
|
props: {
|
|
442
670
|
crudArgs: { stream: "test_stream" },
|
|
443
|
-
id,
|
|
671
|
+
pk: id,
|
|
672
|
+
pkKey: "id",
|
|
444
673
|
retrieveArgs,
|
|
445
674
|
},
|
|
446
675
|
});
|
|
@@ -467,6 +696,7 @@ describe("use/objectInstance.js", function () {
|
|
|
467
696
|
crudArgs: {
|
|
468
697
|
stream: "test_stream",
|
|
469
698
|
},
|
|
699
|
+
pkKey: "id",
|
|
470
700
|
object: {
|
|
471
701
|
name: "qwer",
|
|
472
702
|
},
|
|
@@ -486,7 +716,8 @@ describe("use/objectInstance.js", function () {
|
|
|
486
716
|
const objectInstance = useObjectInstance({
|
|
487
717
|
props: {
|
|
488
718
|
crudArgs: { stream: "test_stream" },
|
|
489
|
-
id,
|
|
719
|
+
pk: id,
|
|
720
|
+
pkKey: "id",
|
|
490
721
|
retrieveArgs,
|
|
491
722
|
},
|
|
492
723
|
});
|
|
@@ -524,6 +755,7 @@ describe("use/objectInstance.js", function () {
|
|
|
524
755
|
crudArgs: {
|
|
525
756
|
stream: "test_stream",
|
|
526
757
|
},
|
|
758
|
+
pkKey: "id",
|
|
527
759
|
object: {
|
|
528
760
|
id: 1,
|
|
529
761
|
name: "zxcv!",
|
|
@@ -538,7 +770,8 @@ describe("use/objectInstance.js", function () {
|
|
|
538
770
|
const objectInstance = useObjectInstance({
|
|
539
771
|
props: {
|
|
540
772
|
crudArgs: { stream: "test_stream" },
|
|
541
|
-
id,
|
|
773
|
+
pk: id,
|
|
774
|
+
pkKey: "id",
|
|
542
775
|
retrieveArgs,
|
|
543
776
|
},
|
|
544
777
|
});
|
|
@@ -574,6 +807,7 @@ describe("use/objectInstance.js", function () {
|
|
|
574
807
|
crudArgs: {
|
|
575
808
|
stream: "test_stream",
|
|
576
809
|
},
|
|
810
|
+
pkKey: "id",
|
|
577
811
|
object: {
|
|
578
812
|
id: 1,
|
|
579
813
|
name: "zxcv!",
|
|
@@ -582,13 +816,66 @@ describe("use/objectInstance.js", function () {
|
|
|
582
816
|
});
|
|
583
817
|
expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
|
|
584
818
|
});
|
|
819
|
+
it("success with non-standard pk", async function () {
|
|
820
|
+
const id = ref(1);
|
|
821
|
+
const retrieveArgs = reactive({ fields });
|
|
822
|
+
const objectInstance = useObjectInstance({
|
|
823
|
+
props: {
|
|
824
|
+
crudArgs: { stream: "test_stream" },
|
|
825
|
+
pk: id,
|
|
826
|
+
pkKey: "unique",
|
|
827
|
+
retrieveArgs,
|
|
828
|
+
},
|
|
829
|
+
});
|
|
830
|
+
let crudUpdateResolve;
|
|
831
|
+
const crudUpdatePromise = new Promise((resolve) => {
|
|
832
|
+
crudUpdateResolve = resolve;
|
|
833
|
+
});
|
|
834
|
+
objectInstance.state.crud.update = vi.fn();
|
|
835
|
+
objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
|
|
836
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
837
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
838
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
839
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
840
|
+
const oiUpdatePromise = objectInstance.update({
|
|
841
|
+
object: {
|
|
842
|
+
unique: 1,
|
|
843
|
+
name: "zxcv!",
|
|
844
|
+
},
|
|
845
|
+
});
|
|
846
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
847
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
848
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
849
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
850
|
+
// @ts-ignore - crudUpdateResolve is set in the promise, so it will be defined
|
|
851
|
+
crudUpdateResolve(crudUpdateResolvedWithNonStandardPk);
|
|
852
|
+
await flushPromises();
|
|
853
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
854
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
855
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
856
|
+
expect({ ...objectInstance.state.object }).toEqual(crudUpdateResolvedWithNonStandardPk);
|
|
857
|
+
await expect(oiUpdatePromise).resolves.toBe(true);
|
|
858
|
+
expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
|
|
859
|
+
crudArgs: {
|
|
860
|
+
stream: "test_stream",
|
|
861
|
+
},
|
|
862
|
+
pkKey: "unique",
|
|
863
|
+
object: {
|
|
864
|
+
unique: 1,
|
|
865
|
+
name: "zxcv!",
|
|
866
|
+
},
|
|
867
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
868
|
+
});
|
|
869
|
+
expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
|
|
870
|
+
});
|
|
585
871
|
it("errored", async function () {
|
|
586
872
|
const id = ref(1);
|
|
587
873
|
const retrieveArgs = reactive({ fields });
|
|
588
874
|
const objectInstance = useObjectInstance({
|
|
589
875
|
props: {
|
|
590
876
|
crudArgs: { stream: "test_stream" },
|
|
591
|
-
id,
|
|
877
|
+
pk: id,
|
|
878
|
+
pkKey: "id",
|
|
592
879
|
retrieveArgs,
|
|
593
880
|
},
|
|
594
881
|
});
|
|
@@ -624,6 +911,59 @@ describe("use/objectInstance.js", function () {
|
|
|
624
911
|
crudArgs: {
|
|
625
912
|
stream: "test_stream",
|
|
626
913
|
},
|
|
914
|
+
pkKey: "id",
|
|
915
|
+
object: {
|
|
916
|
+
id: 1,
|
|
917
|
+
name: "zxcv!",
|
|
918
|
+
},
|
|
919
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
920
|
+
});
|
|
921
|
+
expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
|
|
922
|
+
});
|
|
923
|
+
it("errored with non-matching pkKey", async function () {
|
|
924
|
+
const id = ref(1);
|
|
925
|
+
const retrieveArgs = reactive({ fields });
|
|
926
|
+
const objectInstance = useObjectInstance({
|
|
927
|
+
props: {
|
|
928
|
+
crudArgs: { stream: "test_stream" },
|
|
929
|
+
pk: id,
|
|
930
|
+
pkKey: "id",
|
|
931
|
+
retrieveArgs,
|
|
932
|
+
},
|
|
933
|
+
});
|
|
934
|
+
let crudUpdateReject;
|
|
935
|
+
const crudUpdatePromise = new Promise((resolve, reject) => {
|
|
936
|
+
crudUpdateReject = reject;
|
|
937
|
+
});
|
|
938
|
+
objectInstance.state.crud.update = vi.fn();
|
|
939
|
+
objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
|
|
940
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
941
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
942
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
943
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
944
|
+
const oiUpdatePromise = objectInstance.update({
|
|
945
|
+
object: {
|
|
946
|
+
id: 1,
|
|
947
|
+
name: "zxcv!",
|
|
948
|
+
},
|
|
949
|
+
});
|
|
950
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
951
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
952
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
953
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
954
|
+
// @ts-ignore - crudUpdateReject is set in the promise, so it will be defined
|
|
955
|
+
crudUpdateReject(crudUpdateRejected);
|
|
956
|
+
await flushPromises();
|
|
957
|
+
expect(objectInstance.state.error).toEqual(crudUpdateRejected);
|
|
958
|
+
expect(objectInstance.state.errored).toBe(true);
|
|
959
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
960
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
961
|
+
await expect(oiUpdatePromise).resolves.toBe(false);
|
|
962
|
+
expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
|
|
963
|
+
crudArgs: {
|
|
964
|
+
stream: "test_stream",
|
|
965
|
+
},
|
|
966
|
+
pkKey: "id",
|
|
627
967
|
object: {
|
|
628
968
|
id: 1,
|
|
629
969
|
name: "zxcv!",
|
|
@@ -638,7 +978,8 @@ describe("use/objectInstance.js", function () {
|
|
|
638
978
|
const objectInstance = useObjectInstance({
|
|
639
979
|
props: {
|
|
640
980
|
crudArgs: { stream: "test_stream" },
|
|
641
|
-
id,
|
|
981
|
+
pk: id,
|
|
982
|
+
pkKey: "id",
|
|
642
983
|
retrieveArgs,
|
|
643
984
|
},
|
|
644
985
|
});
|
|
@@ -671,6 +1012,7 @@ describe("use/objectInstance.js", function () {
|
|
|
671
1012
|
crudArgs: {
|
|
672
1013
|
stream: "test_stream",
|
|
673
1014
|
},
|
|
1015
|
+
pkKey: "id",
|
|
674
1016
|
object: {
|
|
675
1017
|
id: 1,
|
|
676
1018
|
name: "zxcv!",
|
|
@@ -687,7 +1029,8 @@ describe("use/objectInstance.js", function () {
|
|
|
687
1029
|
const objectInstance = useObjectInstance({
|
|
688
1030
|
props: {
|
|
689
1031
|
crudArgs: { stream: "test_stream" },
|
|
690
|
-
id,
|
|
1032
|
+
pk: id,
|
|
1033
|
+
pkKey: "id",
|
|
691
1034
|
retrieveArgs,
|
|
692
1035
|
},
|
|
693
1036
|
});
|
|
@@ -725,7 +1068,8 @@ describe("use/objectInstance.js", function () {
|
|
|
725
1068
|
crudArgs: {
|
|
726
1069
|
stream: "test_stream",
|
|
727
1070
|
},
|
|
728
|
-
|
|
1071
|
+
pk: 1,
|
|
1072
|
+
pkKey: "id",
|
|
729
1073
|
partialObject: {
|
|
730
1074
|
id: 1,
|
|
731
1075
|
name: "zxcv!",
|
|
@@ -734,13 +1078,69 @@ describe("use/objectInstance.js", function () {
|
|
|
734
1078
|
});
|
|
735
1079
|
expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
|
|
736
1080
|
});
|
|
1081
|
+
it("success with non-standard pk", async function () {
|
|
1082
|
+
const id = ref(1);
|
|
1083
|
+
const retrieveArgs = reactive({ fields });
|
|
1084
|
+
const objectInstance = useObjectInstance({
|
|
1085
|
+
props: {
|
|
1086
|
+
crudArgs: { stream: "test_stream" },
|
|
1087
|
+
pk: id,
|
|
1088
|
+
pkKey: "unique",
|
|
1089
|
+
retrieveArgs,
|
|
1090
|
+
},
|
|
1091
|
+
});
|
|
1092
|
+
let crudPatchResolve;
|
|
1093
|
+
const crudPatchPromise = new Promise((resolve) => {
|
|
1094
|
+
crudPatchResolve = resolve;
|
|
1095
|
+
});
|
|
1096
|
+
objectInstance.state.crud.patch = vi.fn();
|
|
1097
|
+
objectInstance.state.crud.patch.mockReturnValueOnce(crudPatchPromise);
|
|
1098
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1099
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1100
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
1101
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
1102
|
+
const oiPatchPromise = objectInstance.patch({
|
|
1103
|
+
partialObject: {
|
|
1104
|
+
unique: 1,
|
|
1105
|
+
name: "zxcv!",
|
|
1106
|
+
},
|
|
1107
|
+
});
|
|
1108
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1109
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1110
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
1111
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
1112
|
+
await nextTick();
|
|
1113
|
+
// @ts-ignore - crudPatchResolve is set in the promise, so it will be defined
|
|
1114
|
+
crudPatchResolve(crudPatchResolvedWithNonStandardPk);
|
|
1115
|
+
await flushPromises();
|
|
1116
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1117
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1118
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
1119
|
+
expect({ ...objectInstance.state.object }).toEqual(crudPatchResolvedWithNonStandardPk);
|
|
1120
|
+
await nextTick();
|
|
1121
|
+
await expect(oiPatchPromise).resolves.toBe(true);
|
|
1122
|
+
expect(objectInstance.state.crud.patch).toHaveBeenCalledWith({
|
|
1123
|
+
crudArgs: {
|
|
1124
|
+
stream: "test_stream",
|
|
1125
|
+
},
|
|
1126
|
+
pk: 1,
|
|
1127
|
+
pkKey: "unique",
|
|
1128
|
+
partialObject: {
|
|
1129
|
+
unique: 1,
|
|
1130
|
+
name: "zxcv!",
|
|
1131
|
+
},
|
|
1132
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
1133
|
+
});
|
|
1134
|
+
expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
|
|
1135
|
+
});
|
|
737
1136
|
it("errored", async function () {
|
|
738
1137
|
const id = ref(1);
|
|
739
1138
|
const retrieveArgs = reactive({ fields });
|
|
740
1139
|
const objectInstance = useObjectInstance({
|
|
741
1140
|
props: {
|
|
742
1141
|
crudArgs: { stream: "test_stream" },
|
|
743
|
-
id,
|
|
1142
|
+
pk: id,
|
|
1143
|
+
pkKey: "id",
|
|
744
1144
|
retrieveArgs,
|
|
745
1145
|
},
|
|
746
1146
|
});
|
|
@@ -776,7 +1176,8 @@ describe("use/objectInstance.js", function () {
|
|
|
776
1176
|
crudArgs: {
|
|
777
1177
|
stream: "test_stream",
|
|
778
1178
|
},
|
|
779
|
-
|
|
1179
|
+
pk: 1,
|
|
1180
|
+
pkKey: "id",
|
|
780
1181
|
partialObject: {
|
|
781
1182
|
id: 1,
|
|
782
1183
|
name: "zxcv!",
|
|
@@ -785,13 +1186,67 @@ describe("use/objectInstance.js", function () {
|
|
|
785
1186
|
});
|
|
786
1187
|
expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
|
|
787
1188
|
});
|
|
788
|
-
it("
|
|
1189
|
+
it("errored with non-matching pkKey", async function () {
|
|
789
1190
|
const id = ref(1);
|
|
790
1191
|
const retrieveArgs = reactive({ fields });
|
|
791
1192
|
const objectInstance = useObjectInstance({
|
|
792
1193
|
props: {
|
|
793
1194
|
crudArgs: { stream: "test_stream" },
|
|
794
|
-
id,
|
|
1195
|
+
pk: id,
|
|
1196
|
+
pkKey: "pk",
|
|
1197
|
+
retrieveArgs,
|
|
1198
|
+
},
|
|
1199
|
+
});
|
|
1200
|
+
let crudPatchReject;
|
|
1201
|
+
const crudPatchPromise = new Promise((resolve, reject) => {
|
|
1202
|
+
crudPatchReject = reject;
|
|
1203
|
+
});
|
|
1204
|
+
objectInstance.state.crud.patch = vi.fn();
|
|
1205
|
+
objectInstance.state.crud.patch.mockReturnValueOnce(crudPatchPromise);
|
|
1206
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1207
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1208
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
1209
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
1210
|
+
const oiPatchPromise = objectInstance.patch({
|
|
1211
|
+
partialObject: {
|
|
1212
|
+
id: 1,
|
|
1213
|
+
name: "zxcv!",
|
|
1214
|
+
},
|
|
1215
|
+
});
|
|
1216
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1217
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1218
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
1219
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
1220
|
+
// @ts-ignore - crudPatchReject is set in the promise, so it will be defined
|
|
1221
|
+
crudPatchReject(crudPatchRejected);
|
|
1222
|
+
await flushPromises();
|
|
1223
|
+
expect(objectInstance.state.error).toEqual(crudPatchRejected);
|
|
1224
|
+
expect(objectInstance.state.errored).toBe(true);
|
|
1225
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
1226
|
+
expect({ ...objectInstance.state.object }).toEqual({});
|
|
1227
|
+
await expect(oiPatchPromise).resolves.toBe(false);
|
|
1228
|
+
expect(objectInstance.state.crud.patch).toHaveBeenCalledWith({
|
|
1229
|
+
crudArgs: {
|
|
1230
|
+
stream: "test_stream",
|
|
1231
|
+
},
|
|
1232
|
+
pk: 1,
|
|
1233
|
+
pkKey: "pk",
|
|
1234
|
+
partialObject: {
|
|
1235
|
+
id: 1,
|
|
1236
|
+
name: "zxcv!",
|
|
1237
|
+
},
|
|
1238
|
+
retrieveArgs: { fields: ["id", "__str__", "name"] },
|
|
1239
|
+
});
|
|
1240
|
+
expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
|
|
1241
|
+
});
|
|
1242
|
+
it("already loading", async function () {
|
|
1243
|
+
const pk = ref(1);
|
|
1244
|
+
const retrieveArgs = reactive({ fields });
|
|
1245
|
+
const objectInstance = useObjectInstance({
|
|
1246
|
+
props: {
|
|
1247
|
+
crudArgs: { stream: "test_stream" },
|
|
1248
|
+
pk,
|
|
1249
|
+
pkKey: "id",
|
|
795
1250
|
retrieveArgs,
|
|
796
1251
|
},
|
|
797
1252
|
});
|
|
@@ -816,7 +1271,8 @@ describe("use/objectInstance.js", function () {
|
|
|
816
1271
|
crudArgs: {
|
|
817
1272
|
stream: "test_stream",
|
|
818
1273
|
},
|
|
819
|
-
|
|
1274
|
+
pk: 1,
|
|
1275
|
+
pkKey: "id",
|
|
820
1276
|
partialObject: {
|
|
821
1277
|
id: 1,
|
|
822
1278
|
name: "zxcv!",
|
|
@@ -828,16 +1284,17 @@ describe("use/objectInstance.js", function () {
|
|
|
828
1284
|
});
|
|
829
1285
|
describe("delete", function () {
|
|
830
1286
|
it("success", async function () {
|
|
831
|
-
const
|
|
1287
|
+
const pk = ref(1);
|
|
832
1288
|
const retrieveArgs = reactive({ fields });
|
|
833
1289
|
const objectInstance = useObjectInstance({
|
|
834
1290
|
props: {
|
|
835
1291
|
crudArgs: { stream: "test_stream" },
|
|
836
|
-
|
|
1292
|
+
pk,
|
|
1293
|
+
pkKey: "unique",
|
|
837
1294
|
retrieveArgs,
|
|
838
1295
|
},
|
|
839
1296
|
});
|
|
840
|
-
assignReactiveObject(objectInstance.state.object,
|
|
1297
|
+
assignReactiveObject(objectInstance.state.object, crudRetrieveResolvedNonStandardPrimaryKey);
|
|
841
1298
|
let deleteResolve;
|
|
842
1299
|
const deletePromise = new Promise((resolve) => {
|
|
843
1300
|
deleteResolve = resolve;
|
|
@@ -849,7 +1306,7 @@ describe("use/objectInstance.js", function () {
|
|
|
849
1306
|
expect(objectInstance.state.errored).toBe(false);
|
|
850
1307
|
expect(objectInstance.state.loading).toBeUndefined();
|
|
851
1308
|
expect(objectInstance.state.deleted).toBe(false);
|
|
852
|
-
expect({ ...objectInstance.state.object }).toEqual(
|
|
1309
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolvedNonStandardPrimaryKey);
|
|
853
1310
|
|
|
854
1311
|
const returnsPromise = objectInstance.delete();
|
|
855
1312
|
|
|
@@ -857,7 +1314,7 @@ describe("use/objectInstance.js", function () {
|
|
|
857
1314
|
expect(objectInstance.state.errored).toBe(false);
|
|
858
1315
|
expect(objectInstance.state.loading).toBe(true);
|
|
859
1316
|
expect(objectInstance.state.deleted).toBe(false);
|
|
860
|
-
expect({ ...objectInstance.state.object }).toEqual(
|
|
1317
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolvedNonStandardPrimaryKey);
|
|
861
1318
|
await nextTick();
|
|
862
1319
|
|
|
863
1320
|
// @ts-ignore - deleteResolve is set in the promise, so it will be defined
|
|
@@ -874,17 +1331,19 @@ describe("use/objectInstance.js", function () {
|
|
|
874
1331
|
await expect(returnsPromise).resolves.toBe(true);
|
|
875
1332
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
|
|
876
1333
|
crudArgs: { stream: "test_stream" },
|
|
877
|
-
|
|
1334
|
+
pk: 1,
|
|
1335
|
+
pkKey: "unique",
|
|
878
1336
|
});
|
|
879
1337
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
|
|
880
1338
|
});
|
|
881
1339
|
it("errored", async function () {
|
|
882
|
-
const
|
|
1340
|
+
const pk = ref(1);
|
|
883
1341
|
const retrieveArgs = reactive({ fields });
|
|
884
1342
|
const objectInstance = useObjectInstance({
|
|
885
1343
|
props: {
|
|
886
1344
|
crudArgs: { stream: "test_stream" },
|
|
887
|
-
|
|
1345
|
+
pk,
|
|
1346
|
+
pkKey: "id",
|
|
888
1347
|
retrieveArgs,
|
|
889
1348
|
},
|
|
890
1349
|
});
|
|
@@ -925,17 +1384,72 @@ describe("use/objectInstance.js", function () {
|
|
|
925
1384
|
await expect(returnsPromise).resolves.toBe(false);
|
|
926
1385
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
|
|
927
1386
|
crudArgs: { stream: "test_stream" },
|
|
928
|
-
|
|
1387
|
+
pk: 1,
|
|
1388
|
+
pkKey: "id",
|
|
1389
|
+
});
|
|
1390
|
+
expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
|
|
1391
|
+
});
|
|
1392
|
+
it("errored with non-matching pkKey", async function () {
|
|
1393
|
+
const pk = ref(1);
|
|
1394
|
+
const retrieveArgs = reactive({ fields });
|
|
1395
|
+
const objectInstance = useObjectInstance({
|
|
1396
|
+
props: {
|
|
1397
|
+
crudArgs: { stream: "test_stream" },
|
|
1398
|
+
pk,
|
|
1399
|
+
pkKey: "unique",
|
|
1400
|
+
retrieveArgs,
|
|
1401
|
+
},
|
|
1402
|
+
});
|
|
1403
|
+
assignReactiveObject(objectInstance.state.object, crudRetrieveResolved);
|
|
1404
|
+
let deleteReject;
|
|
1405
|
+
const deletePromise = new Promise((resolve, reject) => {
|
|
1406
|
+
deleteReject = reject;
|
|
1407
|
+
});
|
|
1408
|
+
objectInstance.state.crud.delete = vi.fn();
|
|
1409
|
+
objectInstance.state.crud.delete.mockReturnValueOnce(deletePromise);
|
|
1410
|
+
|
|
1411
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1412
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1413
|
+
expect(objectInstance.state.loading).toBeUndefined();
|
|
1414
|
+
expect(objectInstance.state.deleted).toBe(false);
|
|
1415
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
|
|
1416
|
+
|
|
1417
|
+
const returnsPromise = objectInstance.delete();
|
|
1418
|
+
|
|
1419
|
+
expectErrorToBeNull(objectInstance.state.error);
|
|
1420
|
+
expect(objectInstance.state.errored).toBe(false);
|
|
1421
|
+
expect(objectInstance.state.loading).toBe(true);
|
|
1422
|
+
expect(objectInstance.state.deleted).toBe(false);
|
|
1423
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
|
|
1424
|
+
await nextTick();
|
|
1425
|
+
|
|
1426
|
+
// @ts-ignore - deleteReject is set in the promise, so it will be defined
|
|
1427
|
+
deleteReject(crudDeleteRejected);
|
|
1428
|
+
await flushPromises();
|
|
1429
|
+
|
|
1430
|
+
expect(objectInstance.state.error).toEqual(crudDeleteRejected);
|
|
1431
|
+
expect(objectInstance.state.errored).toBe(true);
|
|
1432
|
+
expect(objectInstance.state.loading).toBe(false);
|
|
1433
|
+
expect(objectInstance.state.deleted).toBe(false);
|
|
1434
|
+
expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
|
|
1435
|
+
await nextTick();
|
|
1436
|
+
|
|
1437
|
+
await expect(returnsPromise).resolves.toBe(false);
|
|
1438
|
+
expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
|
|
1439
|
+
crudArgs: { stream: "test_stream" },
|
|
1440
|
+
pk: 1,
|
|
1441
|
+
pkKey: "unique",
|
|
929
1442
|
});
|
|
930
1443
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
|
|
931
1444
|
});
|
|
932
1445
|
it("already loading", async function () {
|
|
933
|
-
const
|
|
1446
|
+
const pk = ref(1);
|
|
934
1447
|
const retrieveArgs = reactive({ fields });
|
|
935
1448
|
const objectInstance = useObjectInstance({
|
|
936
1449
|
props: {
|
|
937
1450
|
crudArgs: { stream: "test_stream" },
|
|
938
|
-
|
|
1451
|
+
pk,
|
|
1452
|
+
pkKey: "id",
|
|
939
1453
|
retrieveArgs,
|
|
940
1454
|
},
|
|
941
1455
|
});
|
|
@@ -946,7 +1460,8 @@ describe("use/objectInstance.js", function () {
|
|
|
946
1460
|
await expect(() => objectInstance.delete()).rejects.toThrow(ObjectError);
|
|
947
1461
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
|
|
948
1462
|
crudArgs: { stream: "test_stream" },
|
|
949
|
-
|
|
1463
|
+
pk: 1,
|
|
1464
|
+
pkKey: "id",
|
|
950
1465
|
});
|
|
951
1466
|
expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
|
|
952
1467
|
});
|
|
@@ -955,7 +1470,8 @@ describe("use/objectInstance.js", function () {
|
|
|
955
1470
|
const objectInstanceA = useObjectInstance({
|
|
956
1471
|
props: {
|
|
957
1472
|
crudArgs: { stream: "test_streamA" },
|
|
958
|
-
|
|
1473
|
+
pk: 1,
|
|
1474
|
+
pkKey: "id",
|
|
959
1475
|
retrieveArgs: {
|
|
960
1476
|
fields,
|
|
961
1477
|
},
|
|
@@ -964,7 +1480,8 @@ describe("use/objectInstance.js", function () {
|
|
|
964
1480
|
const objectInstanceB = useObjectInstance({
|
|
965
1481
|
props: {
|
|
966
1482
|
crudArgs: { stream: "test_streamB" },
|
|
967
|
-
|
|
1483
|
+
pk: 2,
|
|
1484
|
+
pkKey: "id",
|
|
968
1485
|
retrieveArgs: {
|
|
969
1486
|
fields,
|
|
970
1487
|
},
|
|
@@ -974,7 +1491,8 @@ describe("use/objectInstance.js", function () {
|
|
|
974
1491
|
A: {
|
|
975
1492
|
props: {
|
|
976
1493
|
crudArgs: { stream: "test_streamA" },
|
|
977
|
-
|
|
1494
|
+
pk: 1,
|
|
1495
|
+
pkKey: "id",
|
|
978
1496
|
retrieveArgs: {
|
|
979
1497
|
fields,
|
|
980
1498
|
},
|
|
@@ -983,7 +1501,8 @@ describe("use/objectInstance.js", function () {
|
|
|
983
1501
|
B: {
|
|
984
1502
|
props: {
|
|
985
1503
|
crudArgs: { stream: "test_streamB" },
|
|
986
|
-
|
|
1504
|
+
pk: 2,
|
|
1505
|
+
pkKey: "id",
|
|
987
1506
|
retrieveArgs: {
|
|
988
1507
|
fields,
|
|
989
1508
|
},
|
|
@@ -993,4 +1512,14 @@ describe("use/objectInstance.js", function () {
|
|
|
993
1512
|
expect(inspect(objInstances.A)).toEqual(inspect(objectInstanceA));
|
|
994
1513
|
expect(inspect(objInstances.B)).toEqual(inspect(objectInstanceB));
|
|
995
1514
|
});
|
|
1515
|
+
it("useObjectInstance missing pkKey", async function () {
|
|
1516
|
+
const objectInstanceProps = {
|
|
1517
|
+
crudArgs: { stream: "test_streamA" },
|
|
1518
|
+
pk: 1,
|
|
1519
|
+
retrieveArgs: {
|
|
1520
|
+
fields,
|
|
1521
|
+
},
|
|
1522
|
+
};
|
|
1523
|
+
expect(() => useObjectInstance({ props: objectInstanceProps })).toThrow(ObjectError);
|
|
1524
|
+
});
|
|
996
1525
|
});
|