dyo-tools 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/{dist/index.d.ts → index.d.ts} +1 -0
  2. package/{dist/index.d.ts.map → index.d.ts.map} +1 -1
  3. package/{dist/index.js → index.js} +1 -0
  4. package/package.json +6 -56
  5. package/.c8rc.json +0 -4
  6. package/.eslintignore +0 -2
  7. package/.eslintrc.json +0 -47
  8. package/Makefile +0 -34
  9. package/README.md +0 -0
  10. package/babel.config.js +0 -1
  11. package/docs/.nojekyll +0 -1
  12. package/docs/assets/highlight.css +0 -29
  13. package/docs/assets/main.js +0 -59
  14. package/docs/assets/search.js +0 -1
  15. package/docs/assets/style.css +0 -1414
  16. package/docs/index.html +0 -1
  17. package/integration/data/components/DTHero.ts +0 -42
  18. package/integration/data/components/DTHeroManager.ts +0 -11
  19. package/integration/data/components/DTHeroPlayZone.ts +0 -6
  20. package/integration/data/components/DTHeroPlayerHand.ts +0 -11
  21. package/integration/data/components/index.ts +0 -5
  22. package/integration/data/in/heroIn.helper.ts +0 -8
  23. package/integration/data/in/playerIn.helper.ts +0 -13
  24. package/integration/data/out/heroOut.helper.ts +0 -48
  25. package/integration/endings/synchronisation.ending.ts +0 -25
  26. package/integration/scenes/drawCard.scene.ts +0 -31
  27. package/integration/scenes/empty.scene.ts +0 -6
  28. package/integration/scenes/playCard.scene.ts +0 -23
  29. package/integration/scenes/playerLeave.scene.ts +0 -33
  30. package/integration/stages/baseDix.stage.ts +0 -137
  31. package/integration/stages/syncDix.stage.ts +0 -36
  32. package/integration/tests/scenario1.spec.ts +0 -55
  33. package/integration/types/index.ts +0 -24
  34. package/jest-integration.config.ts +0 -25
  35. package/jest.config.ts +0 -26
  36. package/src/constants.ts +0 -87
  37. package/src/core/DTAction.ts +0 -54
  38. package/src/core/DTBunch.ts +0 -531
  39. package/src/core/DTComponent.ts +0 -258
  40. package/src/core/DTComponentPhysical.ts +0 -88
  41. package/src/core/DTComponentWithMeta.ts +0 -98
  42. package/src/core/DTElement.ts +0 -111
  43. package/src/core/DTError.ts +0 -78
  44. package/src/core/DTManager.ts +0 -555
  45. package/src/core/DTMaster.ts +0 -366
  46. package/src/core/DTModule.ts +0 -96
  47. package/src/index.ts +0 -17
  48. package/src/libs/DYOFinder.ts +0 -175
  49. package/src/libs/dix/DIXModule.module.ts +0 -98
  50. package/src/libs/player/DTPlayer.element.ts +0 -9
  51. package/src/libs/player/DTPlayer.manager.ts +0 -70
  52. package/src/types/core.ts +0 -204
  53. package/src/types/index.ts +0 -2
  54. package/src/types/player.ts +0 -5
  55. package/test/core/DTAction.double.ts +0 -62
  56. package/test/core/DTAction.spec.ts +0 -68
  57. package/test/core/DTBunch.double.ts +0 -175
  58. package/test/core/DTBunch.spec.ts +0 -822
  59. package/test/core/DTComponent.double.ts +0 -179
  60. package/test/core/DTComponent.spec.ts +0 -297
  61. package/test/core/DTComponentPhysical.double.ts +0 -62
  62. package/test/core/DTComponentPhysical.spec.ts +0 -81
  63. package/test/core/DTComponentWithMeta.double.ts +0 -122
  64. package/test/core/DTComponentWithMeta.spec.ts +0 -129
  65. package/test/core/DTElement.double.ts +0 -142
  66. package/test/core/DTElement.spec.ts +0 -123
  67. package/test/core/DTError.double.ts +0 -57
  68. package/test/core/DTError.spec.ts +0 -78
  69. package/test/core/DTManager.double.ts +0 -149
  70. package/test/core/DTManager.spec.ts +0 -874
  71. package/test/core/DTMaster.double.ts +0 -117
  72. package/test/core/DTMaster.spec.ts +0 -537
  73. package/test/core/DTModule.double.ts +0 -67
  74. package/test/core/DTModule.spec.ts +0 -124
  75. package/test/core/copy.spec.ts +0 -222
  76. package/test/libs/DYOFinder.double.ts +0 -152
  77. package/test/libs/DYOFinder.spec.ts +0 -194
  78. package/test/libs/player/DTPlayer.element.double.ts +0 -55
  79. package/test/libs/player/DTPlayer.element.spec.ts +0 -28
  80. package/test/libs/player/DTPlayer.manager.double.ts +0 -92
  81. package/test/libs/player/DTPlayer.manager.spec.ts +0 -178
  82. package/tsconfig.dev.json +0 -19
  83. package/tsconfig.json +0 -18
  84. /package/{dist/constants.d.ts → constants.d.ts} +0 -0
  85. /package/{dist/constants.d.ts.map → constants.d.ts.map} +0 -0
  86. /package/{dist/constants.js → constants.js} +0 -0
  87. /package/{dist/constants.js.map → constants.js.map} +0 -0
  88. /package/{dist/core → core}/DTAction.d.ts +0 -0
  89. /package/{dist/core → core}/DTAction.d.ts.map +0 -0
  90. /package/{dist/core → core}/DTAction.js +0 -0
  91. /package/{dist/core → core}/DTAction.js.map +0 -0
  92. /package/{dist/core → core}/DTBunch.d.ts +0 -0
  93. /package/{dist/core → core}/DTBunch.d.ts.map +0 -0
  94. /package/{dist/core → core}/DTBunch.js +0 -0
  95. /package/{dist/core → core}/DTBunch.js.map +0 -0
  96. /package/{dist/core → core}/DTComponent.d.ts +0 -0
  97. /package/{dist/core → core}/DTComponent.d.ts.map +0 -0
  98. /package/{dist/core → core}/DTComponent.js +0 -0
  99. /package/{dist/core → core}/DTComponent.js.map +0 -0
  100. /package/{dist/core → core}/DTComponentPhysical.d.ts +0 -0
  101. /package/{dist/core → core}/DTComponentPhysical.d.ts.map +0 -0
  102. /package/{dist/core → core}/DTComponentPhysical.js +0 -0
  103. /package/{dist/core → core}/DTComponentPhysical.js.map +0 -0
  104. /package/{dist/core → core}/DTComponentWithMeta.d.ts +0 -0
  105. /package/{dist/core → core}/DTComponentWithMeta.d.ts.map +0 -0
  106. /package/{dist/core → core}/DTComponentWithMeta.js +0 -0
  107. /package/{dist/core → core}/DTComponentWithMeta.js.map +0 -0
  108. /package/{dist/core → core}/DTElement.d.ts +0 -0
  109. /package/{dist/core → core}/DTElement.d.ts.map +0 -0
  110. /package/{dist/core → core}/DTElement.js +0 -0
  111. /package/{dist/core → core}/DTElement.js.map +0 -0
  112. /package/{dist/core → core}/DTError.d.ts +0 -0
  113. /package/{dist/core → core}/DTError.d.ts.map +0 -0
  114. /package/{dist/core → core}/DTError.js +0 -0
  115. /package/{dist/core → core}/DTError.js.map +0 -0
  116. /package/{dist/core → core}/DTManager.d.ts +0 -0
  117. /package/{dist/core → core}/DTManager.d.ts.map +0 -0
  118. /package/{dist/core → core}/DTManager.js +0 -0
  119. /package/{dist/core → core}/DTManager.js.map +0 -0
  120. /package/{dist/core → core}/DTMaster.d.ts +0 -0
  121. /package/{dist/core → core}/DTMaster.d.ts.map +0 -0
  122. /package/{dist/core → core}/DTMaster.js +0 -0
  123. /package/{dist/core → core}/DTMaster.js.map +0 -0
  124. /package/{dist/core → core}/DTModule.d.ts +0 -0
  125. /package/{dist/core → core}/DTModule.d.ts.map +0 -0
  126. /package/{dist/core → core}/DTModule.js +0 -0
  127. /package/{dist/core → core}/DTModule.js.map +0 -0
  128. /package/{dist/index.js.map → index.js.map} +0 -0
  129. /package/{dist/libs → libs}/DYOFinder.d.ts +0 -0
  130. /package/{dist/libs → libs}/DYOFinder.d.ts.map +0 -0
  131. /package/{dist/libs → libs}/DYOFinder.js +0 -0
  132. /package/{dist/libs → libs}/DYOFinder.js.map +0 -0
  133. /package/{dist/libs → libs}/dix/DIXModule.module.d.ts +0 -0
  134. /package/{dist/libs → libs}/dix/DIXModule.module.d.ts.map +0 -0
  135. /package/{dist/libs → libs}/dix/DIXModule.module.js +0 -0
  136. /package/{dist/libs → libs}/player/DTPlayer.element.d.ts +0 -0
  137. /package/{dist/libs → libs}/player/DTPlayer.element.d.ts.map +0 -0
  138. /package/{dist/libs → libs}/player/DTPlayer.element.js +0 -0
  139. /package/{dist/libs → libs}/player/DTPlayer.element.js.map +0 -0
  140. /package/{dist/libs → libs}/player/DTPlayer.manager.d.ts +0 -0
  141. /package/{dist/libs → libs}/player/DTPlayer.manager.d.ts.map +0 -0
  142. /package/{dist/libs → libs}/player/DTPlayer.manager.js +0 -0
  143. /package/{dist/libs → libs}/player/DTPlayer.manager.js.map +0 -0
  144. /package/{dist/tsconfig.dev.tsbuildinfo → tsconfig.dev.tsbuildinfo} +0 -0
  145. /package/{dist/tsconfig.tsbuildinfo → tsconfig.tsbuildinfo} +0 -0
  146. /package/{dist/types → types}/core.d.ts +0 -0
  147. /package/{dist/types → types}/core.d.ts.map +0 -0
  148. /package/{dist/types → types}/core.js +0 -0
  149. /package/{dist/types → types}/core.js.map +0 -0
  150. /package/{dist/types → types}/index.d.ts +0 -0
  151. /package/{dist/types → types}/index.d.ts.map +0 -0
  152. /package/{dist/types → types}/index.js +0 -0
  153. /package/{dist/types → types}/index.js.map +0 -0
  154. /package/{dist/types → types}/player.d.ts +0 -0
  155. /package/{dist/types → types}/player.d.ts.map +0 -0
  156. /package/{dist/types → types}/player.js +0 -0
  157. /package/{dist/types → types}/player.js.map +0 -0
