@arrai-innovations/reactive-helpers 18.0.0 → 18.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/package.json +20 -6
  2. package/types/config/listCrud.d.ts +153 -0
  3. package/types/config/listCrud.d.ts.map +1 -0
  4. package/types/config/objectCrud.d.ts +171 -0
  5. package/types/config/objectCrud.d.ts.map +1 -0
  6. package/types/index.d.ts +37 -0
  7. package/types/index.d.ts.map +1 -0
  8. package/types/tests/unit/config/listCrud.spec.d.ts +2 -0
  9. package/types/tests/unit/config/listCrud.spec.d.ts.map +1 -0
  10. package/types/tests/unit/config/objectCrud.spec.d.ts +2 -0
  11. package/types/tests/unit/config/objectCrud.spec.d.ts.map +1 -0
  12. package/types/tests/unit/crudPromise.d.ts +25 -0
  13. package/types/tests/unit/crudPromise.d.ts.map +1 -0
  14. package/types/tests/unit/expectHelpers.d.ts +2 -0
  15. package/types/tests/unit/expectHelpers.d.ts.map +1 -0
  16. package/types/tests/unit/mockOnUnmounted.d.ts +2 -0
  17. package/types/tests/unit/mockOnUnmounted.d.ts.map +1 -0
  18. package/types/tests/unit/poll.d.ts +2 -0
  19. package/types/tests/unit/poll.d.ts.map +1 -0
  20. package/types/tests/unit/use/cancellableIntent.spec.d.ts +2 -0
  21. package/types/tests/unit/use/cancellableIntent.spec.d.ts.map +1 -0
  22. package/types/tests/unit/use/listCalculated.spec.d.ts +2 -0
  23. package/types/tests/unit/use/listCalculated.spec.d.ts.map +1 -0
  24. package/types/tests/unit/use/listFilter.spec.d.ts +2 -0
  25. package/types/tests/unit/use/listFilter.spec.d.ts.map +1 -0
  26. package/types/tests/unit/use/listInstance.spec.d.ts +2 -0
  27. package/types/tests/unit/use/listInstance.spec.d.ts.map +1 -0
  28. package/types/tests/unit/use/listRelated.spec.d.ts +2 -0
  29. package/types/tests/unit/use/listRelated.spec.d.ts.map +1 -0
  30. package/types/tests/unit/use/listSearch.spec.d.ts +2 -0
  31. package/types/tests/unit/use/listSearch.spec.d.ts.map +1 -0
  32. package/types/tests/unit/use/listSort.spec.d.ts +2 -0
  33. package/types/tests/unit/use/listSort.spec.d.ts.map +1 -0
  34. package/types/tests/unit/use/listSubscription.spec.d.ts +2 -0
  35. package/types/tests/unit/use/listSubscription.spec.d.ts.map +1 -0
  36. package/types/tests/unit/use/loadingError.spec.d.ts +2 -0
  37. package/types/tests/unit/use/loadingError.spec.d.ts.map +1 -0
  38. package/types/tests/unit/use/objectInstance.spec.d.ts +2 -0
  39. package/types/tests/unit/use/objectInstance.spec.d.ts.map +1 -0
  40. package/types/tests/unit/use/objectSubscription.spec.d.ts +2 -0
  41. package/types/tests/unit/use/objectSubscription.spec.d.ts.map +1 -0
  42. package/types/tests/unit/use/proxyLoadingError.spec.d.ts +2 -0
  43. package/types/tests/unit/use/proxyLoadingError.spec.d.ts.map +1 -0
  44. package/types/tests/unit/use/search.spec.d.ts +2 -0
  45. package/types/tests/unit/use/search.spec.d.ts.map +1 -0
  46. package/types/tests/unit/utils/assignReactiveObject.spec.d.ts +2 -0
  47. package/types/tests/unit/utils/assignReactiveObject.spec.d.ts.map +1 -0
  48. package/types/tests/unit/utils/classes.spec.d.ts +2 -0
  49. package/types/tests/unit/utils/classes.spec.d.ts.map +1 -0
  50. package/types/tests/unit/utils/deleteKey.spec.d.ts +2 -0
  51. package/types/tests/unit/utils/deleteKey.spec.d.ts.map +1 -0
  52. package/types/tests/unit/utils/flattenPaths.spec.d.ts +2 -0
  53. package/types/tests/unit/utils/flattenPaths.spec.d.ts.map +1 -0
  54. package/types/tests/unit/utils/keyDiff.spec.d.ts +2 -0
  55. package/types/tests/unit/utils/keyDiff.spec.d.ts.map +1 -0
  56. package/types/tests/unit/utils/set.spec.d.ts +2 -0
  57. package/types/tests/unit/utils/set.spec.d.ts.map +1 -0
  58. package/types/tests/unit/utils/watches.spec.d.ts +2 -0
  59. package/types/tests/unit/utils/watches.spec.d.ts.map +1 -0
  60. package/types/use/cancellableIntent.d.ts +129 -0
  61. package/types/use/cancellableIntent.d.ts.map +1 -0
  62. package/types/use/combineClasses.d.ts +43 -0
  63. package/types/use/combineClasses.d.ts.map +1 -0
  64. package/types/use/list.d.ts +176 -0
  65. package/types/use/list.d.ts.map +1 -0
  66. package/types/use/listCalculated.d.ts +192 -0
  67. package/types/use/listCalculated.d.ts.map +1 -0
  68. package/types/use/listFilter.d.ts +203 -0
  69. package/types/use/listFilter.d.ts.map +1 -0
  70. package/types/use/listInstance.d.ts +357 -0
  71. package/types/use/listInstance.d.ts.map +1 -0
  72. package/types/use/listKeys.d.ts +15 -0
  73. package/types/use/listKeys.d.ts.map +1 -0
  74. package/types/use/listRelated.d.ts +239 -0
  75. package/types/use/listRelated.d.ts.map +1 -0
  76. package/types/use/listSearch.d.ts +298 -0
  77. package/types/use/listSearch.d.ts.map +1 -0
  78. package/types/use/listSort.d.ts +235 -0
  79. package/types/use/listSort.d.ts.map +1 -0
  80. package/types/use/listSubscription.d.ts +218 -0
  81. package/types/use/listSubscription.d.ts.map +1 -0
  82. package/types/use/loadingError.d.ts +81 -0
  83. package/types/use/loadingError.d.ts.map +1 -0
  84. package/types/use/object.d.ts +67 -0
  85. package/types/use/object.d.ts.map +1 -0
  86. package/types/use/objectCalculated.d.ts +215 -0
  87. package/types/use/objectCalculated.d.ts.map +1 -0
  88. package/types/use/objectInstance.d.ts +289 -0
  89. package/types/use/objectInstance.d.ts.map +1 -0
  90. package/types/use/objectRelated.d.ts +264 -0
  91. package/types/use/objectRelated.d.ts.map +1 -0
  92. package/types/use/objectSubscription.d.ts +249 -0
  93. package/types/use/objectSubscription.d.ts.map +1 -0
  94. package/types/use/paginatedListInstance.d.ts +51 -0
  95. package/types/use/paginatedListInstance.d.ts.map +1 -0
  96. package/types/use/proxyLoadingError.d.ts +36 -0
  97. package/types/use/proxyLoadingError.d.ts.map +1 -0
  98. package/types/use/search.d.ts +144 -0
  99. package/types/use/search.d.ts.map +1 -0
  100. package/types/use/watchesRunning.d.ts +63 -0
  101. package/types/use/watchesRunning.d.ts.map +1 -0
  102. package/types/utils/assignReactiveObject.d.ts +115 -0
  103. package/types/utils/assignReactiveObject.d.ts.map +1 -0
  104. package/types/utils/classes.d.ts +22 -0
  105. package/types/utils/classes.d.ts.map +1 -0
  106. package/types/utils/compact.d.ts +4 -0
  107. package/types/utils/compact.d.ts.map +1 -0
  108. package/types/utils/deleteKey.d.ts +16 -0
  109. package/types/utils/deleteKey.d.ts.map +1 -0
  110. package/types/utils/flattenPaths.d.ts +23 -0
  111. package/types/utils/flattenPaths.d.ts.map +1 -0
  112. package/types/utils/getFakePk.d.ts +13 -0
  113. package/types/utils/getFakePk.d.ts.map +1 -0
  114. package/types/utils/keepAliveTry.d.ts +15 -0
  115. package/types/utils/keepAliveTry.d.ts.map +1 -0
  116. package/types/utils/keyDiff.d.ts +63 -0
  117. package/types/utils/keyDiff.d.ts.map +1 -0
  118. package/types/utils/loadingCombine.d.ts +9 -0
  119. package/types/utils/loadingCombine.d.ts.map +1 -0
  120. package/types/utils/proxyRunning.d.ts +9 -0
  121. package/types/utils/proxyRunning.d.ts.map +1 -0
  122. package/types/utils/relatedCalculatedHelpers.d.ts +5 -0
  123. package/types/utils/relatedCalculatedHelpers.d.ts.map +1 -0
  124. package/types/utils/set.d.ts +7 -0
  125. package/types/utils/set.d.ts.map +1 -0
  126. package/types/utils/transformWalk.d.ts +2 -0
  127. package/types/utils/transformWalk.d.ts.map +1 -0
  128. package/types/utils/watches.d.ts +155 -0
  129. package/types/utils/watches.d.ts.map +1 -0
  130. package/use/loadingError.js +1 -1
  131. package/.circleci/config.yml +0 -88
  132. package/.commitlintrc.json +0 -25
  133. package/.editorconfig +0 -5
  134. package/.husky/commit-msg +0 -3
  135. package/.husky/pre-commit +0 -3
  136. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  137. package/.idea/encodings.xml +0 -6
  138. package/.idea/inspectionProfiles/Project_Default.xml +0 -7
  139. package/.idea/modules.xml +0 -8
  140. package/.idea/prettier.xml +0 -8
  141. package/.idea/reactive-helpers.iml +0 -15
  142. package/.prettierignore +0 -5
  143. package/.prettierrc.cjs +0 -5
  144. package/.vscode/extensions.json +0 -3
  145. package/docs/README.md +0 -45
  146. package/docs/config/listCrud.md +0 -422
  147. package/docs/config/objectCrud.md +0 -427
  148. package/docs/use/cancellableIntent.md +0 -165
  149. package/docs/use/combineClasses.md +0 -62
  150. package/docs/use/list.md +0 -361
  151. package/docs/use/listCalculated.md +0 -794
  152. package/docs/use/listFilter.md +0 -897
  153. package/docs/use/listInstance.md +0 -559
  154. package/docs/use/listKeys.md +0 -91
  155. package/docs/use/listRelated.md +0 -706
  156. package/docs/use/listSearch.md +0 -903
  157. package/docs/use/listSort.md +0 -1171
  158. package/docs/use/listSubscription.md +0 -393
  159. package/docs/use/loadingError.md +0 -115
  160. package/docs/use/object.md +0 -668
  161. package/docs/use/objectCalculated.md +0 -741
  162. package/docs/use/objectInstance.md +0 -685
  163. package/docs/use/objectRelated.md +0 -723
  164. package/docs/use/objectSubscription.md +0 -538
  165. package/docs/use/paginatedListInstance.md +0 -155
  166. package/docs/use/proxyLoadingError.md +0 -51
  167. package/docs/use/search.md +0 -321
  168. package/docs/use/watchesRunning.md +0 -84
  169. package/docs/utils/assignReactiveObject.md +0 -413
  170. package/docs/utils/classes.md +0 -139
  171. package/docs/utils/compact.md +0 -67
  172. package/docs/utils/deleteKey.md +0 -61
  173. package/docs/utils/flattenPaths.md +0 -53
  174. package/docs/utils/getFakePk.md +0 -39
  175. package/docs/utils/keepAliveTry.md +0 -59
  176. package/docs/utils/keyDiff.md +0 -117
  177. package/docs/utils/loadingCombine.md +0 -30
  178. package/docs/utils/proxyRunning.md +0 -39
  179. package/docs/utils/relatedCalculatedHelpers.md +0 -93
  180. package/docs/utils/set.md +0 -223
  181. package/docs/utils/transformWalk.md +0 -68
  182. package/docs/utils/watches.md +0 -489
  183. package/eslint.config.js +0 -125
  184. package/lint-staged.config.js +0 -10
  185. package/makeTypeDoc.sh +0 -25
  186. package/make_type_doc.js +0 -59
  187. package/tests/unit/config/listCrud.spec.js +0 -114
  188. package/tests/unit/config/objectCrud.spec.js +0 -160
  189. package/tests/unit/crudPromise.js +0 -40
  190. package/tests/unit/expectHelpers.js +0 -6
  191. package/tests/unit/mockOnUnmounted.js +0 -9
  192. package/tests/unit/poll.js +0 -50
  193. package/tests/unit/use/cancellableIntent.spec.js +0 -152
  194. package/tests/unit/use/listCalculated.spec.js +0 -135
  195. package/tests/unit/use/listFilter.spec.js +0 -484
  196. package/tests/unit/use/listInstance.spec.js +0 -1166
  197. package/tests/unit/use/listRelated.spec.js +0 -260
  198. package/tests/unit/use/listSearch.spec.js +0 -586
  199. package/tests/unit/use/listSort.spec.js +0 -418
  200. package/tests/unit/use/listSubscription.spec.js +0 -845
  201. package/tests/unit/use/loadingError.spec.js +0 -43
  202. package/tests/unit/use/objectInstance.spec.js +0 -1525
  203. package/tests/unit/use/objectSubscription.spec.js +0 -849
  204. package/tests/unit/use/proxyLoadingError.spec.js +0 -64
  205. package/tests/unit/use/search.spec.js +0 -248
  206. package/tests/unit/utils/assignReactiveObject.spec.js +0 -593
  207. package/tests/unit/utils/classes.spec.js +0 -427
  208. package/tests/unit/utils/deleteKey.spec.js +0 -265
  209. package/tests/unit/utils/flattenPaths.spec.js +0 -126
  210. package/tests/unit/utils/keyDiff.spec.js +0 -110
  211. package/tests/unit/utils/set.spec.js +0 -81
  212. package/tests/unit/utils/watches.spec.js +0 -276
  213. package/tsconfig.json +0 -19
  214. package/typedoc-local-plugins/customize-output.js +0 -13
  215. package/typedoc.json +0 -11
  216. package/vitest.config.js +0 -11