@@ -1,822 +0,0 @@
1
- import {afterEach, beforeEach, describe, expect, jest, test,} from '@jest/globals';
2
- import {DTBunchStub, DTBunchTest, generateStubElements, IDTest, KeyTest} from './DTBunch.double';
3
- import {
4
- DTElementStub,
5
- HaileiIdTest,
6
- HaileiKeyTest,
7
- HaileiToObjectTest,
8
- IDTest as IDElementTest,
9
- IldressIdTest,
10
- IldressKeyTest,
11
- IldressToObjectTest,
12
- KeyTest as KeyElementTest,
13
- MaydenaIdTest,
14
- MaydenaKeyTest,
15
- MaydenaToObjectTest,
16
- MeldrineIdTest,
17
- MeldrineKeyTest,
18
- MeldrineToObjectTest,
19
- YssaliaIdTest,
20
- YssaliaKeyTest,
21
- YssaliaToObjectTest,
22
- } from './DTElement.double';
23
- import {DTBunch, DTComponentPhysical, DTError} from '../../src';
24
- import {BunchMetaData, HaileiMetaData} from './DTComponentWithMeta.double';
25
- import {DTBunchOptions, FilterOperatorType} from '../../src/types';
26
- import {CodeTest as DTErrorCodeTest, DTErrorStub} from './DTError.double';
27
- import {OwnerTest} from './DTComponentPhysical.double';
28
- import {DTManagerStub, IDTest as managerIDTest} from './DTManager.double';
29
-
30
- /** *********************** TESTS SUITES ****************************** */
31
- describe('class DTBunch', () => {
32
- let bunchTest: DTBunchTest;
33
-
34
- beforeEach(() => {
35
- bunchTest = new DTBunchTest();
36
- });
37
-
38
- afterEach(() => {
39
- jest.resetAllMocks();
40
- });
41
-
42
- describe('inheritance', () => {
43
- test('check good inheritance for class', () => {
44
- expect(DTBunch.prototype instanceof DTComponentPhysical).toBeTruthy();
45
- });
46
- });
47
-
48
- describe('constructor()', () => {
49
- let addManyImpl;
50
-
51
- beforeEach(() => {
52
- jest.resetAllMocks();
53
- addManyImpl = DTBunch.prototype.addMany;
54
- DTBunch.prototype.addMany = jest.fn();
55
- });
56
-
57
- afterEach(() => {
58
- DTBunch.prototype.addMany = addManyImpl;
59
- });
60
-
61
- test('creation simple with key', () => {
62
- const newBunch = new DTBunchTest();
63
-
64
- expect(newBunch.getAll()).toStrictEqual([]);
65
- });
66
-
67
- test('creation with items', () => {
68
- const elements: DTElementStub[] = generateStubElements(3);
69
- const newBunch = new DTBunchTest(IDTest, KeyTest, elements);
70
- const mockedAddMany = DTBunch.prototype.addMany as any;
71
-
72
- expect(mockedAddMany.mock.calls.length).toBe(1);
73
- expect(mockedAddMany.mock.calls[0][0].length).toBe(3);
74
- expect(mockedAddMany.mock.calls[0][0][0].getKey()).toBe(HaileiKeyTest);
75
- expect(mockedAddMany.mock.calls[0][0][1].getKey()).toBe(MeldrineKeyTest);
76
- expect(mockedAddMany.mock.calls[0][0][2].getKey()).toBe(MaydenaKeyTest);
77
- });
78
-
79
- test('creations with options', () => {
80
- const testOptions: Partial<DTBunchOptions> = {
81
- errors: true,
82
- uniqueKey: true,
83
- inheritOwner: true,
84
- };
85
- const newBunch = new DTBunchTest(IDTest, KeyTest, [], testOptions);
86
-
87
- expect(newBunch.getOptions()).toStrictEqual({
88
- errors: true,
89
- syncId: undefined,
90
- uniqueKey: true,
91
- inheritOwner: true,
92
- replaceIndex: false,
93
- virtualContainer: false,
94
- });
95
- expect(newBunch.getAll()).toStrictEqual([]);
96
- });
97
- });
98
-
99
- describe('_componentType', () => {
100
- test('componentType must be "bunch"', () => {
101
- expect(bunchTest.getComponentType()).toBe('bunch');
102
- });
103
- });
104
-
105
- describe('getFinderConfiguration()', () => {
106
- const baseOperators = [
107
- FilterOperatorType.EQ,
108
- FilterOperatorType.IN,
109
- FilterOperatorType.NIN,
110
- FilterOperatorType.NE,
111
- ];
112
- const advancedOperators = [
113
- ...baseOperators,
114
- FilterOperatorType.GTE,
115
- FilterOperatorType.LTE,
116
- FilterOperatorType.CONTAINS,
117
- FilterOperatorType.NCONTAINS,
118
- ];
119
-
120
- test('check finder configuration for id attribute', () => {
121
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().id;
122
-
123
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
124
- expect(finderConfigurationToCheck.getValue(new DTElementStub())).toBe(IDElementTest);
125
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
126
- });
127
-
128
- test('check finder configuration for key attribute', () => {
129
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().key;
130
-
131
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
132
- expect(finderConfigurationToCheck.getValue(new DTElementStub())).toBe(KeyElementTest);
133
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
134
- });
135
-
136
- test('check finder configuration for owner attribute - empty owner', () => {
137
- const element = new DTElementStub();
138
- jest.spyOn(element, 'getOwner').mockImplementation(() => undefined);
139
-
140
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().owner;
141
-
142
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
143
- expect(finderConfigurationToCheck.getValue(element)).toBeUndefined();
144
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
145
- });
146
-
147
- test('check finder configuration for owner attribute - with owner', () => {
148
- const element = new DTElementStub();
149
- jest.spyOn(element, 'getOwner').mockReturnValue(OwnerTest);
150
-
151
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().owner;
152
-
153
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
154
- expect(finderConfigurationToCheck.getValue(element)).toBe(OwnerTest);
155
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
156
- });
157
-
158
- test('check finder configuration for container attribute - empty container', () => {
159
- const element = new DTElementStub();
160
- jest.spyOn(element, 'getContainer').mockImplementation(() => undefined);
161
-
162
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().container;
163
-
164
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
165
- expect(finderConfigurationToCheck.getValue(element)).toBeNull();
166
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
167
- });
168
-
169
- test('check finder configuration for container attribute - with container', () => {
170
- const element = new DTElementStub();
171
- const bunch = new DTBunchStub();
172
- jest.spyOn(bunch, 'getId').mockImplementation(() => `${IDTest}_other_container`);
173
- jest.spyOn(element, 'getContainer').mockImplementation(() => bunch);
174
-
175
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().container;
176
-
177
- expect(finderConfigurationToCheck.operators).toStrictEqual(baseOperators);
178
- expect(finderConfigurationToCheck.getValue(element)).toBe(`${IDTest}_other_container`);
179
- expect(finderConfigurationToCheck.objectSearch).toBe(false);
180
- });
181
-
182
- test('check finder configuration for meta attribute', () => {
183
- const element = new DTElementStub();
184
- jest.spyOn(element, 'getManyMeta').mockImplementation(() => HaileiMetaData);
185
-
186
- const finderConfigurationToCheck = bunchTest.getFinderConfiguration().meta;
187
-
188
- expect(finderConfigurationToCheck.operators).toStrictEqual(advancedOperators);
189
- expect(finderConfigurationToCheck.getValue(element)).toStrictEqual(HaileiMetaData);
190
- expect(finderConfigurationToCheck.objectSearch).toBe(true);
191
- });
192
- });
193
-
194
- describe('setOwner()', () => {
195
- beforeEach(() => {
196
- jest.spyOn(bunchTest, 'getOwner').mockReturnValue(OwnerTest);
197
- });
198
-
199
- test('add a new owner - not updating elements owner when inheritOwner = false', () => {
200
- const newBunch = new DTBunchTest(IDTest, KeyTest, generateStubElements(1), { inheritOwner: false});
201
-
202
- newBunch.setOwner(OwnerTest);
203
-
204
- expect(newBunch.get(0).getOwner()).toBeUndefined();
205
- });
206
-
207
- test('add a new owner - updating elements owner when inheritOwner = true', () => {
208
- const newBunch = new DTBunchTest(IDTest, KeyTest, generateStubElements(1), { inheritOwner: true});
209
-
210
- newBunch.setOwner(OwnerTest);
211
-
212
- expect(newBunch.get(0).getOwner()).toBe(OwnerTest);
213
- });
214
- });
215
-
216
- describe('removeOwner()', () => {
217
- test('remove current Owner - not updating elements owner when inheritOwner = false', () => {
218
- const newBunch = new DTBunchTest(IDTest, KeyTest, generateStubElements(1, OwnerTest), { inheritOwner: false}, OwnerTest);
219
- newBunch.removeOwner();
220
-
221
- expect(newBunch.get(0).getOwner()).toBe(OwnerTest);
222
- });
223
-
224
- test('remove current Owner - updating elements owner when inheritOwner = true', () => {
225
- const newBunch = new DTBunchTest(IDTest, KeyTest, generateStubElements(1, OwnerTest), { inheritOwner: true}, OwnerTest);
226
- newBunch.removeOwner();
227
-
228
- expect(newBunch.get(0).getOwner()).toBeUndefined();
229
- });
230
- });
231
-
232
- describe('get()', () => {
233
- beforeEach(() => {
234
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5))
235
- });
236
-
237
- test('return an item by its id', () => {
238
- expect(bunchTest.get(`${MaydenaIdTest}-2`).getKey()).toBe(MaydenaKeyTest);
239
- expect(bunchTest.get(`${YssaliaIdTest}-4`).getKey()).toBe(YssaliaKeyTest);
240
- });
241
-
242
- test('return an item by its index', () => {
243
- expect(bunchTest.get(2).getKey()).toBe(MaydenaKeyTest);
244
- expect(bunchTest.get(4).getKey()).toBe(YssaliaKeyTest);
245
- });
246
-
247
- test('return undefined if item not found by id', () => {
248
- expect(bunchTest.get('id-123456')).toBeUndefined();
249
- });
250
-
251
- test('return undefined if item not found by index', () => {
252
- expect(bunchTest.get(11)).toBeUndefined();
253
- });
254
-
255
- test('return undefined if item not found by index - incoherent index', () => {
256
- expect(bunchTest.get(-11)).toBeUndefined();
257
- });
258
- });
259
-
260
- describe('getAll()', () => {
261
- test('return empty array if no items', () => {
262
- expect(bunchTest.getAll()).toStrictEqual([]);
263
- });
264
-
265
- test('return all items array', () => {
266
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
267
-
268
- expect(bunchTest.getAll()[0].getKey()).toBe(HaileiKeyTest);
269
- expect(bunchTest.getAll()[1].getKey()).toBe(MeldrineKeyTest);
270
- expect(bunchTest.getAll()[2].getKey()).toBe(MaydenaKeyTest);
271
- expect(bunchTest.getAll()[3].getKey()).toBe(IldressKeyTest);
272
- expect(bunchTest.getAll()[4].getKey()).toBe(YssaliaKeyTest);
273
- });
274
- });
275
-
276
- describe('indexOf()', () => {
277
- beforeEach(() => {
278
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5))
279
- });
280
-
281
- test('return index of an item by id', () => {
282
- expect(bunchTest.indexOf(`${MaydenaIdTest}-2`)).toBe(2);
283
- expect(bunchTest.indexOf(`${YssaliaIdTest}-4`)).toBe(4);
284
- });
285
-
286
- test('return -1 if id is not found', () => {
287
- expect(bunchTest.indexOf('id-123456')).toBe(-1);
288
- });
289
- });
290
-
291
- describe('addAtIndex()', () => {
292
- let objectToAdd;
293
- let objectsToAdd;
294
-
295
- beforeEach(() => {
296
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5))
297
-
298
- objectsToAdd = generateStubElements(6);
299
- objectToAdd = objectsToAdd[5];
300
- });
301
-
302
- test('add a new item at last index - simple case', () => {
303
- bunchTest.addAtIndex(objectToAdd, 5);
304
-
305
- expect(bunchTest.get(5).getId()).toBe(objectToAdd.getId());
306
- });
307
-
308
- test('add a new item at specified index and reindex - default case', () => {
309
- bunchTest.addAtIndex(objectToAdd, 2);
310
-
311
- expect(bunchTest.get(2).getId()).toBe(objectToAdd.getId());
312
- expect(bunchTest.get(3).getId()).toBe(`${MaydenaIdTest}-2`);
313
- expect(bunchTest.get(4).getId()).toBe(`${IldressIdTest}-3`);
314
- expect(bunchTest.get(5).getId()).toBe(`${YssaliaIdTest}-4`);
315
- });
316
-
317
- test('add a new item at specified index and replace - replace option', () => {
318
- bunchTest.addAtIndex(objectToAdd, 2, { replaceIndex: true });
319
-
320
- expect(bunchTest.get(2).getId()).toBe(objectToAdd.getId());
321
- expect(bunchTest.get(3).getId()).toBe(`${IldressIdTest}-3`);
322
- expect(bunchTest.get(4).getId()).toBe(`${YssaliaIdTest}-4`);
323
- expect(bunchTest.get(5)).toBeUndefined();
324
- });
325
-
326
- test('add a new item at lower index', () => {
327
- bunchTest.addAtIndex(objectToAdd, -11);
328
-
329
- expect(bunchTest.get(0).getId()).toBe(objectToAdd.getId());
330
- expect(bunchTest.get(1).getId()).toBe(`${HaileiIdTest}-0`);
331
- });
332
-
333
- test('add a new item at greater index', () => {
334
- bunchTest.addAtIndex(objectToAdd, 11);
335
-
336
- expect(bunchTest.get(5).getId()).toBe(objectToAdd.getId());
337
- expect(bunchTest.get(6)).toBeUndefined();
338
- });
339
-
340
- test('trigger conflict when adding two same ids - parent triggerError', () => {
341
- let errorThrown: DTError | undefined;
342
- try {
343
- bunchTest.addAtIndex(objectsToAdd[0], 2);
344
- } catch(error) {
345
- errorThrown = error;
346
- }
347
-
348
- expect(errorThrown).toBeDefined();
349
- if (errorThrown) {
350
- expect(errorThrown.getCode()).toBe('id_conflict');
351
- expect(errorThrown.getMessage()).toBe('Element with same id already exists in the bunch');
352
- expect(errorThrown.getInitiator().getId()).toBe(IDTest);
353
- expect(errorThrown.getConvicted().getId()).toBe(objectsToAdd[0].getId());
354
- }
355
- });
356
-
357
- test('no conflict when adding two same keys - default case', () => {
358
- let errorThrown: DTError | undefined;
359
- try {
360
- bunchTest.addAtIndex(objectToAdd, 2);
361
- } catch(error) {
362
- errorThrown = error;
363
- }
364
-
365
- expect(errorThrown).toBeUndefined();
366
- expect(bunchTest.get(0).getKey()).toBe(HaileiKeyTest);
367
- expect(bunchTest.get(2).getKey()).toBe(HaileiKeyTest);
368
- });
369
-
370
- test('trigger conflict when adding two same keys - uniqueKey option and parent triggerError', () => {
371
- let errorThrown: DTError | undefined;
372
- try {
373
- bunchTest.addAtIndex(objectToAdd, 2, { uniqueKey: true });
374
- } catch(error) {
375
- errorThrown = error;
376
- }
377
-
378
- expect(errorThrown).toBeDefined();
379
- if (errorThrown) {
380
- expect(errorThrown.getCode()).toBe('key_conflict');
381
- expect(errorThrown.getMessage()).toBe('Element with same key already exists in the bunch');
382
- expect(errorThrown.getInitiator().getKey()).toBe(KeyTest);
383
- expect(errorThrown.getConvicted().getId()).toBe(objectToAdd.getId());
384
- }
385
- });
386
-
387
- test('not inherit owner when adding an item - default case', () => {
388
- bunchTest.setOwner(OwnerTest);
389
-
390
- bunchTest.addAtIndex(objectToAdd, 2);
391
-
392
- expect(bunchTest.getOwner()).toBe(OwnerTest);
393
- expect(objectToAdd.getOwner()).toBeUndefined();
394
- });
395
-
396
- test('inherit owner when adding an item - inheritOwner option', () => {
397
- bunchTest.setOwner(OwnerTest);
398
-
399
- bunchTest.addAtIndex(objectToAdd, 2, { inheritOwner: true });
400
-
401
- expect(bunchTest.getOwner()).toBe(OwnerTest);
402
- expect(objectToAdd.getOwner()).toBe(OwnerTest);
403
- });
404
-
405
- test('not set context if undefined when adding an item', () => {
406
- bunchTest.addAtIndex(objectToAdd, 2);
407
-
408
- expect(bunchTest.get(2).getContext()).toBeUndefined();
409
- });
410
-
411
- test('set context with parent manager when adding an item', () => {
412
- const manager = new DTManagerStub();
413
- bunchTest.setContext(manager);
414
-
415
- bunchTest.addAtIndex(objectToAdd, 2);
416
-
417
- expect(bunchTest.get(2).getContext()?.getId()).toBe(managerIDTest);
418
- });
419
-
420
- test('set container when adding an item', () => {
421
- bunchTest.addAtIndex(objectToAdd, 2);
422
-
423
- expect(bunchTest.get(2).getContainer()?.getId()).toBe(IDTest);
424
- });
425
-
426
- test('not set container when adding an item - virtualContainer option', () => {
427
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5), { virtualContainer: true });
428
-
429
- bunchTest.addAtIndex(objectToAdd, 2);
430
-
431
- expect(bunchTest.get(2).getContainer()).toBeUndefined();
432
- });
433
-
434
- test('set container when adding an item - remove from old bunch', () => {
435
- const bunchTestOld = new DTBunchTest(IDTest + "_old", KeyTest, generateStubElements(6));
436
- objectToAdd = bunchTestOld.get(5);
437
- objectToAdd.setContainer(bunchTestOld);
438
-
439
- bunchTest.addAtIndex(objectToAdd, 2);
440
-
441
- expect(objectToAdd.getContainer()?.getId()).toBe(IDTest);
442
- expect(bunchTestOld.get(5)).toBeUndefined();
443
- });
444
-
445
- test('set container when adding an item - dont remove if virtualContainer option', () => {
446
- const bunchTestOld = new DTBunchTest(IDTest + "_old", KeyTest, generateStubElements(6), { virtualContainer: true });
447
- objectToAdd = bunchTestOld.get(5);
448
-
449
- bunchTest.addAtIndex(objectToAdd, 2);
450
-
451
- expect(objectToAdd.getContainer()?.getId()).toBe(IDTest);
452
- expect(bunchTestOld.get(5)?.getId()).toBe(objectToAdd.getId());
453
- });
454
-
455
- test('manager context - add item into the manager library', () => {
456
- const managerTest = new DTManagerStub();
457
- bunchTest.setContext(managerTest);
458
-
459
- bunchTest.addAtIndex(objectToAdd, 5);
460
-
461
- expect(managerTest.getLibrary().get(objectToAdd.getId())).toBeDefined();
462
- });
463
-
464
- test('manager context - not add existing item into the manager library', () => {
465
- const managerTest = new DTManagerStub();
466
- bunchTest.setContext(managerTest);
467
- managerTest.getLibrary().add(objectToAdd);
468
-
469
- bunchTest.addAtIndex(objectToAdd, 5);
470
-
471
- expect(managerTest.getLibrary().getAll().length).toBe(1);
472
- });
473
-
474
- test('manager context - not add item into the manager if the caller is the library', () => {
475
- const managerTest = new DTManagerStub();
476
- bunchTest.setContext(managerTest);
477
-
478
- managerTest.getLibrary().addAtIndex(objectToAdd, 5);
479
-
480
- expect(managerTest.getLibrary().getAll().length).toBe(1);
481
- });
482
- });
483
-
484
- describe('add()', () => {
485
- let objectsToAdd;
486
- let objectToAdd;
487
-
488
- beforeEach(() => {
489
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
490
- jest.spyOn(bunchTest, 'addAtIndex').mockImplementation(() => {});
491
-
492
- objectsToAdd = generateStubElements(6);
493
- objectToAdd = objectsToAdd[5];
494
- });
495
-
496
- test('add as last item using addAtIndex', () => {
497
- const testBunchOptions = {
498
- replaceIndex: true,
499
- inheritOwner: true,
500
- };
501
- bunchTest.add(objectToAdd, testBunchOptions);
502
-
503
- expect((bunchTest.addAtIndex as any).mock.calls.length).toBe(1);
504
- expect((bunchTest.addAtIndex as any).mock.calls[0][0].getId()).toBe(objectToAdd.getId());
505
- expect((bunchTest.addAtIndex as any).mock.calls[0][1]).toBe(5);
506
- expect((bunchTest.addAtIndex as any).mock.calls[0][2]).toStrictEqual(testBunchOptions);
507
- });
508
- });
509
-
510
- describe('addManyAtIndex()', () => {
511
- let itemsToAdd;
512
- let itemLibrary;
513
-
514
- beforeEach(() => {
515
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
516
- jest.spyOn(bunchTest, 'addAtIndex').mockImplementation(() => {});
517
-
518
- itemLibrary = generateStubElements(8);
519
- itemsToAdd = [itemLibrary[5], itemLibrary[6], itemLibrary[7]];
520
- });
521
-
522
- test('add many items at index using addAtIndex - simple case', () => {
523
- const testBunchOptions = {
524
- replaceIndex: true,
525
- inheritOwner: true,
526
- };
527
- const indexToAdd = 2;
528
- bunchTest.addManyAtIndex(itemsToAdd, indexToAdd, testBunchOptions);
529
-
530
- expect((bunchTest.addAtIndex as any).mock.calls.length).toBe(3);
531
- for (let i = 0; i < 3; i++) {
532
- expect((bunchTest.addAtIndex as any).mock.calls[i][0].getId()).toBe(itemsToAdd[i].getId());
533
- expect((bunchTest.addAtIndex as any).mock.calls[i][1]).toBe(i + indexToAdd);
534
- expect((bunchTest.addAtIndex as any).mock.calls[i][2]).toStrictEqual(testBunchOptions);
535
- }
536
- });
537
-
538
- test('add many items at index using addAtIndex - index lower than 0', () => {
539
- const indexToAdd = -11;
540
- bunchTest.addManyAtIndex(itemsToAdd, indexToAdd);
541
-
542
- expect((bunchTest.addAtIndex as any).mock.calls.length).toBe(3);
543
- for (let i = 0; i < 3; i++) {
544
- expect((bunchTest.addAtIndex as any).mock.calls[i][0].getId()).toBe(itemsToAdd[i].getId());
545
- expect((bunchTest.addAtIndex as any).mock.calls[i][1]).toBe(i);
546
- }
547
- });
548
-
549
- test('errors when adding many items at index - default case - add no items and throw error', () => {
550
- const indexToAdd = 2;
551
- let errorThrown: DTErrorStub;
552
- jest.spyOn(bunchTest, 'addAtIndex').mockImplementationOnce((item, index, options) => {
553
- throw new DTErrorStub();
554
- });
555
-
556
- try {
557
- bunchTest.addManyAtIndex(itemsToAdd, indexToAdd);
558
- } catch (error: unknown) {
559
- errorThrown = error as DTErrorStub;
560
- }
561
-
562
- expect(errorThrown).toBeDefined();
563
- expect(errorThrown.getCode()).toBe(DTErrorCodeTest);
564
- expect((bunchTest.addAtIndex as any).mock.calls.length).toBe(1);
565
- expect((bunchTest.addAtIndex as any).mock.calls[0][0].getId()).toBe(itemsToAdd[0].getId());
566
- expect((bunchTest.addAtIndex as any).mock.calls[0][1]).toBe(indexToAdd);
567
- });
568
-
569
- test('errors when adding many items at index - errors case - add success items and stack errors for others', () => {
570
- const indexToAdd = 2;
571
- const errors = [];
572
- jest.spyOn(bunchTest, 'addAtIndex')
573
- .mockImplementationOnce((item, index, options) => {
574
- errors.push(new DTErrorStub());
575
- })
576
- .mockImplementationOnce((item, index, options) => {
577
- errors.push(new DTErrorStub());
578
- });
579
-
580
- bunchTest.addManyAtIndex(itemsToAdd, indexToAdd, { errors: true });
581
-
582
- expect(errors.length).toBe(2);
583
- expect((bunchTest.addAtIndex as any).mock.calls.length).toBe(3);
584
- expect((bunchTest.addAtIndex as any).mock.calls[0][0].getId()).toBe(itemsToAdd[0].getId());
585
- expect((bunchTest.addAtIndex as any).mock.calls[1][0].getId()).toBe(itemsToAdd[1].getId());
586
- expect((bunchTest.addAtIndex as any).mock.calls[2][0].getId()).toBe(itemsToAdd[2].getId());
587
- });
588
- });
589
-
590
- describe('addMany()', () => {
591
- let itemsToAdd;
592
- let itemLibrary;
593
-
594
- beforeEach(() => {
595
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
596
- jest.spyOn(bunchTest, 'addManyAtIndex').mockImplementation(() => {});
597
-
598
- itemLibrary = generateStubElements(8);
599
- itemsToAdd = [itemLibrary[5], itemLibrary[6], itemLibrary[7]];
600
- });
601
-
602
- test('add many items as last item using addManyAtIndex', () => {
603
- const testBunchOptions = {
604
- replaceIndex: true,
605
- inheritOwner: true,
606
- };
607
-
608
- bunchTest.addMany(itemsToAdd, testBunchOptions);
609
-
610
- expect((bunchTest.addManyAtIndex as any).mock.calls.length).toBe(1);
611
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][0].length).toBe(3);
612
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][0][0].getId()).toBe(`${HaileiIdTest}-5`);
613
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][0][1].getId()).toBe(`${MeldrineIdTest}-6`);
614
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][0][2].getId()).toBe(`${MaydenaIdTest}-7`);
615
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][1]).toBe(5);
616
- expect((bunchTest.addManyAtIndex as any).mock.calls[0][2]).toStrictEqual(testBunchOptions);
617
- });
618
- });
619
-
620
- describe('removeMany()', () => {
621
- const checkAllItemsInBunch = (bunch: DTBunchTest, itemRemoved = 3) => {
622
- const sup = itemRemoved;
623
- expect(bunchTest.getAll().length).toBe(5 - sup);
624
- expect(bunchTest.get(0).getId()).toBe(`${HaileiIdTest}-0`);
625
- itemRemoved < 1 && expect(bunchTest.get(1 - sup).getId()).toBe(`${MeldrineIdTest}-1`);
626
- itemRemoved < 2 && expect(bunchTest.get(2 - sup).getId()).toBe(`${MaydenaIdTest}-2`);
627
- itemRemoved < 3 && expect(bunchTest.get(3 - sup).getId()).toBe(`${IldressIdTest}-3`);
628
- expect(bunchTest.get(4 - sup).getId()).toBe(`${YssaliaIdTest}-4`);
629
- };
630
-
631
- beforeEach(() => {
632
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
633
- });
634
-
635
- test('remove many items by ids', () => {
636
- bunchTest.removeMany([`${MeldrineIdTest}-1`, `${MaydenaIdTest}-2`, `${IldressIdTest}-3`]);
637
-
638
- checkAllItemsInBunch(bunchTest);
639
- });
640
-
641
- test('remove many items by indexes', () => {
642
- bunchTest.removeMany([1, 2, 3]);
643
-
644
- checkAllItemsInBunch(bunchTest);
645
- });
646
-
647
- test('remove only item with corresponding ids', () => {
648
- bunchTest.removeMany([`${MeldrineIdTest}-1`, `${MaydenaIdTest}-2`, 'id-12345']);
649
-
650
- checkAllItemsInBunch(bunchTest, 2);
651
- });
652
-
653
- test('remove only item with corresponding indexes', () => {
654
- bunchTest.removeMany([1, 2, 11]);
655
-
656
- checkAllItemsInBunch(bunchTest, 2);
657
- });
658
-
659
- test('remove only item with corresponding indexes - incoherent index', () => {
660
- bunchTest.removeMany([-11, 2, 1, -13]);
661
-
662
- checkAllItemsInBunch(bunchTest, 2);
663
- });
664
-
665
- test('define container at undefined for removed items - default case', () => {
666
- const items = [
667
- bunchTest.get(1),
668
- bunchTest.get(2),
669
- ];
670
-
671
- bunchTest.removeMany([`${MeldrineIdTest}-1`, `${MaydenaIdTest}-2`]);
672
-
673
- expect(items[0].getContainer()).toBeUndefined();
674
- expect(items[1].getContainer()).toBeUndefined();
675
- });
676
-
677
- test('not change container for removed items - virtual container option', () => {
678
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5), { virtualContainer: true });
679
- let bunchTestPhysical = new DTBunchTest(IDTest + "_physical", KeyTest);
680
- const items = [
681
- bunchTest.get(1),
682
- bunchTest.get(2),
683
- ];
684
- bunchTestPhysical.addMany(items);
685
-
686
- bunchTest.removeMany([`${MeldrineIdTest}-1`, `${MaydenaIdTest}-2`]);
687
-
688
- expect(items[0].getContainer().getId()).toBe(IDTest + "_physical");
689
- expect(items[1].getContainer().getId()).toBe(IDTest + "_physical");
690
- });
691
- });
692
-
693
- describe('remove()', () => {
694
- beforeEach(() => {
695
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
696
- jest.spyOn(bunchTest, 'removeMany').mockImplementation(() => {});
697
- });
698
-
699
- test('remove one item by id using removeMany', () => {
700
- bunchTest.remove(`${MaydenaIdTest}-2`);
701
-
702
- expect((bunchTest.removeMany as any).mock.calls.length).toBe(1);
703
- expect((bunchTest.removeMany as any).mock.calls[0][0]).toStrictEqual([`${MaydenaIdTest}-2`]);
704
- });
705
-
706
- test('remove one item by index using removeMany', () => {
707
- bunchTest.remove(2);
708
-
709
- expect((bunchTest.removeMany as any).mock.calls.length).toBe(1);
710
- expect((bunchTest.removeMany as any).mock.calls[0][0]).toStrictEqual([2]);
711
- });
712
- });
713
-
714
- describe('removeAll()', () => {
715
- beforeEach(() => {
716
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
717
- jest.spyOn(bunchTest, 'removeMany').mockImplementation(() => {});
718
- });
719
-
720
- test('remove all items using removeMany', () => {
721
- bunchTest.removeAll();
722
-
723
- expect((bunchTest.removeMany as any).mock.calls.length).toBe(1);
724
- expect((bunchTest.removeMany as any).mock.calls[0][0]).toStrictEqual([0, 1, 2, 3, 4]);
725
- });
726
- });
727
-
728
- describe('copy()', () => {
729
- // @see copy.spec.ts for unit tests about copy method
730
- });
731
-
732
- describe('find()', () => {
733
- let findSpy;
734
-
735
- beforeEach(() => {
736
- findSpy = jest.spyOn(bunchTest._getFinder(), 'execute');
737
- })
738
-
739
- test('find items using DYOFinder - empty case', () => {
740
- bunchTest.find({});
741
-
742
- expect((findSpy as any).mock.calls.length).toBe(1);
743
- expect((findSpy as any).mock.calls[0][0]).toStrictEqual({});
744
- });
745
-
746
- test('find items using DYOFinder', () => {
747
- const testFilters = { id: { $eq: 'id_bunch' }, key: { $ne: 'key_test' } };
748
- bunchTest.find(testFilters);
749
-
750
- expect((findSpy as any).mock.calls.length).toBe(1);
751
- expect((findSpy as any).mock.calls[0][0]).toStrictEqual(testFilters);
752
- });
753
- });
754
-
755
- describe('toObject()', () => {
756
-
757
- test('toObject output standard', () => {
758
- const toObjectBunch = bunchTest.toObject();
759
-
760
- expect(Object.keys(toObjectBunch)).toStrictEqual(['id', 'key', 'type', 'items']);
761
- expect(toObjectBunch.id).toBe(IDTest);
762
- expect(toObjectBunch.key).toBe(KeyTest);
763
- expect(toObjectBunch.type).toBe('bunch');
764
- expect(toObjectBunch.items.length).toBe(0);
765
- });
766
-
767
- test('toObject output standard with owner', () => {
768
- bunchTest.setOwner(OwnerTest);
769
-
770
- const toObjectBunch = bunchTest.toObject();
771
- expect(Object.keys(toObjectBunch)).toStrictEqual(['id', 'key', 'type', 'items', 'owner']);
772
- expect(toObjectBunch.owner).toBe(OwnerTest);
773
- });
774
-
775
- test('toObject output standard with owner and meta', () => {
776
- bunchTest.setOwner(OwnerTest);
777
- bunchTest.setManyMeta(BunchMetaData);
778
-
779
- const toObjectBunch = bunchTest.toObject();
780
- expect(Object.keys(toObjectBunch)).toStrictEqual(['id', 'key', 'type', 'items', 'owner', 'meta']);
781
- expect(toObjectBunch.meta).toStrictEqual(BunchMetaData);
782
- });
783
-
784
- test('toObject output standard with items', () => {
785
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
786
- const toObjectBunch = bunchTest.toObject();
787
-
788
- expect(Object.keys(toObjectBunch)).toStrictEqual(['id', 'key', 'type', 'items']);
789
- expect(toObjectBunch.items.length).toBe(5);
790
- expect(toObjectBunch.items).toStrictEqual([
791
- HaileiToObjectTest,
792
- MeldrineToObjectTest,
793
- MaydenaToObjectTest,
794
- IldressToObjectTest,
795
- YssaliaToObjectTest,
796
- ]);
797
- });
798
- });
799
-
800
- describe('toString()', () => {
801
- test('string output standard', () => {
802
- const toStringBunch = bunchTest.toString();
803
-
804
- expect(toStringBunch).toBe(`Component ${KeyTest} - Type: Bunch - Items: 0`);
805
- });
806
-
807
- test('string output standard with items', () => {
808
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
809
- const toStringBunch = bunchTest.toString();
810
-
811
- expect(toStringBunch).toBe(`Component ${KeyTest} - Type: Bunch - Items: 5`);
812
- });
813
-
814
- test('string output standard with items and owner', () => {
815
- bunchTest = new DTBunchTest(IDTest, KeyTest, generateStubElements(5));
816
- bunchTest.setOwner(OwnerTest);
817
-
818
- const toStringBunch = bunchTest.toString();
819
- expect(toStringBunch).toBe(`Component ${KeyTest} - Type: Bunch - Owner: ${OwnerTest} - Items: 5`);
820
- });
821
- });
822
- });