@@ -1,1525 +0,0 @@
1
- import { assignReactiveObject } from "../../../utils/assignReactiveObject.js";
2
- import { expectErrorToBeNull } from "../expectHelpers.js";
3
- import flushPromises from "flush-promises";
4
- import { nextTick, reactive, ref } from "vue";
5
- import { deepUnref } from "vue-deepunref";
6
-
7
- afterAll(() => {
8
- vi.restoreAllMocks();
9
- });
10
-
11
- describe("use/objectInstance.js", function () {
12
- let useObjectInstance, ObjectError, useObjectInstances;
13
- beforeAll(async () => {
14
- const imported = await import("../../../use/objectInstance.js");
15
- useObjectInstance = imported.useObjectInstance;
16
- ObjectError = imported.ObjectError;
17
- useObjectInstances = imported.useObjectInstances;
18
- });
19
- afterEach(function () {
20
- vi.resetAllMocks();
21
- });
22
- const crudRetrieveResolved = {
23
- id: 1,
24
- __str__: "asdf",
25
- name: "zxcv",
26
- };
27
- const crudRetrieveResolvedNonStandardPrimaryKey = {
28
- unique: 1,
29
- __str__: "test",
30
- name: "test",
31
- };
32
- const crudRetrieveRejected = {
33
- errors: ["Not found"],
34
- data: null,
35
- action: "retrieve",
36
- response_status: 404,
37
- request_id: "60799141-959a-4ff7-80bc-1ad6b805a8fd",
38
- };
39
- const crudCreateResolved = {
40
- id: 1,
41
- __str__: "tset",
42
- name: "tset",
43
- };
44
- const crudCreateResolvedNonStandardPK = {
45
- unique: 1,
46
- __str__: "tset",
47
- name: "tset",
48
- };
49
- const crudCreateRejected = {
50
- errors: [
51
- {
52
- name: ["Test object with this name already exists."],
53
- },
54
- ],
55
- data: null,
56
- action: "create",
57
- response_status: 400,
58
- request_id: "60799141-959a-4ff7-80bc-1ad6b805a8fd",
59
- };
60
- const crudUpdateResolved = {
61
- id: 1,
62
- __str__: "asdf!",
63
- name: "zxcv!",
64
- };
65
- const crudUpdateResolvedWithNonStandardPk = {
66
- unique: 1,
67
- __str__: "asdf!",
68
- name: "zxcv!",
69
- };
70
- const crudUpdateRejected = {
71
- errors: [
72
- {
73
- name: ["Test object with this name already exists."],
74
- },
75
- ],
76
- data: null,
77
- action: "update",
78
- response_status: 400,
79
- request_id: "60799141-959a-4ff7-80bc-1ad6b805a8fd",
80
- };
81
- const crudPatchResolved = {
82
- id: 1,
83
- __str__: "asdf!",
84
- name: "zxcv!",
85
- };
86
- const crudPatchResolvedWithNonStandardPk = {
87
- unique: 1,
88
- __str__: "asdf!",
89
- name: "zxcv!",
90
- };
91
- const crudPatchRejected = {
92
- errors: [
93
- {
94
- name: ["Test object with this name already exists."],
95
- },
96
- ],
97
- data: null,
98
- action: "patch",
99
- response_status: 400,
100
- request_id: "60799141-959a-4ff7-80bc-1ad6b805a8fd",
101
- };
102
- const crudDeleteResolved = {
103
- errors: [],
104
- data: null,
105
- action: "delete",
106
- response_status: 204,
107
- request_id: "454619de-6687-4664-ad2a-67cdb393eb70",
108
- };
109
- const crudDeleteRejected = {
110
- errors: ["You cannot delete this object at this time."],
111
- data: null,
112
- action: "delete",
113
- response_status: 400,
114
- request_id: "454619de-6687-4664-ad2a-67cdb393eb70",
115
- };
116
- const fields = ["id", "__str__", "name"];
117
- describe("retrieve", function () {
118
- it("success", async function () {
119
- const id = ref(1);
120
- const retrieveArgs = reactive({ fields });
121
- const objectInstance = useObjectInstance({
122
- props: {
123
- crudArgs: { stream: "test_stream" },
124
- pk: id,
125
- pkKey: "id",
126
- retrieveArgs,
127
- },
128
- });
129
- objectInstance.state.crud.retrieve = vi.fn();
130
- let crudRetrieveResolve;
131
- const crudRetrievePromise = new Promise((resolve) => {
132
- crudRetrieveResolve = resolve;
133
- });
134
- objectInstance.state.crud.retrieve.mockReturnValueOnce(crudRetrievePromise);
135
-
136
- expectErrorToBeNull(objectInstance.state.error);
137
- expect(objectInstance.state.errored).toBe(false);
138
- expect(objectInstance.state.loading).toBeUndefined();
139
- expect({ ...objectInstance.state.object }).toEqual({});
140
- const oiRetrieveResolve = objectInstance.retrieve();
141
- expectErrorToBeNull(objectInstance.state.error);
142
- expect(objectInstance.state.errored).toBe(false);
143
- expect(objectInstance.state.loading).toBe(true);
144
- expect({ ...objectInstance.state.object }).toEqual({});
145
- await nextTick();
146
- // @ts-ignore - crudRetrieveResolve is set in the promise, so it will be defined
147
- crudRetrieveResolve(crudRetrieveResolved);
148
- await flushPromises();
149
- expectErrorToBeNull(objectInstance.state.error);
150
- expect(objectInstance.state.errored).toBe(false);
151
- expect(objectInstance.state.loading).toBe(false);
152
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
153
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
154
- crudArgs: { stream: "test_stream" },
155
- pk: 1,
156
- pkKey: "id",
157
- retrieveArgs: { fields: ["id", "__str__", "name"] },
158
- });
159
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
160
- await nextTick();
161
- await expect(oiRetrieveResolve).resolves.toBe(true);
162
- });
163
- it("success with non-standard pk", async function () {
164
- const id = ref(1);
165
- const retrieveArgs = reactive({ fields });
166
- const objectInstance = useObjectInstance({
167
- props: {
168
- crudArgs: { stream: "test_stream" },
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",
216
- retrieveArgs,
217
- },
218
- });
219
- objectInstance.state.crud.retrieve = vi.fn();
220
- let crudRetrieveResolve;
221
- const crudRetrievePromise = new Promise((resolve) => {
222
- crudRetrieveResolve = resolve;
223
- });
224
- objectInstance.state.crud.retrieve.mockReturnValueOnce(crudRetrievePromise);
225
- expectErrorToBeNull(objectInstance.state.error);
226
- expect(objectInstance.state.errored).toBe(false);
227
- expect(objectInstance.state.loading).toBeUndefined();
228
- expect({ ...objectInstance.state.object }).toEqual({});
229
- const oiRetrieveResolve = objectInstance.retrieve();
230
- expectErrorToBeNull(objectInstance.state.error);
231
- expect(objectInstance.state.errored).toBe(false);
232
- expect(objectInstance.state.loading).toBe(true);
233
- expect({ ...objectInstance.state.object }).toEqual({});
234
- // @ts-ignore - crudRetrieveResolve is set in the promise, so it will be defined
235
- crudRetrieveResolve(crudRetrieveResolved);
236
- await flushPromises();
237
- expectErrorToBeNull(objectInstance.state.error);
238
- expect(objectInstance.state.errored).toBe(false);
239
- expect(objectInstance.state.loading).toBe(false);
240
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
241
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
242
- crudArgs: { stream: "test_stream" },
243
- pk: 1,
244
- pkKey: "id",
245
- retrieveArgs: { fields: ["id", "__str__", "name"] },
246
- });
247
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
248
- const returnValue = await oiRetrieveResolve;
249
- expect(returnValue).toBe(true);
250
- });
251
- it("errored", async function () {
252
- const pk = ref(1);
253
- const retrieveArgs = reactive({ fields });
254
- const objectInstance = useObjectInstance({
255
- props: {
256
- crudArgs: { stream: "test_stream" },
257
- pk,
258
- pkKey: "id",
259
- retrieveArgs,
260
- },
261
- });
262
- objectInstance.state.crud.retrieve = vi.fn();
263
- let crudRetrieveReject;
264
- const crudRetrievePromise = new Promise((resolve, reject) => {
265
- crudRetrieveReject = reject;
266
- });
267
- objectInstance.state.crud.retrieve.mockReturnValueOnce(crudRetrievePromise);
268
- expectErrorToBeNull(objectInstance.state.error);
269
- expect(objectInstance.state.errored).toBe(false);
270
- expect(objectInstance.state.loading).toBeUndefined();
271
- expect({ ...objectInstance.state.object }).toEqual({});
272
- const oiRetrieveResolve = objectInstance.retrieve();
273
- expectErrorToBeNull(objectInstance.state.error);
274
- expect(objectInstance.state.errored).toBe(false);
275
- expect(objectInstance.state.loading).toBe(true);
276
- expect({ ...objectInstance.state.object }).toEqual({});
277
- // @ts-ignore - crudRetrieveReject is set in the promise, so it will be defined
278
- crudRetrieveReject(crudRetrieveRejected);
279
- await flushPromises();
280
- expect(objectInstance.state.error).toEqual(crudRetrieveRejected);
281
- expect(objectInstance.state.errored).toBe(true);
282
- expect(objectInstance.state.loading).toBe(false);
283
- expect({ ...objectInstance.state.object }).toEqual({});
284
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
285
- crudArgs: { stream: "test_stream" },
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",
331
- retrieveArgs: { fields: ["id", "__str__", "name"] },
332
- });
333
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
334
- const returnValue = await oiRetrieveResolve;
335
- expect(returnValue).toBe(false);
336
- });
337
- it("already loading", async function () {
338
- const pk = ref(1);
339
- const retrieveArgs = reactive({ fields });
340
- const objectInstance = useObjectInstance({
341
- props: {
342
- crudArgs: { stream: "test_stream" },
343
- pk,
344
- pkKey: "id",
345
- retrieveArgs,
346
- },
347
- });
348
- objectInstance.state.crud.create = vi.fn();
349
- objectInstance.state.crud.create.mockImplementation(() => new Promise(() => {}));
350
- objectInstance.state.crud.retrieve = vi.fn();
351
- objectInstance.state.crud.retrieve.mockImplementation(() => new Promise(() => {}));
352
- expectErrorToBeNull(objectInstance.state.error);
353
- expect(objectInstance.state.errored).toBe(false);
354
- expect(objectInstance.state.loading).toBeUndefined();
355
- expect({ ...objectInstance.state.object }).toEqual({});
356
- objectInstance.create({
357
- fake: "object",
358
- });
359
- expectErrorToBeNull(objectInstance.state.error);
360
- expect(objectInstance.state.errored).toBe(false);
361
- expect(objectInstance.state.loading).toBe(true);
362
- await expect(() => objectInstance.retrieve()).rejects.toThrow(ObjectError);
363
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(0);
364
- expectErrorToBeNull(objectInstance.state.error);
365
- expect(objectInstance.state.errored).toBe(false);
366
- expect(objectInstance.state.loading).toBe(true);
367
- expect({ ...objectInstance.state.object }).toEqual({});
368
- });
369
- it("double retrieve gets the same promise", async function () {
370
- const pk = ref(1);
371
- const retrieveArgs = reactive({ fields });
372
- const objectInstance = useObjectInstance({
373
- props: {
374
- crudArgs: { stream: "test_stream" },
375
- pk,
376
- pkKey: "id",
377
- retrieveArgs,
378
- },
379
- });
380
- objectInstance.state.crud.retrieve = vi.fn();
381
- objectInstance.state.crud.retrieve.mockImplementation(() => new Promise(() => {}));
382
- expectErrorToBeNull(objectInstance.state.error);
383
- expect(objectInstance.state.errored).toBe(false);
384
- expect(objectInstance.state.loading).toBeUndefined();
385
- expect({ ...objectInstance.state.object }).toEqual({});
386
- const firstPromise = objectInstance.retrieve();
387
- const secondPromise = objectInstance.retrieve();
388
- // await expect(() => objectInstance.retrieve()).rejects.toThrow(ObjectError);
389
- expect(firstPromise).toBe(secondPromise);
390
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledWith({
391
- crudArgs: { stream: "test_stream" },
392
- pk: 1,
393
- pkKey: "id",
394
- retrieveArgs: { fields: ["id", "__str__", "name"] },
395
- });
396
- expect(objectInstance.state.crud.retrieve).toHaveBeenCalledTimes(1);
397
- expectErrorToBeNull(objectInstance.state.error);
398
- expect(objectInstance.state.errored).toBe(false);
399
- expect(objectInstance.state.loading).toBe(true);
400
- expect({ ...objectInstance.state.object }).toEqual({});
401
- });
402
- });
403
- describe("create", function () {
404
- it("success", async function () {
405
- const id = ref(1);
406
- const retrieveArgs = reactive({ fields });
407
- const objectInstance = useObjectInstance({
408
- props: {
409
- crudArgs: { stream: "test_stream" },
410
- pk: id,
411
- pkKey: "id",
412
- retrieveArgs,
413
- },
414
- });
415
- objectInstance.state.crud.create = vi.fn();
416
- let crudCreateResolve;
417
- const crudCreatePromise = new Promise((resolve) => {
418
- crudCreateResolve = resolve;
419
- });
420
- objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
421
- expectErrorToBeNull(objectInstance.state.error);
422
- expect(objectInstance.state.errored).toBe(false);
423
- expect(objectInstance.state.loading).toBeUndefined();
424
- expect({ ...objectInstance.state.object }).toEqual({});
425
- const oiCreateResolve = objectInstance.create({
426
- object: {
427
- name: "qwer",
428
- },
429
- fields,
430
- });
431
- expectErrorToBeNull(objectInstance.state.error);
432
- expect(objectInstance.state.errored).toBe(false);
433
- expect(objectInstance.state.loading).toBe(true);
434
- expect({ ...objectInstance.state.object }).toEqual({});
435
- await nextTick();
436
- // @ts-ignore - crudCreateResolve is set in the promise, so it will be defined
437
- crudCreateResolve(crudCreateResolved);
438
- await flushPromises();
439
- expectErrorToBeNull(objectInstance.state.error);
440
- expect(objectInstance.state.errored).toBe(false);
441
- expect(objectInstance.state.loading).toBe(false);
442
- expect({ ...objectInstance.state.object }).toEqual(crudCreateResolved);
443
- expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
444
- crudArgs: {
445
- stream: "test_stream",
446
- },
447
- object: {
448
- name: "qwer",
449
- },
450
- pkKey: "id",
451
- retrieveArgs: { fields: ["id", "__str__", "name"] },
452
- });
453
- expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
454
- await nextTick();
455
- await expect(oiCreateResolve).resolves.toBe(true);
456
- });
457
- it("success (retrieveArgs)", async function () {
458
- const id = ref(undefined);
459
- const retrieveArgs = reactive({ fields });
460
- const objectInstance = useObjectInstance({
461
- props: {
462
- crudArgs: { stream: "test_stream" },
463
- pk: id,
464
- pkKey: "id",
465
- retrieveArgs,
466
- },
467
- });
468
- objectInstance.state.crud.create = vi.fn();
469
- let crudCreateResolve;
470
- const crudCreatePromise = new Promise((resolve) => {
471
- crudCreateResolve = resolve;
472
- });
473
- objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
474
- expectErrorToBeNull(objectInstance.state.error);
475
- expect(objectInstance.state.errored).toBe(false);
476
- expect(objectInstance.state.loading).toBeUndefined();
477
- expect({ ...objectInstance.state.object }).toEqual({});
478
- const oiCreateResolve = objectInstance.create({
479
- object: {
480
- name: "qwer",
481
- },
482
- });
483
- expectErrorToBeNull(objectInstance.state.error);
484
- expect(objectInstance.state.errored).toBe(false);
485
- expect(objectInstance.state.loading).toBe(true);
486
- expect({ ...objectInstance.state.object }).toEqual({});
487
- // @ts-ignore - crudCreateResolve is set in the promise, so it will be defined
488
- crudCreateResolve(crudCreateResolved);
489
- await flushPromises();
490
- expectErrorToBeNull(objectInstance.state.error);
491
- expect(objectInstance.state.errored).toBe(false);
492
- expect(objectInstance.state.loading).toBe(false);
493
- expect({ ...objectInstance.state.object }).toEqual(crudCreateResolved);
494
- expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
495
- crudArgs: {
496
- stream: "test_stream",
497
- },
498
- pkKey: "id",
499
- object: {
500
- name: "qwer",
501
- },
502
- retrieveArgs: { fields: ["id", "__str__", "name"] },
503
- });
504
- expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
505
- const returnValue = await oiCreateResolve;
506
- expect(returnValue).toBe(true);
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
- });
561
- it("errored", async function () {
562
- const id = ref(undefined);
563
- const retrieveArgs = reactive({ fields });
564
- const objectInstance = useObjectInstance({
565
- props: {
566
- crudArgs: { stream: "test_stream" },
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",
621
- retrieveArgs,
622
- },
623
- });
624
- objectInstance.state.crud.create = vi.fn();
625
- let crudCreateReject;
626
- const crudCreatePromise = new Promise((resolve, reject) => {
627
- crudCreateReject = reject;
628
- });
629
- objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
630
- expectErrorToBeNull(objectInstance.state.error);
631
- expect(objectInstance.state.errored).toBe(false);
632
- expect(objectInstance.state.loading).toBeUndefined();
633
- expect({ ...objectInstance.state.object }).toEqual({});
634
- const oiCreateResolve = objectInstance.create({
635
- object: {
636
- name: "qwer",
637
- },
638
- fields,
639
- });
640
- expectErrorToBeNull(objectInstance.state.error);
641
- expect(objectInstance.state.errored).toBe(false);
642
- expect(objectInstance.state.loading).toBe(true);
643
- expect({ ...objectInstance.state.object }).toEqual({});
644
- // @ts-ignore - crudCreateReject is set in the promise, so it will be defined
645
- crudCreateReject(crudCreateRejected);
646
- await flushPromises();
647
- expect(objectInstance.state.error).toEqual(crudCreateRejected);
648
- expect(objectInstance.state.errored).toBe(true);
649
- expect(objectInstance.state.loading).toBe(false);
650
- expect({ ...objectInstance.state.object }).toEqual({});
651
- expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
652
- crudArgs: {
653
- stream: "test_stream",
654
- },
655
- pkKey: "pk",
656
- object: {
657
- name: "qwer",
658
- },
659
- retrieveArgs: { fields: ["id", "__str__", "name"] },
660
- });
661
- expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
662
- const returnValue = await oiCreateResolve;
663
- expect(returnValue).toBe(false);
664
- });
665
- it("already loading", async function () {
666
- const id = ref(1);
667
- const retrieveArgs = reactive({ fields });
668
- const objectInstance = useObjectInstance({
669
- props: {
670
- crudArgs: { stream: "test_stream" },
671
- pk: id,
672
- pkKey: "id",
673
- retrieveArgs,
674
- },
675
- });
676
- objectInstance.state.crud.create = vi.fn();
677
- const crudCreatePromise = new Promise(() => {});
678
- objectInstance.state.crud.create.mockReturnValueOnce(crudCreatePromise);
679
- expectErrorToBeNull(objectInstance.state.error);
680
- expect(objectInstance.state.errored).toBe(false);
681
- expect(objectInstance.state.loading).toBeUndefined();
682
- expect({ ...objectInstance.state.object }).toEqual({});
683
- objectInstance.create({
684
- object: {
685
- name: "qwer",
686
- },
687
- });
688
- await expect(() =>
689
- objectInstance.create({
690
- object: {
691
- name: "qwer",
692
- },
693
- })
694
- ).rejects.toThrow(ObjectError);
695
- expect(objectInstance.state.crud.create).toHaveBeenCalledWith({
696
- crudArgs: {
697
- stream: "test_stream",
698
- },
699
- pkKey: "id",
700
- object: {
701
- name: "qwer",
702
- },
703
- retrieveArgs: { fields: ["id", "__str__", "name"] },
704
- });
705
- expect(objectInstance.state.crud.create).toHaveBeenCalledTimes(1);
706
- expectErrorToBeNull(objectInstance.state.error);
707
- expect(objectInstance.state.errored).toBe(false);
708
- expect(objectInstance.state.loading).toBe(true);
709
- expect({ ...objectInstance.state.object }).toEqual({});
710
- });
711
- });
712
- describe("update", function () {
713
- it("success", async function () {
714
- const id = ref(1);
715
- const retrieveArgs = reactive({ fields });
716
- const objectInstance = useObjectInstance({
717
- props: {
718
- crudArgs: { stream: "test_stream" },
719
- pk: id,
720
- pkKey: "id",
721
- retrieveArgs,
722
- },
723
- });
724
- let crudUpdateResolve;
725
- const crudUpdatePromise = new Promise((resolve) => {
726
- crudUpdateResolve = resolve;
727
- });
728
- objectInstance.state.crud.update = vi.fn();
729
- objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
730
- expectErrorToBeNull(objectInstance.state.error);
731
- expect(objectInstance.state.errored).toBe(false);
732
- expect(objectInstance.state.loading).toBeUndefined();
733
- expect({ ...objectInstance.state.object }).toEqual({});
734
- const oiUpdatePromise = objectInstance.update({
735
- object: {
736
- id: 1,
737
- name: "zxcv!",
738
- },
739
- });
740
- expectErrorToBeNull(objectInstance.state.error);
741
- expect(objectInstance.state.errored).toBe(false);
742
- expect(objectInstance.state.loading).toBe(true);
743
- expect({ ...objectInstance.state.object }).toEqual({});
744
- await nextTick();
745
- // @ts-ignore - crudUpdateResolve is set in the promise, so it will be defined
746
- crudUpdateResolve(crudUpdateResolved);
747
- await flushPromises();
748
- expectErrorToBeNull(objectInstance.state.error);
749
- expect(objectInstance.state.errored).toBe(false);
750
- expect(objectInstance.state.loading).toBe(false);
751
- expect({ ...objectInstance.state.object }).toEqual(crudUpdateResolved);
752
- await nextTick();
753
- await expect(oiUpdatePromise).resolves.toBe(true);
754
- expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
755
- crudArgs: {
756
- stream: "test_stream",
757
- },
758
- pkKey: "id",
759
- object: {
760
- id: 1,
761
- name: "zxcv!",
762
- },
763
- retrieveArgs: { fields: ["id", "__str__", "name"] },
764
- });
765
- expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
766
- });
767
- it("success (retrieveArgs)", async function () {
768
- const id = ref(1);
769
- const retrieveArgs = reactive({ fields });
770
- const objectInstance = useObjectInstance({
771
- props: {
772
- crudArgs: { stream: "test_stream" },
773
- pk: id,
774
- pkKey: "id",
775
- retrieveArgs,
776
- },
777
- });
778
- let crudUpdateResolve;
779
- const crudUpdatePromise = new Promise((resolve) => {
780
- crudUpdateResolve = resolve;
781
- });
782
- objectInstance.state.crud.update = vi.fn();
783
- objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
784
- expectErrorToBeNull(objectInstance.state.error);
785
- expect(objectInstance.state.errored).toBe(false);
786
- expect(objectInstance.state.loading).toBeUndefined();
787
- expect({ ...objectInstance.state.object }).toEqual({});
788
- const oiUpdatePromise = objectInstance.update({
789
- object: {
790
- id: 1,
791
- name: "zxcv!",
792
- },
793
- });
794
- expectErrorToBeNull(objectInstance.state.error);
795
- expect(objectInstance.state.errored).toBe(false);
796
- expect(objectInstance.state.loading).toBe(true);
797
- expect({ ...objectInstance.state.object }).toEqual({});
798
- // @ts-ignore - crudUpdateResolve is set in the promise, so it will be defined
799
- crudUpdateResolve(crudUpdateResolved);
800
- await flushPromises();
801
- expectErrorToBeNull(objectInstance.state.error);
802
- expect(objectInstance.state.errored).toBe(false);
803
- expect(objectInstance.state.loading).toBe(false);
804
- expect({ ...objectInstance.state.object }).toEqual(crudUpdateResolved);
805
- await expect(oiUpdatePromise).resolves.toBe(true);
806
- expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
807
- crudArgs: {
808
- stream: "test_stream",
809
- },
810
- pkKey: "id",
811
- object: {
812
- id: 1,
813
- name: "zxcv!",
814
- },
815
- retrieveArgs: { fields: ["id", "__str__", "name"] },
816
- });
817
- expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
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
- });
871
- it("errored", async function () {
872
- const id = ref(1);
873
- const retrieveArgs = reactive({ fields });
874
- const objectInstance = useObjectInstance({
875
- props: {
876
- crudArgs: { stream: "test_stream" },
877
- pk: id,
878
- pkKey: "id",
879
- retrieveArgs,
880
- },
881
- });
882
- let crudUpdateReject;
883
- const crudUpdatePromise = new Promise((resolve, reject) => {
884
- crudUpdateReject = reject;
885
- });
886
- objectInstance.state.crud.update = vi.fn();
887
- objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
888
- expectErrorToBeNull(objectInstance.state.error);
889
- expect(objectInstance.state.errored).toBe(false);
890
- expect(objectInstance.state.loading).toBeUndefined();
891
- expect({ ...objectInstance.state.object }).toEqual({});
892
- const oiUpdatePromise = objectInstance.update({
893
- object: {
894
- id: 1,
895
- name: "zxcv!",
896
- },
897
- });
898
- expectErrorToBeNull(objectInstance.state.error);
899
- expect(objectInstance.state.errored).toBe(false);
900
- expect(objectInstance.state.loading).toBe(true);
901
- expect({ ...objectInstance.state.object }).toEqual({});
902
- // @ts-ignore - crudUpdateReject is set in the promise, so it will be defined
903
- crudUpdateReject(crudUpdateRejected);
904
- await flushPromises();
905
- expect(objectInstance.state.error).toEqual(crudUpdateRejected);
906
- expect(objectInstance.state.errored).toBe(true);
907
- expect(objectInstance.state.loading).toBe(false);
908
- expect({ ...objectInstance.state.object }).toEqual({});
909
- await expect(oiUpdatePromise).resolves.toBe(false);
910
- expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
911
- crudArgs: {
912
- stream: "test_stream",
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",
967
- object: {
968
- id: 1,
969
- name: "zxcv!",
970
- },
971
- retrieveArgs: { fields: ["id", "__str__", "name"] },
972
- });
973
- expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
974
- });
975
- it("already loading", async function () {
976
- const id = ref(1);
977
- const retrieveArgs = reactive({ fields });
978
- const objectInstance = useObjectInstance({
979
- props: {
980
- crudArgs: { stream: "test_stream" },
981
- pk: id,
982
- pkKey: "id",
983
- retrieveArgs,
984
- },
985
- });
986
- const crudUpdatePromise = new Promise(() => {});
987
- objectInstance.state.crud.update = vi.fn();
988
- objectInstance.state.crud.update.mockReturnValueOnce(crudUpdatePromise);
989
- expectErrorToBeNull(objectInstance.state.error);
990
- expect(objectInstance.state.errored).toBe(false);
991
- expect(objectInstance.state.loading).toBeUndefined();
992
- expect({ ...objectInstance.state.object }).toEqual({});
993
- objectInstance.update({
994
- object: {
995
- id: 1,
996
- name: "zxcv!",
997
- },
998
- });
999
- await expect(() =>
1000
- objectInstance.update({
1001
- object: {
1002
- id: 1,
1003
- name: "zxcv!",
1004
- },
1005
- })
1006
- ).rejects.toThrow(ObjectError);
1007
- expectErrorToBeNull(objectInstance.state.error);
1008
- expect(objectInstance.state.errored).toBe(false);
1009
- expect(objectInstance.state.loading).toBe(true);
1010
- expect({ ...objectInstance.state.object }).toEqual({});
1011
- expect(objectInstance.state.crud.update).toHaveBeenCalledWith({
1012
- crudArgs: {
1013
- stream: "test_stream",
1014
- },
1015
- pkKey: "id",
1016
- object: {
1017
- id: 1,
1018
- name: "zxcv!",
1019
- },
1020
- retrieveArgs: { fields: ["id", "__str__", "name"] },
1021
- });
1022
- expect(objectInstance.state.crud.update).toHaveBeenCalledTimes(1);
1023
- });
1024
- });
1025
- describe("patch", function () {
1026
- it("success", async function () {
1027
- const id = ref(1);
1028
- const retrieveArgs = reactive({ fields });
1029
- const objectInstance = useObjectInstance({
1030
- props: {
1031
- crudArgs: { stream: "test_stream" },
1032
- pk: id,
1033
- pkKey: "id",
1034
- retrieveArgs,
1035
- },
1036
- });
1037
- let crudPatchResolve;
1038
- const crudPatchPromise = new Promise((resolve) => {
1039
- crudPatchResolve = resolve;
1040
- });
1041
- objectInstance.state.crud.patch = vi.fn();
1042
- objectInstance.state.crud.patch.mockReturnValueOnce(crudPatchPromise);
1043
- expectErrorToBeNull(objectInstance.state.error);
1044
- expect(objectInstance.state.errored).toBe(false);
1045
- expect(objectInstance.state.loading).toBeUndefined();
1046
- expect({ ...objectInstance.state.object }).toEqual({});
1047
- const oiPatchPromise = objectInstance.patch({
1048
- partialObject: {
1049
- id: 1,
1050
- name: "zxcv!",
1051
- },
1052
- });
1053
- expectErrorToBeNull(objectInstance.state.error);
1054
- expect(objectInstance.state.errored).toBe(false);
1055
- expect(objectInstance.state.loading).toBe(true);
1056
- expect({ ...objectInstance.state.object }).toEqual({});
1057
- await nextTick();
1058
- // @ts-ignore - crudPatchResolve is set in the promise, so it will be defined
1059
- crudPatchResolve(crudPatchResolved);
1060
- await flushPromises();
1061
- expectErrorToBeNull(objectInstance.state.error);
1062
- expect(objectInstance.state.errored).toBe(false);
1063
- expect(objectInstance.state.loading).toBe(false);
1064
- expect({ ...objectInstance.state.object }).toEqual(crudPatchResolved);
1065
- await nextTick();
1066
- await expect(oiPatchPromise).resolves.toBe(true);
1067
- expect(objectInstance.state.crud.patch).toHaveBeenCalledWith({
1068
- crudArgs: {
1069
- stream: "test_stream",
1070
- },
1071
- pk: 1,
1072
- pkKey: "id",
1073
- partialObject: {
1074
- id: 1,
1075
- name: "zxcv!",
1076
- },
1077
- retrieveArgs: { fields: ["id", "__str__", "name"] },
1078
- });
1079
- expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
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
- });
1136
- it("errored", async function () {
1137
- const id = ref(1);
1138
- const retrieveArgs = reactive({ fields });
1139
- const objectInstance = useObjectInstance({
1140
- props: {
1141
- crudArgs: { stream: "test_stream" },
1142
- pk: id,
1143
- pkKey: "id",
1144
- retrieveArgs,
1145
- },
1146
- });
1147
- let crudPatchReject;
1148
- const crudPatchPromise = new Promise((resolve, reject) => {
1149
- crudPatchReject = reject;
1150
- });
1151
- objectInstance.state.crud.patch = vi.fn();
1152
- objectInstance.state.crud.patch.mockReturnValueOnce(crudPatchPromise);
1153
- expectErrorToBeNull(objectInstance.state.error);
1154
- expect(objectInstance.state.errored).toBe(false);
1155
- expect(objectInstance.state.loading).toBeUndefined();
1156
- expect({ ...objectInstance.state.object }).toEqual({});
1157
- const oiPatchPromise = objectInstance.patch({
1158
- partialObject: {
1159
- id: 1,
1160
- name: "zxcv!",
1161
- },
1162
- });
1163
- expectErrorToBeNull(objectInstance.state.error);
1164
- expect(objectInstance.state.errored).toBe(false);
1165
- expect(objectInstance.state.loading).toBe(true);
1166
- expect({ ...objectInstance.state.object }).toEqual({});
1167
- // @ts-ignore - crudPatchReject is set in the promise, so it will be defined
1168
- crudPatchReject(crudPatchRejected);
1169
- await flushPromises();
1170
- expect(objectInstance.state.error).toEqual(crudPatchRejected);
1171
- expect(objectInstance.state.errored).toBe(true);
1172
- expect(objectInstance.state.loading).toBe(false);
1173
- expect({ ...objectInstance.state.object }).toEqual({});
1174
- await expect(oiPatchPromise).resolves.toBe(false);
1175
- expect(objectInstance.state.crud.patch).toHaveBeenCalledWith({
1176
- crudArgs: {
1177
- stream: "test_stream",
1178
- },
1179
- pk: 1,
1180
- pkKey: "id",
1181
- partialObject: {
1182
- id: 1,
1183
- name: "zxcv!",
1184
- },
1185
- retrieveArgs: { fields: ["id", "__str__", "name"] },
1186
- });
1187
- expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
1188
- });
1189
- it("errored with non-matching pkKey", async function () {
1190
- const id = ref(1);
1191
- const retrieveArgs = reactive({ fields });
1192
- const objectInstance = useObjectInstance({
1193
- props: {
1194
- crudArgs: { stream: "test_stream" },
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",
1250
- retrieveArgs,
1251
- },
1252
- });
1253
- const crudPatchPromise = new Promise(() => {});
1254
- objectInstance.state.crud.patch = vi.fn();
1255
- objectInstance.state.crud.patch.mockReturnValueOnce(crudPatchPromise);
1256
- objectInstance.patch({
1257
- partialObject: {
1258
- id: 1,
1259
- name: "zxcv!",
1260
- },
1261
- });
1262
- await expect(() =>
1263
- objectInstance.patch({
1264
- partialObject: {
1265
- id: 1,
1266
- name: "zxcv!",
1267
- },
1268
- })
1269
- ).rejects.toThrow(ObjectError);
1270
- expect(objectInstance.state.crud.patch).toHaveBeenCalledWith({
1271
- crudArgs: {
1272
- stream: "test_stream",
1273
- },
1274
- pk: 1,
1275
- pkKey: "id",
1276
- partialObject: {
1277
- id: 1,
1278
- name: "zxcv!",
1279
- },
1280
- retrieveArgs: { fields: ["id", "__str__", "name"] },
1281
- });
1282
- expect(objectInstance.state.crud.patch).toHaveBeenCalledTimes(1);
1283
- });
1284
- });
1285
- describe("delete", function () {
1286
- it("success", async function () {
1287
- const pk = ref(1);
1288
- const retrieveArgs = reactive({ fields });
1289
- const objectInstance = useObjectInstance({
1290
- props: {
1291
- crudArgs: { stream: "test_stream" },
1292
- pk,
1293
- pkKey: "unique",
1294
- retrieveArgs,
1295
- },
1296
- });
1297
- assignReactiveObject(objectInstance.state.object, crudRetrieveResolvedNonStandardPrimaryKey);
1298
- let deleteResolve;
1299
- const deletePromise = new Promise((resolve) => {
1300
- deleteResolve = resolve;
1301
- });
1302
- objectInstance.state.crud.delete = vi.fn();
1303
- objectInstance.state.crud.delete.mockReturnValueOnce(deletePromise);
1304
-
1305
- expectErrorToBeNull(objectInstance.state.error);
1306
- expect(objectInstance.state.errored).toBe(false);
1307
- expect(objectInstance.state.loading).toBeUndefined();
1308
- expect(objectInstance.state.deleted).toBe(false);
1309
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolvedNonStandardPrimaryKey);
1310
-
1311
- const returnsPromise = objectInstance.delete();
1312
-
1313
- expectErrorToBeNull(objectInstance.state.error);
1314
- expect(objectInstance.state.errored).toBe(false);
1315
- expect(objectInstance.state.loading).toBe(true);
1316
- expect(objectInstance.state.deleted).toBe(false);
1317
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolvedNonStandardPrimaryKey);
1318
- await nextTick();
1319
-
1320
- // @ts-ignore - deleteResolve is set in the promise, so it will be defined
1321
- deleteResolve(crudDeleteResolved);
1322
- await flushPromises();
1323
-
1324
- expectErrorToBeNull(objectInstance.state.error);
1325
- expect(objectInstance.state.errored).toBe(false);
1326
- expect(objectInstance.state.loading).toBe(false);
1327
- expect(objectInstance.state.deleted).toBe(true);
1328
- expect({ ...objectInstance.state.object }).toEqual({});
1329
- await nextTick();
1330
-
1331
- await expect(returnsPromise).resolves.toBe(true);
1332
- expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
1333
- crudArgs: { stream: "test_stream" },
1334
- pk: 1,
1335
- pkKey: "unique",
1336
- });
1337
- expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
1338
- });
1339
- it("errored", async function () {
1340
- const pk = ref(1);
1341
- const retrieveArgs = reactive({ fields });
1342
- const objectInstance = useObjectInstance({
1343
- props: {
1344
- crudArgs: { stream: "test_stream" },
1345
- pk,
1346
- pkKey: "id",
1347
- retrieveArgs,
1348
- },
1349
- });
1350
- assignReactiveObject(objectInstance.state.object, crudRetrieveResolved);
1351
- let deleteReject;
1352
- const deletePromise = new Promise((resolve, reject) => {
1353
- deleteReject = reject;
1354
- });
1355
- objectInstance.state.crud.delete = vi.fn();
1356
- objectInstance.state.crud.delete.mockReturnValueOnce(deletePromise);
1357
-
1358
- expectErrorToBeNull(objectInstance.state.error);
1359
- expect(objectInstance.state.errored).toBe(false);
1360
- expect(objectInstance.state.loading).toBeUndefined();
1361
- expect(objectInstance.state.deleted).toBe(false);
1362
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
1363
-
1364
- const returnsPromise = objectInstance.delete();
1365
-
1366
- expectErrorToBeNull(objectInstance.state.error);
1367
- expect(objectInstance.state.errored).toBe(false);
1368
- expect(objectInstance.state.loading).toBe(true);
1369
- expect(objectInstance.state.deleted).toBe(false);
1370
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
1371
- await nextTick();
1372
-
1373
- // @ts-ignore - deleteReject is set in the promise, so it will be defined
1374
- deleteReject(crudDeleteRejected);
1375
- await flushPromises();
1376
-
1377
- expect(objectInstance.state.error).toEqual(crudDeleteRejected);
1378
- expect(objectInstance.state.errored).toBe(true);
1379
- expect(objectInstance.state.loading).toBe(false);
1380
- expect(objectInstance.state.deleted).toBe(false);
1381
- expect({ ...objectInstance.state.object }).toEqual(crudRetrieveResolved);
1382
- await nextTick();
1383
-
1384
- await expect(returnsPromise).resolves.toBe(false);
1385
- expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
1386
- crudArgs: { stream: "test_stream" },
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",
1442
- });
1443
- expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
1444
- });
1445
- it("already loading", async function () {
1446
- const pk = ref(1);
1447
- const retrieveArgs = reactive({ fields });
1448
- const objectInstance = useObjectInstance({
1449
- props: {
1450
- crudArgs: { stream: "test_stream" },
1451
- pk,
1452
- pkKey: "id",
1453
- retrieveArgs,
1454
- },
1455
- });
1456
- const deletePromise = new Promise(() => {});
1457
- objectInstance.state.crud.delete = vi.fn();
1458
- objectInstance.state.crud.delete.mockReturnValueOnce(deletePromise);
1459
- objectInstance.delete(1);
1460
- await expect(() => objectInstance.delete()).rejects.toThrow(ObjectError);
1461
- expect(objectInstance.state.crud.delete).toHaveBeenCalledWith({
1462
- crudArgs: { stream: "test_stream" },
1463
- pk: 1,
1464
- pkKey: "id",
1465
- });
1466
- expect(objectInstance.state.crud.delete).toHaveBeenCalledTimes(1);
1467
- });
1468
- });
1469
- it("useObjectSubscriptions", async function () {
1470
- const objectInstanceA = useObjectInstance({
1471
- props: {
1472
- crudArgs: { stream: "test_streamA" },
1473
- pk: 1,
1474
- pkKey: "id",
1475
- retrieveArgs: {
1476
- fields,
1477
- },
1478
- },
1479
- });
1480
- const objectInstanceB = useObjectInstance({
1481
- props: {
1482
- crudArgs: { stream: "test_streamB" },
1483
- pk: 2,
1484
- pkKey: "id",
1485
- retrieveArgs: {
1486
- fields,
1487
- },
1488
- },
1489
- });
1490
- const objInstances = useObjectInstances({
1491
- A: {
1492
- props: {
1493
- crudArgs: { stream: "test_streamA" },
1494
- pk: 1,
1495
- pkKey: "id",
1496
- retrieveArgs: {
1497
- fields,
1498
- },
1499
- },
1500
- },
1501
- B: {
1502
- props: {
1503
- crudArgs: { stream: "test_streamB" },
1504
- pk: 2,
1505
- pkKey: "id",
1506
- retrieveArgs: {
1507
- fields,
1508
- },
1509
- },
1510
- },
1511
- });
1512
- expect(deepUnref(objInstances.A.state)).toEqual(deepUnref(objectInstanceA.state));
1513
- expect(deepUnref(objInstances.B.state)).toEqual(deepUnref(objectInstanceB.state));
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
- });
1525
- });