pure-orm 4.0.0 → 4.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 (217) hide show
  1. package/README.md +97 -43
  2. package/coverage/clover.xml +969 -626
  3. package/coverage/coverage-final.json +34 -22
  4. package/coverage/lcov-report/dist/src/core.js.html +220 -190
  5. package/coverage/lcov-report/dist/src/driver-integrations/index.html +97 -0
  6. package/coverage/lcov-report/dist/src/driver-integrations/pgp.js.html +240 -0
  7. package/coverage/lcov-report/dist/src/index.html +44 -18
  8. package/coverage/lcov-report/dist/src/index.js.html +2 -2
  9. package/coverage/lcov-report/dist/src/orm.js.html +125 -119
  10. package/coverage/lcov-report/dist/test-utils/blog/entities.js.html +1 -1
  11. package/coverage/lcov-report/dist/test-utils/blog/index.html +1 -1
  12. package/coverage/lcov-report/dist/test-utils/blog/models/article.js.html +15 -15
  13. package/coverage/lcov-report/dist/test-utils/blog/models/article_tag.js.html +7 -7
  14. package/coverage/lcov-report/dist/test-utils/blog/models/index.html +1 -1
  15. package/coverage/lcov-report/dist/test-utils/blog/models/person.js.html +13 -13
  16. package/coverage/lcov-report/dist/test-utils/blog/models/tag.js.html +4 -4
  17. package/coverage/lcov-report/dist/test-utils/five/entities.js.html +1 -1
  18. package/coverage/lcov-report/dist/test-utils/five/index.html +1 -1
  19. package/coverage/lcov-report/dist/test-utils/five/models/index.html +1 -1
  20. package/coverage/lcov-report/dist/test-utils/five/models/line-item.js.html +1 -1
  21. package/coverage/lcov-report/dist/test-utils/five/models/order.js.html +1 -1
  22. package/coverage/lcov-report/dist/test-utils/five/models/parcel-event.js.html +1 -1
  23. package/coverage/lcov-report/dist/test-utils/five/models/parcel-line-item.js.html +1 -1
  24. package/coverage/lcov-report/dist/test-utils/five/models/parcel.js.html +1 -1
  25. package/coverage/lcov-report/dist/test-utils/fourteen/entities.js.html +87 -0
  26. package/coverage/lcov-report/dist/test-utils/fourteen/index.html +97 -0
  27. package/coverage/lcov-report/dist/test-utils/fourteen/models/customer.js.html +159 -0
  28. package/coverage/lcov-report/dist/test-utils/fourteen/models/index.html +110 -0
  29. package/coverage/lcov-report/dist/test-utils/fourteen/models/person.js.html +138 -0
  30. package/coverage/lcov-report/dist/test-utils/nine/entities.js.html +1 -1
  31. package/coverage/lcov-report/dist/test-utils/nine/index.html +1 -1
  32. package/coverage/lcov-report/dist/test-utils/nine/models/feature-switch.js.html +1 -1
  33. package/coverage/lcov-report/dist/test-utils/nine/models/index.html +1 -1
  34. package/coverage/lcov-report/dist/test-utils/order/entities.js.html +11 -11
  35. package/coverage/lcov-report/dist/test-utils/order/index.html +1 -1
  36. package/coverage/lcov-report/dist/test-utils/order/models/index.html +1 -1
  37. package/coverage/lcov-report/dist/test-utils/order/models/line-item.js.html +24 -24
  38. package/coverage/lcov-report/dist/test-utils/order/models/order.js.html +42 -42
  39. package/coverage/lcov-report/dist/test-utils/order/models/product-variant.js.html +23 -23
  40. package/coverage/lcov-report/dist/test-utils/order/models/product.js.html +17 -17
  41. package/coverage/lcov-report/dist/test-utils/order/models/utm-source.js.html +12 -12
  42. package/coverage/lcov-report/dist/test-utils/order-more/entities.js.html +1 -1
  43. package/coverage/lcov-report/dist/test-utils/order-more/index.html +1 -1
  44. package/coverage/lcov-report/dist/test-utils/order-more/models/actual-product-variant.js.html +1 -1
  45. package/coverage/lcov-report/dist/test-utils/order-more/models/color.js.html +1 -1
  46. package/coverage/lcov-report/dist/test-utils/order-more/models/customer.js.html +1 -1
  47. package/coverage/lcov-report/dist/test-utils/order-more/models/gender.js.html +1 -1
  48. package/coverage/lcov-report/dist/test-utils/order-more/models/index.html +1 -1
  49. package/coverage/lcov-report/dist/test-utils/order-more/models/inventory-level.js.html +1 -1
  50. package/coverage/lcov-report/dist/test-utils/order-more/models/line-item.js.html +1 -1
  51. package/coverage/lcov-report/dist/test-utils/order-more/models/order.js.html +1 -1
  52. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-event.js.html +1 -1
  53. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-line-item.js.html +1 -1
  54. package/coverage/lcov-report/dist/test-utils/order-more/models/parcel.js.html +1 -1
  55. package/coverage/lcov-report/dist/test-utils/order-more/models/physical-address.js.html +1 -1
  56. package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant-image.js.html +1 -1
  57. package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant.js.html +1 -1
  58. package/coverage/lcov-report/dist/test-utils/order-more/models/product.js.html +1 -1
  59. package/coverage/lcov-report/dist/test-utils/order-more/models/refund.js.html +1 -1
  60. package/coverage/lcov-report/dist/test-utils/order-more/models/shipment-actual-product-variant.js.html +1 -1
  61. package/coverage/lcov-report/dist/test-utils/order-more/models/shipment.js.html +1 -1
  62. package/coverage/lcov-report/dist/test-utils/order-more/models/size.js.html +1 -1
  63. package/coverage/lcov-report/dist/test-utils/order-more/models/utm-medium.js.html +1 -1
  64. package/coverage/lcov-report/dist/test-utils/order-more/models/utm-source.js.html +1 -1
  65. package/coverage/lcov-report/dist/test-utils/six/entities.js.html +1 -1
  66. package/coverage/lcov-report/dist/test-utils/six/index.html +1 -1
  67. package/coverage/lcov-report/dist/test-utils/six/models/customer.js.html +1 -1
  68. package/coverage/lcov-report/dist/test-utils/six/models/index.html +1 -1
  69. package/coverage/lcov-report/dist/test-utils/six/models/line-item.js.html +1 -1
  70. package/coverage/lcov-report/dist/test-utils/six/models/order.js.html +1 -1
  71. package/coverage/lcov-report/dist/test-utils/six/models/parcel-line-item.js.html +1 -1
  72. package/coverage/lcov-report/dist/test-utils/six/models/parcel.js.html +1 -1
  73. package/coverage/lcov-report/dist/test-utils/thirteen/entities.js.html +1 -1
  74. package/coverage/lcov-report/dist/test-utils/thirteen/index.html +1 -1
  75. package/coverage/lcov-report/dist/test-utils/thirteen/models/audience.js.html +1 -1
  76. package/coverage/lcov-report/dist/test-utils/thirteen/models/brand.js.html +1 -1
  77. package/coverage/lcov-report/dist/test-utils/thirteen/models/category.js.html +1 -1
  78. package/coverage/lcov-report/dist/test-utils/thirteen/models/index.html +1 -1
  79. package/coverage/lcov-report/dist/test-utils/thirteen/models/member.js.html +1 -1
  80. package/coverage/lcov-report/dist/test-utils/thirteen/models/passion.js.html +1 -1
  81. package/coverage/lcov-report/dist/test-utils/thirteen/models/product.js.html +1 -1
  82. package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation-audience.js.html +1 -1
  83. package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation.js.html +1 -1
  84. package/coverage/lcov-report/dist/test-utils/three/index.html +1 -1
  85. package/coverage/lcov-report/dist/test-utils/three/results.js.html +1 -1
  86. package/coverage/lcov-report/dist/test-utils/twelve/entities.js.html +1 -1
  87. package/coverage/lcov-report/dist/test-utils/twelve/index.html +1 -1
  88. package/coverage/lcov-report/dist/test-utils/twelve/models/index.html +1 -1
  89. package/coverage/lcov-report/dist/test-utils/twelve/models/member.js.html +1 -1
  90. package/coverage/lcov-report/dist/test-utils/twelve/models/prompt.js.html +1 -1
  91. package/coverage/lcov-report/dist/test-utils/two/index.html +1 -1
  92. package/coverage/lcov-report/dist/test-utils/two/results.js.html +1 -1
  93. package/coverage/lcov-report/index.html +105 -27
  94. package/coverage/lcov-report/src/core.ts.html +235 -196
  95. package/coverage/lcov-report/src/driver-integrations/index.html +97 -0
  96. package/coverage/lcov-report/src/driver-integrations/pgp.ts.html +345 -0
  97. package/coverage/lcov-report/src/index.html +44 -18
  98. package/coverage/lcov-report/src/index.ts.html +3 -15
  99. package/coverage/lcov-report/src/orm.ts.html +256 -130
  100. package/coverage/lcov-report/test-utils/blog/entities.ts.html +1 -1
  101. package/coverage/lcov-report/test-utils/blog/index.html +1 -1
  102. package/coverage/lcov-report/test-utils/blog/models/article.ts.html +15 -15
  103. package/coverage/lcov-report/test-utils/blog/models/article_tag.ts.html +7 -7
  104. package/coverage/lcov-report/test-utils/blog/models/index.html +1 -1
  105. package/coverage/lcov-report/test-utils/blog/models/person.ts.html +13 -13
  106. package/coverage/lcov-report/test-utils/blog/models/tag.ts.html +4 -4
  107. package/coverage/lcov-report/test-utils/five/entities.ts.html +1 -1
  108. package/coverage/lcov-report/test-utils/five/index.html +1 -1
  109. package/coverage/lcov-report/test-utils/five/models/index.html +1 -1
  110. package/coverage/lcov-report/test-utils/five/models/line-item.ts.html +1 -1
  111. package/coverage/lcov-report/test-utils/five/models/order.ts.html +1 -1
  112. package/coverage/lcov-report/test-utils/five/models/parcel-event.ts.html +1 -1
  113. package/coverage/lcov-report/test-utils/five/models/parcel-line-item.ts.html +1 -1
  114. package/coverage/lcov-report/test-utils/five/models/parcel.ts.html +1 -1
  115. package/coverage/lcov-report/test-utils/fourteen/entities.ts.html +78 -0
  116. package/coverage/lcov-report/test-utils/fourteen/index.html +97 -0
  117. package/coverage/lcov-report/test-utils/fourteen/models/customer.ts.html +177 -0
  118. package/coverage/lcov-report/test-utils/fourteen/models/index.html +110 -0
  119. package/coverage/lcov-report/test-utils/fourteen/models/person.ts.html +150 -0
  120. package/coverage/lcov-report/test-utils/nine/entities.ts.html +1 -1
  121. package/coverage/lcov-report/test-utils/nine/index.html +1 -1
  122. package/coverage/lcov-report/test-utils/nine/models/feature-switch.ts.html +1 -1
  123. package/coverage/lcov-report/test-utils/nine/models/index.html +1 -1
  124. package/coverage/lcov-report/test-utils/order/entities.ts.html +5 -5
  125. package/coverage/lcov-report/test-utils/order/index.html +1 -1
  126. package/coverage/lcov-report/test-utils/order/models/index.html +1 -1
  127. package/coverage/lcov-report/test-utils/order/models/line-item.ts.html +18 -18
  128. package/coverage/lcov-report/test-utils/order/models/order.ts.html +37 -37
  129. package/coverage/lcov-report/test-utils/order/models/product-variant.ts.html +18 -18
  130. package/coverage/lcov-report/test-utils/order/models/product.ts.html +13 -13
  131. package/coverage/lcov-report/test-utils/order/models/utm-source.ts.html +8 -8
  132. package/coverage/lcov-report/test-utils/order-more/entities.ts.html +1 -1
  133. package/coverage/lcov-report/test-utils/order-more/index.html +1 -1
  134. package/coverage/lcov-report/test-utils/order-more/models/actual-product-variant.ts.html +1 -1
  135. package/coverage/lcov-report/test-utils/order-more/models/color.ts.html +1 -1
  136. package/coverage/lcov-report/test-utils/order-more/models/customer.ts.html +1 -1
  137. package/coverage/lcov-report/test-utils/order-more/models/gender.ts.html +1 -1
  138. package/coverage/lcov-report/test-utils/order-more/models/index.html +1 -1
  139. package/coverage/lcov-report/test-utils/order-more/models/inventory-level.ts.html +1 -1
  140. package/coverage/lcov-report/test-utils/order-more/models/line-item.ts.html +1 -1
  141. package/coverage/lcov-report/test-utils/order-more/models/order.ts.html +1 -1
  142. package/coverage/lcov-report/test-utils/order-more/models/parcel-event.ts.html +1 -1
  143. package/coverage/lcov-report/test-utils/order-more/models/parcel-line-item.ts.html +1 -1
  144. package/coverage/lcov-report/test-utils/order-more/models/parcel.ts.html +1 -1
  145. package/coverage/lcov-report/test-utils/order-more/models/physical-address.ts.html +1 -1
  146. package/coverage/lcov-report/test-utils/order-more/models/product-variant-image.ts.html +1 -1
  147. package/coverage/lcov-report/test-utils/order-more/models/product-variant.ts.html +1 -1
  148. package/coverage/lcov-report/test-utils/order-more/models/product.ts.html +1 -1
  149. package/coverage/lcov-report/test-utils/order-more/models/refund.ts.html +1 -1
  150. package/coverage/lcov-report/test-utils/order-more/models/shipment-actual-product-variant.ts.html +1 -1
  151. package/coverage/lcov-report/test-utils/order-more/models/shipment.ts.html +1 -1
  152. package/coverage/lcov-report/test-utils/order-more/models/size.ts.html +1 -1
  153. package/coverage/lcov-report/test-utils/order-more/models/utm-medium.ts.html +1 -1
  154. package/coverage/lcov-report/test-utils/order-more/models/utm-source.ts.html +1 -1
  155. package/coverage/lcov-report/test-utils/six/entities.ts.html +1 -1
  156. package/coverage/lcov-report/test-utils/six/index.html +1 -1
  157. package/coverage/lcov-report/test-utils/six/models/customer.ts.html +1 -1
  158. package/coverage/lcov-report/test-utils/six/models/index.html +1 -1
  159. package/coverage/lcov-report/test-utils/six/models/line-item.ts.html +1 -1
  160. package/coverage/lcov-report/test-utils/six/models/order.ts.html +1 -1
  161. package/coverage/lcov-report/test-utils/six/models/parcel-line-item.ts.html +1 -1
  162. package/coverage/lcov-report/test-utils/six/models/parcel.ts.html +1 -1
  163. package/coverage/lcov-report/test-utils/thirteen/entities.ts.html +1 -1
  164. package/coverage/lcov-report/test-utils/thirteen/index.html +1 -1
  165. package/coverage/lcov-report/test-utils/thirteen/models/audience.ts.html +1 -1
  166. package/coverage/lcov-report/test-utils/thirteen/models/brand.ts.html +1 -1
  167. package/coverage/lcov-report/test-utils/thirteen/models/category.ts.html +1 -1
  168. package/coverage/lcov-report/test-utils/thirteen/models/index.html +1 -1
  169. package/coverage/lcov-report/test-utils/thirteen/models/member.ts.html +1 -1
  170. package/coverage/lcov-report/test-utils/thirteen/models/passion.ts.html +1 -1
  171. package/coverage/lcov-report/test-utils/thirteen/models/product.ts.html +1 -1
  172. package/coverage/lcov-report/test-utils/thirteen/models/recommendation-audience.ts.html +1 -1
  173. package/coverage/lcov-report/test-utils/thirteen/models/recommendation.ts.html +1 -1
  174. package/coverage/lcov-report/test-utils/three/index.html +1 -1
  175. package/coverage/lcov-report/test-utils/three/results.js.html +1 -1
  176. package/coverage/lcov-report/test-utils/twelve/entities.ts.html +1 -1
  177. package/coverage/lcov-report/test-utils/twelve/index.html +1 -1
  178. package/coverage/lcov-report/test-utils/twelve/models/index.html +1 -1
  179. package/coverage/lcov-report/test-utils/twelve/models/member.ts.html +1 -1
  180. package/coverage/lcov-report/test-utils/twelve/models/prompt.ts.html +1 -1
  181. package/coverage/lcov-report/test-utils/two/index.html +1 -1
  182. package/coverage/lcov-report/test-utils/two/results.js.html +1 -1
  183. package/coverage/lcov.info +1686 -1005
  184. package/dist/src/core.d.ts +1 -1
  185. package/dist/src/core.js +18 -8
  186. package/dist/src/core.spec.js +643 -540
  187. package/dist/src/driver-integrations/index.d.ts +1 -0
  188. package/dist/src/orm.d.ts +21 -0
  189. package/dist/src/orm.js +6 -2
  190. package/dist/src/orm.spec.d.ts +1 -0
  191. package/dist/src/orm.spec.js +102 -0
  192. package/dist/test-utils/fourteen/entities.d.ts +6 -0
  193. package/dist/test-utils/fourteen/entities.js +6 -0
  194. package/dist/test-utils/fourteen/entities.ts +3 -0
  195. package/dist/test-utils/fourteen/models/customer.d.ts +19 -0
  196. package/dist/test-utils/fourteen/models/customer.js +30 -0
  197. package/dist/test-utils/fourteen/models/customer.ts +36 -0
  198. package/dist/test-utils/fourteen/models/person.d.ts +17 -0
  199. package/dist/test-utils/fourteen/models/person.js +23 -0
  200. package/dist/test-utils/fourteen/models/person.ts +27 -0
  201. package/dist/test-utils/fourteen/results.json +8 -0
  202. package/dist/test-utils/order/entities.js +2 -2
  203. package/dist/test-utils/order/entities.ts +2 -2
  204. package/dist/test-utils/order/models/order.js +1 -1
  205. package/dist/test-utils/order/models/order.ts +1 -1
  206. package/package.json +1 -1
  207. package/src/core.spec.ts +1112 -986
  208. package/src/core.ts +27 -14
  209. package/src/driver-integrations/index.ts +2 -0
  210. package/src/orm.spec.ts +113 -0
  211. package/src/orm.ts +54 -8
  212. package/test-utils/fourteen/entities.ts +3 -0
  213. package/test-utils/fourteen/models/customer.ts +36 -0
  214. package/test-utils/fourteen/models/person.ts +27 -0
  215. package/test-utils/fourteen/results.json +8 -0
  216. package/test-utils/order/entities.ts +2 -2
  217. package/test-utils/order/models/order.ts +1 -1
package/src/core.spec.ts CHANGED
@@ -8,6 +8,7 @@ import { entities as fiveEntities } from '../test-utils/five/entities';
8
8
  import { entities as sixEntities } from '../test-utils/six/entities';
9
9
  import { entities as twelveEntities } from '../test-utils/twelve/entities';
10
10
  import { entities as thirteenEntities } from '../test-utils/thirteen/entities';
11
+ import { entities as fourteenEntities } from '../test-utils/fourteen/entities';
11
12
  import { Articles } from '../test-utils/blog/models/article';
12
13
  const two = require('../test-utils/two/results');
13
14
  const three = require('../test-utils/three/results');
@@ -22,1026 +23,1151 @@ const ten = require('../test-utils/ten/results.json');
22
23
  const eleven = require('../test-utils/eleven/results.json');
23
24
  const twelve = require('../test-utils/twelve/results.json');
24
25
  const thirteen = require('../test-utils/thirteen/results.json');
26
+ const fourteen = require('../test-utils/fourteen/results.json');
25
27
 
26
- test('createOneFromDatabase where multiple rows reduce to one nested object (with all one-to-one or one-to-many tables)', () => {
27
- const core = createCore({ entities: orderEntities });
28
- const order = core.createOneFromDatabase(one);
29
- expect(Array.isArray(order)).toBe(false);
30
- expect(order?.id).toEqual(3866);
31
- expect(order?.utmSource.id).toEqual(6);
32
- expect(order?.lineItems.models.length).toEqual(6);
28
+ describe('createFromDatabase', () => {
29
+ test('multiple rows reduce to one nested object (with all one-to-one or one-to-many tables)', () => {
30
+ const core = createCore({ entities: orderEntities });
31
+ const orders = core.createFromDatabase(one);
32
+ expect(orders.models.length).toEqual(1);
33
+ const order = orders.models[0];
34
+ expect(order?.id).toEqual(3866);
35
+ expect(order?.utmSource.id).toEqual(6);
36
+ expect(order?.lineItems.models.length).toEqual(6);
33
37
 
34
- expect(order.lineItems.models[0].id).toEqual(2271);
35
- expect(order.lineItems.models[0].productVariant.id).toEqual(163);
36
- expect(order.lineItems.models[0].productVariant.product.id).toEqual(1);
38
+ expect(order.lineItems.models[0].id).toEqual(2271);
39
+ expect(order.lineItems.models[0].productVariant.id).toEqual(163);
40
+ expect(order.lineItems.models[0].productVariant.product.id).toEqual(1);
37
41
 
38
- expect(order.lineItems.models[1].id).toEqual(2272);
39
- expect(order.lineItems.models[1].productVariant.id).toEqual(186);
40
- expect(order.lineItems.models[1].productVariant.product.id).toEqual(1);
42
+ expect(order.lineItems.models[1].id).toEqual(2272);
43
+ expect(order.lineItems.models[1].productVariant.id).toEqual(186);
44
+ expect(order.lineItems.models[1].productVariant.product.id).toEqual(1);
41
45
 
42
- expect(order.lineItems.models[2].id).toEqual(2273);
43
- expect(order.lineItems.models[2].productVariant.id).toEqual(213);
44
- expect(order.lineItems.models[2].productVariant.product.id).toEqual(1);
46
+ expect(order.lineItems.models[2].id).toEqual(2273);
47
+ expect(order.lineItems.models[2].productVariant.id).toEqual(213);
48
+ expect(order.lineItems.models[2].productVariant.product.id).toEqual(1);
45
49
 
46
- expect(order.lineItems.models[3].id).toEqual(2274);
47
- expect(order.lineItems.models[3].productVariant.id).toEqual(207);
48
- expect(order.lineItems.models[3].productVariant.product.id).toEqual(1);
50
+ expect(order.lineItems.models[3].id).toEqual(2274);
51
+ expect(order.lineItems.models[3].productVariant.id).toEqual(207);
52
+ expect(order.lineItems.models[3].productVariant.product.id).toEqual(1);
49
53
 
50
- expect(order.lineItems.models[4].id).toEqual(2275);
51
- expect(order.lineItems.models[4].productVariant.id).toEqual(296);
52
- expect(order.lineItems.models[4].productVariant.product.id).toEqual(5);
54
+ expect(order.lineItems.models[4].id).toEqual(2275);
55
+ expect(order.lineItems.models[4].productVariant.id).toEqual(296);
56
+ expect(order.lineItems.models[4].productVariant.product.id).toEqual(5);
53
57
 
54
- expect(order.lineItems.models[5].id).toEqual(2276);
55
- expect(order.lineItems.models[5].productVariant.id).toEqual(308);
56
- expect(order.lineItems.models[5].productVariant.product.id).toEqual(3);
57
- });
58
+ expect(order.lineItems.models[5].id).toEqual(2276);
59
+ expect(order.lineItems.models[5].productVariant.id).toEqual(308);
60
+ expect(order.lineItems.models[5].productVariant.product.id).toEqual(3);
61
+ });
58
62
 
59
- test('createOneFromDatabase where multiple rows reduce to one nested object (with many-to-many tables)', () => {
60
- const core = createCore({ entities: blogEntities });
61
- const article = core.createOneFromDatabase(two);
62
- expect(Array.isArray(article)).toBe(false);
63
- expect(article.id).toEqual(14);
64
- expect(article.person.id).toEqual(8);
65
- expect(article.articleTags.models.length).toEqual(10);
63
+ test('createFromDatabase where multiple rows reduce to one nested object (with many-to-many tables)', () => {
64
+ const core = createCore({ entities: blogEntities });
65
+ const articles = core.createFromDatabase(two);
66
+ expect(articles.models.length).toEqual(1);
67
+ const article = articles.models[0];
68
+ expect(article.id).toEqual(14);
69
+ expect(article.person.id).toEqual(8);
70
+ expect(article.articleTags.models.length).toEqual(10);
66
71
 
67
- expect(article.articleTags.models[0].id).toEqual(36);
68
- expect(article.articleTags.models[0].tag.id).toEqual(3);
69
- expect(article.articleTags.models[1].id).toEqual(37);
70
- expect(article.articleTags.models[1].tag.id).toEqual(4);
71
- expect(article.articleTags.models[2].id).toEqual(38);
72
- expect(article.articleTags.models[2].tag.id).toEqual(5);
73
- expect(article.articleTags.models[3].id).toEqual(39);
74
- expect(article.articleTags.models[3].tag.id).toEqual(6);
75
- expect(article.articleTags.models[4].id).toEqual(40);
76
- expect(article.articleTags.models[4].tag.id).toEqual(7);
77
- expect(article.articleTags.models[5].id).toEqual(41);
78
- expect(article.articleTags.models[5].tag.id).toEqual(8);
79
- expect(article.articleTags.models[6].id).toEqual(42);
80
- expect(article.articleTags.models[6].tag.id).toEqual(9);
81
- expect(article.articleTags.models[7].id).toEqual(43);
82
- expect(article.articleTags.models[7].tag.id).toEqual(11);
83
- expect(article.articleTags.models[8].id).toEqual(44);
84
- expect(article.articleTags.models[8].tag.id).toEqual(12);
85
- expect(article.articleTags.models[9].id).toEqual(45);
86
- expect(article.articleTags.models[9].tag.id).toEqual(16);
87
- });
72
+ expect(article.articleTags.models[0].id).toEqual(36);
73
+ expect(article.articleTags.models[0].tag.id).toEqual(3);
74
+ expect(article.articleTags.models[1].id).toEqual(37);
75
+ expect(article.articleTags.models[1].tag.id).toEqual(4);
76
+ expect(article.articleTags.models[2].id).toEqual(38);
77
+ expect(article.articleTags.models[2].tag.id).toEqual(5);
78
+ expect(article.articleTags.models[3].id).toEqual(39);
79
+ expect(article.articleTags.models[3].tag.id).toEqual(6);
80
+ expect(article.articleTags.models[4].id).toEqual(40);
81
+ expect(article.articleTags.models[4].tag.id).toEqual(7);
82
+ expect(article.articleTags.models[5].id).toEqual(41);
83
+ expect(article.articleTags.models[5].tag.id).toEqual(8);
84
+ expect(article.articleTags.models[6].id).toEqual(42);
85
+ expect(article.articleTags.models[6].tag.id).toEqual(9);
86
+ expect(article.articleTags.models[7].id).toEqual(43);
87
+ expect(article.articleTags.models[7].tag.id).toEqual(11);
88
+ expect(article.articleTags.models[8].id).toEqual(44);
89
+ expect(article.articleTags.models[8].tag.id).toEqual(12);
90
+ expect(article.articleTags.models[9].id).toEqual(45);
91
+ expect(article.articleTags.models[9].tag.id).toEqual(16);
92
+ });
88
93
 
89
- test('createFromDatabase where multiple rows reduce to many rows with nested objects (with many-to-many tables)', () => {
90
- const core = createCore({ entities: blogEntities });
91
- const articles = core.createFromDatabase(three);
92
- expect(Array.isArray(articles.models)).toBe(true);
93
- expect(articles instanceof Articles).toBe(true);
94
- expect(articles.models.length).toEqual(2);
94
+ test('multiple rows reduce to many rows with nested objects (with many-to-many tables)', () => {
95
+ const core = createCore({ entities: blogEntities });
96
+ const articles = core.createFromDatabase(three);
97
+ expect(Array.isArray(articles.models)).toBe(true);
98
+ expect(articles instanceof Articles).toBe(true);
99
+ expect(articles.models.length).toEqual(2);
95
100
 
96
- const first = articles.models[0];
97
- expect(first.person.id).toEqual(8);
98
- expect(first.articleTags.models.length).toEqual(10);
101
+ const first = articles.models[0];
102
+ expect(first.person.id).toEqual(8);
103
+ expect(first.articleTags.models.length).toEqual(10);
99
104
 
100
- expect(first.articleTags.models[0].id).toEqual(36);
101
- expect(first.articleTags.models[0].tag.id).toEqual(3);
102
- expect(first.articleTags.models[1].id).toEqual(37);
103
- expect(first.articleTags.models[1].tag.id).toEqual(4);
104
- expect(first.articleTags.models[2].id).toEqual(38);
105
- expect(first.articleTags.models[2].tag.id).toEqual(5);
106
- expect(first.articleTags.models[3].id).toEqual(39);
107
- expect(first.articleTags.models[3].tag.id).toEqual(6);
108
- expect(first.articleTags.models[4].id).toEqual(40);
109
- expect(first.articleTags.models[4].tag.id).toEqual(7);
110
- expect(first.articleTags.models[5].id).toEqual(41);
111
- expect(first.articleTags.models[5].tag.id).toEqual(8);
112
- expect(first.articleTags.models[6].id).toEqual(42);
113
- expect(first.articleTags.models[6].tag.id).toEqual(9);
114
- expect(first.articleTags.models[7].id).toEqual(43);
115
- expect(first.articleTags.models[7].tag.id).toEqual(11);
116
- expect(first.articleTags.models[8].id).toEqual(44);
117
- expect(first.articleTags.models[8].tag.id).toEqual(12);
118
- expect(first.articleTags.models[9].id).toEqual(45);
119
- expect(first.articleTags.models[9].tag.id).toEqual(16);
105
+ expect(first.articleTags.models[0].id).toEqual(36);
106
+ expect(first.articleTags.models[0].tag.id).toEqual(3);
107
+ expect(first.articleTags.models[1].id).toEqual(37);
108
+ expect(first.articleTags.models[1].tag.id).toEqual(4);
109
+ expect(first.articleTags.models[2].id).toEqual(38);
110
+ expect(first.articleTags.models[2].tag.id).toEqual(5);
111
+ expect(first.articleTags.models[3].id).toEqual(39);
112
+ expect(first.articleTags.models[3].tag.id).toEqual(6);
113
+ expect(first.articleTags.models[4].id).toEqual(40);
114
+ expect(first.articleTags.models[4].tag.id).toEqual(7);
115
+ expect(first.articleTags.models[5].id).toEqual(41);
116
+ expect(first.articleTags.models[5].tag.id).toEqual(8);
117
+ expect(first.articleTags.models[6].id).toEqual(42);
118
+ expect(first.articleTags.models[6].tag.id).toEqual(9);
119
+ expect(first.articleTags.models[7].id).toEqual(43);
120
+ expect(first.articleTags.models[7].tag.id).toEqual(11);
121
+ expect(first.articleTags.models[8].id).toEqual(44);
122
+ expect(first.articleTags.models[8].tag.id).toEqual(12);
123
+ expect(first.articleTags.models[9].id).toEqual(45);
124
+ expect(first.articleTags.models[9].tag.id).toEqual(16);
120
125
 
121
- const second = articles.models[1];
122
- expect(second.id).toEqual(12);
123
- expect(second.person.id).toEqual(17);
124
- expect(second.articleTags.models.length).toEqual(3);
126
+ const second = articles.models[1];
127
+ expect(second.id).toEqual(12);
128
+ expect(second.person.id).toEqual(17);
129
+ expect(second.articleTags.models.length).toEqual(3);
125
130
 
126
- expect(second.articleTags.models[0].id).toEqual(33);
127
- expect(second.articleTags.models[0].tag.id).toEqual(1);
128
- expect(second.articleTags.models[1].id).toEqual(34);
129
- expect(second.articleTags.models[1].tag.id).toEqual(5);
130
- expect(second.articleTags.models[2].id).toEqual(35);
131
- expect(second.articleTags.models[2].tag.id).toEqual(15);
132
- });
131
+ expect(second.articleTags.models[0].id).toEqual(33);
132
+ expect(second.articleTags.models[0].tag.id).toEqual(1);
133
+ expect(second.articleTags.models[1].id).toEqual(34);
134
+ expect(second.articleTags.models[1].tag.id).toEqual(5);
135
+ expect(second.articleTags.models[2].id).toEqual(35);
136
+ expect(second.articleTags.models[2].tag.id).toEqual(15);
137
+ });
133
138
 
134
- // Tests for where a deeply nested node which points to a node, is itself
135
- // reused (not recreated each time) so that nodes pointing to it all stack
136
- // together on it, rather than each attaching to different replica nodes
137
- // which overwrite themselves on the node it points to.
138
- // The example here is with the productVariant node being reused so that
139
- // productVariantImages append to it, instead of each productVariantImage
140
- // living on its own productVariant (which would keep overwriting itself
141
- // on the actualProductVariant node).
142
- test('createFromDatabase where node is already seen', () => {
143
- const core = createCore({ entities: orderMoreEntities });
144
- const inventoryLevels = core.createFromDatabase(four);
139
+ // Tests for where a deeply nested node which points to a node, is itself
140
+ // reused (not recreated each time) so that nodes pointing to it all stack
141
+ // together on it, rather than each attaching to different replica nodes
142
+ // which overwrite themselves on the node it points to.
143
+ // The example here is with the productVariant node being reused so that
144
+ // productVariantImages append to it, instead of each productVariantImage
145
+ // living on its own productVariant (which would keep overwriting itself
146
+ // on the actualProductVariant node).
147
+ test('node is already seen', () => {
148
+ const core = createCore({ entities: orderMoreEntities });
149
+ const inventoryLevels = core.createFromDatabase(four);
145
150
 
146
- expect(inventoryLevels).toBeDefined();
151
+ expect(inventoryLevels).toBeDefined();
147
152
 
148
- const first = inventoryLevels?.models[0];
149
- expect(first?.id).toEqual(15);
150
- expect(first?.actualProductVariant.id).toEqual(120);
151
- expect(first?.actualProductVariant.productVariants.models.length).toEqual(1);
152
- expect(
153
- first?.actualProductVariant.productVariants.models[0].actualProductVariantId
154
- ).toEqual(120);
155
- // I think the above test is good enough, and not sure I actual care about below
156
- // expect(first.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(120);
157
- expect(first?.actualProductVariant.productVariants.models[0].id).toEqual(199);
158
- expect(
159
- first?.actualProductVariant.productVariants.models[0].color.id
160
- ).toEqual(1);
161
- expect(
162
- first?.actualProductVariant.productVariants.models[0].gender.id
163
- ).toEqual(1);
164
- expect(
165
- first?.actualProductVariant.productVariants.models[0].product.id
166
- ).toEqual(1);
167
- expect(first?.actualProductVariant.productVariants.models[0].size.id).toEqual(
168
- 4
169
- );
170
- expect(
171
- first?.actualProductVariant.productVariants.models[0].productVariantImages
172
- .models.length
173
- ).toEqual(7);
174
- expect(
175
- first?.actualProductVariant.productVariants.models[0].productVariantImages
176
- .models[0].id
177
- ).toEqual(621);
178
- expect(
179
- first?.actualProductVariant.productVariants.models[0].productVariantImages
180
- .models[1].id
181
- ).toEqual(709);
182
- expect(
183
- first?.actualProductVariant.productVariants.models[0].productVariantImages
184
- .models[2].id
185
- ).toEqual(797);
186
- expect(
187
- first?.actualProductVariant.productVariants.models[0].productVariantImages
188
- .models[3].id
189
- ).toEqual(885);
190
- expect(
191
- first?.actualProductVariant.productVariants.models[0].productVariantImages
192
- .models[4].id
193
- ).toEqual(973);
194
- expect(
195
- first?.actualProductVariant.productVariants.models[0].productVariantImages
196
- .models[5].id
197
- ).toEqual(1061);
198
- expect(
199
- first?.actualProductVariant.productVariants.models[0].productVariantImages
200
- .models[6].id
201
- ).toEqual(1149);
153
+ const first = inventoryLevels?.models[0];
154
+ expect(first?.id).toEqual(15);
155
+ expect(first?.actualProductVariant.id).toEqual(120);
156
+ expect(first?.actualProductVariant.productVariants.models.length).toEqual(
157
+ 1
158
+ );
159
+ expect(
160
+ first?.actualProductVariant.productVariants.models[0]
161
+ .actualProductVariantId
162
+ ).toEqual(120);
163
+ // I think the above test is good enough, and not sure I actual care about below
164
+ // expect(first.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(120);
165
+ expect(first?.actualProductVariant.productVariants.models[0].id).toEqual(
166
+ 199
167
+ );
168
+ expect(
169
+ first?.actualProductVariant.productVariants.models[0].color.id
170
+ ).toEqual(1);
171
+ expect(
172
+ first?.actualProductVariant.productVariants.models[0].gender.id
173
+ ).toEqual(1);
174
+ expect(
175
+ first?.actualProductVariant.productVariants.models[0].product.id
176
+ ).toEqual(1);
177
+ expect(
178
+ first?.actualProductVariant.productVariants.models[0].size.id
179
+ ).toEqual(4);
180
+ expect(
181
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
182
+ .models.length
183
+ ).toEqual(7);
184
+ expect(
185
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
186
+ .models[0].id
187
+ ).toEqual(621);
188
+ expect(
189
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
190
+ .models[1].id
191
+ ).toEqual(709);
192
+ expect(
193
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
194
+ .models[2].id
195
+ ).toEqual(797);
196
+ expect(
197
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
198
+ .models[3].id
199
+ ).toEqual(885);
200
+ expect(
201
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
202
+ .models[4].id
203
+ ).toEqual(973);
204
+ expect(
205
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
206
+ .models[5].id
207
+ ).toEqual(1061);
208
+ expect(
209
+ first?.actualProductVariant.productVariants.models[0].productVariantImages
210
+ .models[6].id
211
+ ).toEqual(1149);
202
212
 
203
- const second = inventoryLevels?.models[1];
204
- expect(second?.id).toEqual(35);
205
- expect(second?.actualProductVariant.id).toEqual(125);
206
- expect(second?.actualProductVariant.productVariants.models.length).toEqual(1);
207
- expect(
208
- second?.actualProductVariant.productVariants.models[0]
209
- .actualProductVariantId
210
- ).toEqual(125);
211
- // I think the above test is good enough, and not sure I actual care about below
212
- // expect(second.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(125);
213
- expect(second?.actualProductVariant.productVariants.models[0].id).toEqual(
214
- 209
215
- );
216
- expect(
217
- second?.actualProductVariant.productVariants.models[0].color.id
218
- ).toEqual(1);
219
- expect(
220
- second?.actualProductVariant.productVariants.models[0].gender.id
221
- ).toEqual(1);
222
- expect(
223
- second?.actualProductVariant.productVariants.models[0].product.id
224
- ).toEqual(1);
225
- expect(
226
- second?.actualProductVariant.productVariants.models[0].size.id
227
- ).toEqual(9);
228
- expect(
229
- second?.actualProductVariant.productVariants.models[0].productVariantImages
230
- .models.length
231
- ).toEqual(7);
232
- expect(
233
- second?.actualProductVariant.productVariants.models[0].productVariantImages
234
- .models[0].id
235
- ).toEqual(679);
236
- expect(
237
- second?.actualProductVariant.productVariants.models[0].productVariantImages
238
- .models[1].id
239
- ).toEqual(767);
240
- expect(
241
- second?.actualProductVariant.productVariants.models[0].productVariantImages
242
- .models[2].id
243
- ).toEqual(855);
244
- expect(
245
- second?.actualProductVariant.productVariants.models[0].productVariantImages
246
- .models[3].id
247
- ).toEqual(943);
248
- expect(
249
- second?.actualProductVariant.productVariants.models[0].productVariantImages
250
- .models[4].id
251
- ).toEqual(1031);
252
- expect(
253
- second?.actualProductVariant.productVariants.models[0].productVariantImages
254
- .models[5].id
255
- ).toEqual(1119);
256
- expect(
257
- second?.actualProductVariant.productVariants.models[0].productVariantImages
258
- .models[6].id
259
- ).toEqual(1207);
260
- });
213
+ const second = inventoryLevels?.models[1];
214
+ expect(second?.id).toEqual(35);
215
+ expect(second?.actualProductVariant.id).toEqual(125);
216
+ expect(second?.actualProductVariant.productVariants.models.length).toEqual(
217
+ 1
218
+ );
219
+ expect(
220
+ second?.actualProductVariant.productVariants.models[0]
221
+ .actualProductVariantId
222
+ ).toEqual(125);
223
+ // I think the above test is good enough, and not sure I actual care about below
224
+ // expect(second.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(125);
225
+ expect(second?.actualProductVariant.productVariants.models[0].id).toEqual(
226
+ 209
227
+ );
228
+ expect(
229
+ second?.actualProductVariant.productVariants.models[0].color.id
230
+ ).toEqual(1);
231
+ expect(
232
+ second?.actualProductVariant.productVariants.models[0].gender.id
233
+ ).toEqual(1);
234
+ expect(
235
+ second?.actualProductVariant.productVariants.models[0].product.id
236
+ ).toEqual(1);
237
+ expect(
238
+ second?.actualProductVariant.productVariants.models[0].size.id
239
+ ).toEqual(9);
240
+ expect(
241
+ second?.actualProductVariant.productVariants.models[0]
242
+ .productVariantImages.models.length
243
+ ).toEqual(7);
244
+ expect(
245
+ second?.actualProductVariant.productVariants.models[0]
246
+ .productVariantImages.models[0].id
247
+ ).toEqual(679);
248
+ expect(
249
+ second?.actualProductVariant.productVariants.models[0]
250
+ .productVariantImages.models[1].id
251
+ ).toEqual(767);
252
+ expect(
253
+ second?.actualProductVariant.productVariants.models[0]
254
+ .productVariantImages.models[2].id
255
+ ).toEqual(855);
256
+ expect(
257
+ second?.actualProductVariant.productVariants.models[0]
258
+ .productVariantImages.models[3].id
259
+ ).toEqual(943);
260
+ expect(
261
+ second?.actualProductVariant.productVariants.models[0]
262
+ .productVariantImages.models[4].id
263
+ ).toEqual(1031);
264
+ expect(
265
+ second?.actualProductVariant.productVariants.models[0]
266
+ .productVariantImages.models[5].id
267
+ ).toEqual(1119);
268
+ expect(
269
+ second?.actualProductVariant.productVariants.models[0]
270
+ .productVariantImages.models[6].id
271
+ ).toEqual(1207);
272
+ });
261
273
 
262
- // Test for a nested object (eg, parcel) with objects in it that referenced to
263
- // it (eg, parcel_events), correctly placing the objects (parcel_events) in
264
- // its (parcel) collection of models, and not errantly placing the established
265
- // parent node (parcel) as a direct reference of the child (parcel_event).
266
- // For example: the errant behavior was:
267
- // Parcel1
268
- // ParcelEvent1
269
- // Parcel1
270
- // ParcelEvent2
271
- // Instead of:
272
- // Parcel1
273
- // ParcelEvent1
274
- // ParcelEvent2
275
- // NOTE: if this test ever breaks, you can widdle the five.json file to just
276
- // the two relevant line items of the one relevant order. This test should
277
- // be doing that, but since code coverage all-around isn't great and I already
278
- // had this fuller json dump from production, I just used it all - YOLO.
279
- test('createFromDatabase where a deeply nested models property was misbehaving', () => {
280
- const core = createCore({ entities: fiveEntities });
281
- const orders = core.createFromDatabase(five);
282
- // The assertion that failed when the bug was present
283
- expect(
284
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
285
- .parcelEvents.models.length
286
- ).toEqual(2);
287
- // Lots of other assertions that are unrelated and shouldn't be here except
288
- // I'm insecure about the lack of tests so just going at it cause I can.
289
- expect(orders?.models[0].id).toEqual(14219);
290
- expect(orders?.models[0].email).toEqual('tswift@kujo.com');
291
- expect(orders?.models[0].lineItems.models.length).toEqual(2);
292
- expect(orders?.models[0].lineItems.models[0].id).toEqual(17298);
293
- expect(orders?.models[0].lineItems.models[0].orderId).toEqual(14219);
294
- expect(orders?.models[0].lineItems.models[1].id).toEqual(17297);
295
- expect(orders?.models[0].lineItems.models[1].orderId).toEqual(14219);
296
- expect(
297
- orders?.models[0].lineItems.models[1].parcelLineItems.models.length
298
- ).toEqual(1);
299
- expect(
300
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].id
301
- ).toEqual(1);
302
- expect(
303
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcelId
304
- ).toEqual(1);
305
- expect(
306
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].lineItemId
307
- ).toEqual(17297);
308
- expect(
309
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.id
310
- ).toEqual(1);
311
- expect(
312
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
313
- .parcelEvents.models.length
314
- ).toEqual(2);
315
- expect(
316
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
317
- .parcelEvents.models[0].id
318
- ).toEqual(3);
319
- expect(
320
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
321
- .parcelEvents.models[0].parcelId
322
- ).toEqual(1);
323
- expect(
324
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
325
- .parcelEvents.models[0].status
326
- ).toEqual('in_transit');
327
- expect(
328
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
329
- .parcelEvents.models[1].id
330
- ).toEqual(1);
331
- expect(
332
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
333
- .parcelEvents.models[1].parcelId
334
- ).toEqual(1);
335
- expect(
336
- orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
337
- .parcelEvents.models[1].status
338
- ).toEqual('placed');
339
- expect(orders?.models[1].id).toEqual(13888);
340
- expect(orders?.models[1].email).toEqual('tswift@kujo.com');
341
- expect(orders?.models[1].lineItems.models.length).toEqual(1);
342
- expect(orders?.models[1].lineItems.models[0].id).toEqual(16900);
343
- expect(orders?.models[1].lineItems.models[0].orderId).toEqual(13888);
344
- });
274
+ // Test for a nested object (eg, parcel) with objects in it that referenced to
275
+ // it (eg, parcel_events), correctly placing the objects (parcel_events) in
276
+ // its (parcel) collection of models, and not errantly placing the established
277
+ // parent node (parcel) as a direct reference of the child (parcel_event).
278
+ // For example: the errant behavior was:
279
+ // Parcel1
280
+ // ParcelEvent1
281
+ // Parcel1
282
+ // ParcelEvent2
283
+ // Instead of:
284
+ // Parcel1
285
+ // ParcelEvent1
286
+ // ParcelEvent2
287
+ // NOTE: if this test ever breaks, you can widdle the five.json file to just
288
+ // the two relevant line items of the one relevant order. This test should
289
+ // be doing that, but since code coverage all-around isn't great and I already
290
+ // had this fuller json dump from production, I just used it all - YOLO.
291
+ test('a deeply nested models property was misbehaving', () => {
292
+ const core = createCore({ entities: fiveEntities });
293
+ const orders = core.createFromDatabase(five);
294
+ // The assertion that failed when the bug was present
295
+ expect(
296
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
297
+ .parcelEvents.models.length
298
+ ).toEqual(2);
299
+ // Lots of other assertions that are unrelated and shouldn't be here except
300
+ // I'm insecure about the lack of tests so just going at it cause I can.
301
+ expect(orders?.models[0].id).toEqual(14219);
302
+ expect(orders?.models[0].email).toEqual('tswift@kujo.com');
303
+ expect(orders?.models[0].lineItems.models.length).toEqual(2);
304
+ expect(orders?.models[0].lineItems.models[0].id).toEqual(17298);
305
+ expect(orders?.models[0].lineItems.models[0].orderId).toEqual(14219);
306
+ expect(orders?.models[0].lineItems.models[1].id).toEqual(17297);
307
+ expect(orders?.models[0].lineItems.models[1].orderId).toEqual(14219);
308
+ expect(
309
+ orders?.models[0].lineItems.models[1].parcelLineItems.models.length
310
+ ).toEqual(1);
311
+ expect(
312
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].id
313
+ ).toEqual(1);
314
+ expect(
315
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcelId
316
+ ).toEqual(1);
317
+ expect(
318
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].lineItemId
319
+ ).toEqual(17297);
320
+ expect(
321
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.id
322
+ ).toEqual(1);
323
+ expect(
324
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
325
+ .parcelEvents.models.length
326
+ ).toEqual(2);
327
+ expect(
328
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
329
+ .parcelEvents.models[0].id
330
+ ).toEqual(3);
331
+ expect(
332
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
333
+ .parcelEvents.models[0].parcelId
334
+ ).toEqual(1);
335
+ expect(
336
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
337
+ .parcelEvents.models[0].status
338
+ ).toEqual('in_transit');
339
+ expect(
340
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
341
+ .parcelEvents.models[1].id
342
+ ).toEqual(1);
343
+ expect(
344
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
345
+ .parcelEvents.models[1].parcelId
346
+ ).toEqual(1);
347
+ expect(
348
+ orders?.models[0].lineItems.models[1].parcelLineItems.models[0].parcel
349
+ .parcelEvents.models[1].status
350
+ ).toEqual('placed');
351
+ expect(orders?.models[1].id).toEqual(13888);
352
+ expect(orders?.models[1].email).toEqual('tswift@kujo.com');
353
+ expect(orders?.models[1].lineItems.models.length).toEqual(1);
354
+ expect(orders?.models[1].lineItems.models[0].id).toEqual(16900);
355
+ expect(orders?.models[1].lineItems.models[0].orderId).toEqual(13888);
356
+ });
345
357
 
346
- // Problem:
347
- // Parcel
348
- // ParcelLineItem
349
- // LineItem
350
- // Order
351
- // Customer
352
- // ParcelLineItem
353
- // LineItem
354
- // [MISSING ORDER]
355
- // Issue occcurs in nestClump
356
- // Problem only surfaced when custom was included
357
- test('createOneFromDatabase where a deeply nested models property was misbehaving', () => {
358
- const core = createCore({ entities: sixEntities });
359
- const parcel = core.createOneFromDatabase(six);
360
- // The assertion that failed when the bug was present
361
- expect(parcel.parcelLineItems.models[1].lineItem.order).toBeDefined();
362
- // Lots of other assertions that are unrelated and shouldn't be here except
363
- // I'm insecure about the lack of tests so just going at it cause I can.
364
- expect(parcel.id).toEqual(1);
365
- expect(parcel.parcelLineItems.models.length).toEqual(2);
366
- expect(parcel.parcelLineItems.models[0].id).toEqual(604);
367
- expect(parcel.parcelLineItems.models[0].lineItem.id).toEqual(17298);
368
- expect(parcel.parcelLineItems.models[0].lineItem.order.id).toEqual(14219);
369
- expect(parcel.parcelLineItems.models[0].lineItem.order.customer.id).toEqual(
370
- 5390
371
- );
372
- expect(
373
- parcel.parcelLineItems.models[0].lineItem.order.customer.email
374
- ).toEqual('tswift@kujo.com');
375
- expect(parcel.parcelLineItems.models[1].id).toEqual(605);
376
- expect(parcel.parcelLineItems.models[1].lineItem.id).toEqual(17297);
377
- expect(parcel.parcelLineItems.models[1].lineItem.order.id).toEqual(14219);
378
- expect(parcel.parcelLineItems.models[1].lineItem.order.customer.id).toEqual(
379
- 5390
380
- );
381
- expect(
382
- parcel.parcelLineItems.models[1].lineItem.order.customer.email
383
- ).toEqual('tswift@kujo.com');
384
- });
358
+ // Problem:
359
+ // Parcel
360
+ // ParcelLineItem
361
+ // LineItem
362
+ // Order
363
+ // Customer
364
+ // ParcelLineItem
365
+ // LineItem
366
+ // [MISSING ORDER]
367
+ // Issue occcurs in nestClump
368
+ // Problem only surfaced when custom was included
369
+ test('a deeply nested models property was misbehaving', () => {
370
+ const core = createCore({ entities: sixEntities });
371
+ const parcels = core.createFromDatabase(six);
372
+ expect(parcels.models.length).toEqual(1);
373
+ const parcel = parcels.models[0];
374
+ // The assertion that failed when the bug was present
375
+ expect(parcel.parcelLineItems.models[1].lineItem.order).toBeDefined();
376
+ // Lots of other assertions that are unrelated and shouldn't be here except
377
+ // I'm insecure about the lack of tests so just going at it cause I can.
378
+ expect(parcel.id).toEqual(1);
379
+ expect(parcel.parcelLineItems.models.length).toEqual(2);
380
+ expect(parcel.parcelLineItems.models[0].id).toEqual(604);
381
+ expect(parcel.parcelLineItems.models[0].lineItem.id).toEqual(17298);
382
+ expect(parcel.parcelLineItems.models[0].lineItem.order.id).toEqual(14219);
383
+ expect(parcel.parcelLineItems.models[0].lineItem.order.customer.id).toEqual(
384
+ 5390
385
+ );
386
+ expect(
387
+ parcel.parcelLineItems.models[0].lineItem.order.customer.email
388
+ ).toEqual('tswift@kujo.com');
389
+ expect(parcel.parcelLineItems.models[1].id).toEqual(605);
390
+ expect(parcel.parcelLineItems.models[1].lineItem.id).toEqual(17297);
391
+ expect(parcel.parcelLineItems.models[1].lineItem.order.id).toEqual(14219);
392
+ expect(parcel.parcelLineItems.models[1].lineItem.order.customer.id).toEqual(
393
+ 5390
394
+ );
395
+ expect(
396
+ parcel.parcelLineItems.models[1].lineItem.order.customer.email
397
+ ).toEqual('tswift@kujo.com');
398
+ });
385
399
 
386
- // Problem:
387
- // InventoryLevel
388
- // ActualProductVariant
389
- // ProductVariant(1)
390
- // Color
391
- // ProductVariant(2)
392
- // Instead of:
393
- // InventoryLevel
394
- // ActualProductVariant
395
- // ProductVariant
396
- // Color
397
- // ProductVariant(2)
398
- // Color
399
- // Issue occcurs in nestClump
400
- test('createOneFromDatabase where a deeply nested models property was attaching to wrong parent', () => {
401
- const core = createCore({ entities: orderMoreEntities });
402
- const inventoryLevel = core.createOneFromDatabase(seven);
403
- // The assertion that failed when the bug was present
404
- expect(
405
- inventoryLevel.actualProductVariant.productVariants.models[1]
406
- ).toBeDefined();
407
- // Lots of other assertions that are unrelated and shouldn't be here except
408
- // I'm insecure about the lack of tests so just going at it cause I can.
409
- expect(inventoryLevel.id).toEqual(30);
410
- expect(inventoryLevel.actualProductVariant.id).toEqual(15);
411
- expect(
412
- inventoryLevel.actualProductVariant.productVariants.models.length
413
- ).toEqual(2);
414
- expect(
415
- inventoryLevel.actualProductVariant.productVariants.models[0].id
416
- ).toEqual(179);
417
- expect(
418
- inventoryLevel.actualProductVariant.productVariants.models[0].color.id
419
- ).toEqual(4);
420
- expect(
421
- inventoryLevel.actualProductVariant.productVariants.models[0].gender.id
422
- ).toEqual(1);
423
- expect(
424
- inventoryLevel.actualProductVariant.productVariants.models[0].size.id
425
- ).toEqual(8);
426
- expect(
427
- inventoryLevel.actualProductVariant.productVariants.models[1].id
428
- ).toEqual(180);
429
- expect(
430
- inventoryLevel.actualProductVariant.productVariants.models[1].color.id
431
- ).toEqual(4);
432
- expect(
433
- inventoryLevel.actualProductVariant.productVariants.models[1].gender.id
434
- ).toEqual(2);
435
- expect(
436
- inventoryLevel.actualProductVariant.productVariants.models[1].size.id
437
- ).toEqual(11);
438
- });
400
+ // Problem:
401
+ // InventoryLevel
402
+ // ActualProductVariant
403
+ // ProductVariant(1)
404
+ // Color
405
+ // ProductVariant(2)
406
+ // Instead of:
407
+ // InventoryLevel
408
+ // ActualProductVariant
409
+ // ProductVariant
410
+ // Color
411
+ // ProductVariant(2)
412
+ // Color
413
+ // Issue occcurs in nestClump
414
+ test('a deeply nested models property was attaching to wrong parent', () => {
415
+ const core = createCore({ entities: orderMoreEntities });
416
+ const inventoryLevels = core.createFromDatabase(seven);
417
+ expect(inventoryLevels.models.length).toEqual(1);
418
+ const inventoryLevel = inventoryLevels.models[0];
419
+ // The assertion that failed when the bug was present
420
+ expect(
421
+ inventoryLevel.actualProductVariant.productVariants.models[1]
422
+ ).toBeDefined();
423
+ // Lots of other assertions that are unrelated and shouldn't be here except
424
+ // I'm insecure about the lack of tests so just going at it cause I can.
425
+ expect(inventoryLevel.id).toEqual(30);
426
+ expect(inventoryLevel.actualProductVariant.id).toEqual(15);
427
+ expect(
428
+ inventoryLevel.actualProductVariant.productVariants.models.length
429
+ ).toEqual(2);
430
+ expect(
431
+ inventoryLevel.actualProductVariant.productVariants.models[0].id
432
+ ).toEqual(179);
433
+ expect(
434
+ inventoryLevel.actualProductVariant.productVariants.models[0].color.id
435
+ ).toEqual(4);
436
+ expect(
437
+ inventoryLevel.actualProductVariant.productVariants.models[0].gender.id
438
+ ).toEqual(1);
439
+ expect(
440
+ inventoryLevel.actualProductVariant.productVariants.models[0].size.id
441
+ ).toEqual(8);
442
+ expect(
443
+ inventoryLevel.actualProductVariant.productVariants.models[1].id
444
+ ).toEqual(180);
445
+ expect(
446
+ inventoryLevel.actualProductVariant.productVariants.models[1].color.id
447
+ ).toEqual(4);
448
+ expect(
449
+ inventoryLevel.actualProductVariant.productVariants.models[1].gender.id
450
+ ).toEqual(2);
451
+ expect(
452
+ inventoryLevel.actualProductVariant.productVariants.models[1].size.id
453
+ ).toEqual(11);
454
+ });
439
455
 
440
- // Problem:
441
- // Shipment
442
- // ShipmentActualProductVariant
443
- // ActualProductVariant
444
- // ProductVariant(1)
445
- // Product
446
- // ProductVariant(2)
447
- // ShipmentActualProductVariant
448
- // ActualProductVariant
449
- // Instead of:
450
- // Shipment
451
- // ShipmentActualProductVariant
452
- // ActualProductVariant
453
- // ProductVariant(1)
454
- // Product
455
- // ShipmentActualProductVariant
456
- // ActualProductVariant
457
- // ProductVariant(2)
458
- // Product
459
- // Issue occcurs in nestClump
460
- test('createFromDatabase where a deeply nested models property was attaching to wrong parent 2', () => {
461
- const core = createCore({ entities: orderMoreEntities });
462
- const shipments = core.createFromDatabase(eight);
463
- // The assertion that failed when the bug was present
464
- expect(
465
- shipments?.models[0].shipmentActualProductVariants.models[1]
466
- .actualProductVariant.productVariants
467
- ).toBeDefined();
468
- // IN ADDITION TO ABOVE ASSERTION and helpful test description of what is
469
- // being tested, the below tests tease out some logic that was hitherto
470
- // incorrect. This "some logic" should be defined and have separate tests
471
- // and jazz, but my brain hurts so TLDR these below tests are important but
472
- // (somewhat?) unrelated to the example/assertion above. "Are you serious?!"
473
- expect(shipments?.models.length).toEqual(2);
456
+ // Problem:
457
+ // Shipment
458
+ // ShipmentActualProductVariant
459
+ // ActualProductVariant
460
+ // ProductVariant(1)
461
+ // Product
462
+ // ProductVariant(2)
463
+ // ShipmentActualProductVariant
464
+ // ActualProductVariant
465
+ // Instead of:
466
+ // Shipment
467
+ // ShipmentActualProductVariant
468
+ // ActualProductVariant
469
+ // ProductVariant(1)
470
+ // Product
471
+ // ShipmentActualProductVariant
472
+ // ActualProductVariant
473
+ // ProductVariant(2)
474
+ // Product
475
+ // Issue occcurs in nestClump
476
+ test('a deeply nested models property was attaching to wrong parent 2', () => {
477
+ const core = createCore({ entities: orderMoreEntities });
478
+ const shipments = core.createFromDatabase(eight);
479
+ // The assertion that failed when the bug was present
480
+ expect(
481
+ shipments?.models[0].shipmentActualProductVariants.models[1]
482
+ .actualProductVariant.productVariants
483
+ ).toBeDefined();
484
+ // IN ADDITION TO ABOVE ASSERTION and helpful test description of what is
485
+ // being tested, the below tests tease out some logic that was hitherto
486
+ // incorrect. This "some logic" should be defined and have separate tests
487
+ // and jazz, but my brain hurts so TLDR these below tests are important but
488
+ // (somewhat?) unrelated to the example/assertion above. "Are you serious?!"
489
+ expect(shipments?.models.length).toEqual(2);
474
490
 
475
- expect(shipments?.models[0].id).toEqual(19);
476
- expect(
477
- shipments?.models[0].shipmentActualProductVariants.models.length
478
- ).toEqual(2);
479
- expect(
480
- shipments?.models[0].shipmentActualProductVariants.models[0].id
481
- ).toEqual(25);
482
- expect(
483
- shipments?.models[0].shipmentActualProductVariants.models[0]
484
- .actualProductVariant.id
485
- ).toEqual(65);
486
- expect(
487
- shipments?.models[0].shipmentActualProductVariants.models[0]
488
- .actualProductVariant.productVariants.models.length
489
- ).toEqual(2);
490
- expect(
491
- shipments?.models[0].shipmentActualProductVariants.models[0]
492
- .actualProductVariant.productVariants.models[0].id
493
- ).toEqual(310);
494
- expect(
495
- shipments?.models[0].shipmentActualProductVariants.models[0]
496
- .actualProductVariant.productVariants.models[0].product.id
497
- ).toEqual(1);
498
- expect(
499
- shipments?.models[0].shipmentActualProductVariants.models[0]
500
- .actualProductVariant.productVariants.models[0].size.id
501
- ).toEqual(1);
502
- expect(
503
- shipments?.models[0].shipmentActualProductVariants.models[0]
504
- .actualProductVariant.productVariants.models[0].color.id
505
- ).toEqual(1);
506
- expect(
507
- shipments?.models[0].shipmentActualProductVariants.models[0]
508
- .actualProductVariant.productVariants.models[0].gender.id
509
- ).toEqual(1);
510
- expect(
511
- shipments?.models[0].shipmentActualProductVariants.models[0]
512
- .actualProductVariant.productVariants.models[1].id
513
- ).toEqual(309);
514
- expect(
515
- shipments?.models[0].shipmentActualProductVariants.models[0]
516
- .actualProductVariant.productVariants.models[1].product.id
517
- ).toEqual(2);
518
- expect(
519
- shipments?.models[0].shipmentActualProductVariants.models[0]
520
- .actualProductVariant.productVariants.models[1].size.id
521
- ).toEqual(4);
522
- expect(
523
- shipments?.models[0].shipmentActualProductVariants.models[0]
524
- .actualProductVariant.productVariants.models[1].color.id
525
- ).toEqual(1);
526
- expect(
527
- shipments?.models[0].shipmentActualProductVariants.models[0]
528
- .actualProductVariant.productVariants.models[1].gender.id
529
- ).toEqual(2);
530
- expect(
531
- shipments?.models[0].shipmentActualProductVariants.models[1].id
532
- ).toEqual(26);
533
- expect(
534
- shipments?.models[0].shipmentActualProductVariants.models[1]
535
- .actualProductVariant.id
536
- ).toEqual(25);
537
- expect(
538
- shipments?.models[0].shipmentActualProductVariants.models[1]
539
- .actualProductVariant.productVariants.models.length
540
- ).toEqual(2);
541
- expect(
542
- shipments?.models[0].shipmentActualProductVariants.models[1]
543
- .actualProductVariant.productVariants.models[0].id
544
- ).toEqual(194);
545
- expect(
546
- shipments?.models[0].shipmentActualProductVariants.models[1]
547
- .actualProductVariant.productVariants.models[0].product.id
548
- ).toEqual(1);
549
- expect(
550
- shipments?.models[0].shipmentActualProductVariants.models[1]
551
- .actualProductVariant.productVariants.models[0].size.id
552
- ).toEqual(2);
553
- expect(
554
- shipments?.models[0].shipmentActualProductVariants.models[1]
555
- .actualProductVariant.productVariants.models[0].color.id
556
- ).toEqual(1);
557
- expect(
558
- shipments?.models[0].shipmentActualProductVariants.models[1]
559
- .actualProductVariant.productVariants.models[0].gender.id
560
- ).toEqual(1);
561
- expect(
562
- shipments?.models[0].shipmentActualProductVariants.models[1]
563
- .actualProductVariant.productVariants.models[1].id
564
- ).toEqual(195);
565
- expect(
566
- shipments?.models[0].shipmentActualProductVariants.models[1]
567
- .actualProductVariant.productVariants.models[1].product.id
568
- ).toEqual(2);
569
- expect(
570
- shipments?.models[0].shipmentActualProductVariants.models[1]
571
- .actualProductVariant.productVariants.models[1].size.id
572
- ).toEqual(5);
573
- expect(
574
- shipments?.models[0].shipmentActualProductVariants.models[1]
575
- .actualProductVariant.productVariants.models[1].color.id
576
- ).toEqual(1);
577
- expect(
578
- shipments?.models[0].shipmentActualProductVariants.models[1]
579
- .actualProductVariant.productVariants.models[1].gender.id
580
- ).toEqual(2);
581
- expect(shipments?.models[1].id).toEqual(18);
582
- expect(
583
- shipments?.models[1].shipmentActualProductVariants.models.length
584
- ).toEqual(1);
585
- expect(
586
- shipments?.models[1].shipmentActualProductVariants.models[0].id
587
- ).toEqual(1);
588
- expect(
589
- shipments?.models[1].shipmentActualProductVariants.models[0]
590
- .actualProductVariant.id
591
- ).toEqual(25);
592
- expect(
593
- shipments?.models[1].shipmentActualProductVariants.models[0]
594
- .actualProductVariant.productVariants.models.length
595
- ).toEqual(2);
596
- expect(
597
- shipments?.models[1].shipmentActualProductVariants.models[0]
598
- .actualProductVariant.productVariants.models[0].id
599
- ).toEqual(194);
600
- expect(
601
- shipments?.models[1].shipmentActualProductVariants.models[0]
602
- .actualProductVariant.productVariants.models[0].product.id
603
- ).toEqual(1);
604
- expect(
605
- shipments?.models[1].shipmentActualProductVariants.models[0]
606
- .actualProductVariant.productVariants.models[0].size.id
607
- ).toEqual(2);
608
- expect(
609
- shipments?.models[1].shipmentActualProductVariants.models[0]
610
- .actualProductVariant.productVariants.models[0].color.id
611
- ).toEqual(1);
612
- expect(
613
- shipments?.models[1].shipmentActualProductVariants.models[0]
614
- .actualProductVariant.productVariants.models[0].gender.id
615
- ).toEqual(1);
616
- expect(
617
- shipments?.models[1].shipmentActualProductVariants.models[0]
618
- .actualProductVariant.productVariants.models[1].id
619
- ).toEqual(195);
620
- expect(
621
- shipments?.models[1].shipmentActualProductVariants.models[0]
622
- .actualProductVariant.productVariants.models[1].product.id
623
- ).toEqual(2);
624
- expect(
625
- shipments?.models[1].shipmentActualProductVariants.models[0]
626
- .actualProductVariant.productVariants.models[1].size.id
627
- ).toEqual(5);
628
- expect(
629
- shipments?.models[1].shipmentActualProductVariants.models[0]
630
- .actualProductVariant.productVariants.models[1].color.id
631
- ).toEqual(1);
632
- expect(
633
- shipments?.models[1].shipmentActualProductVariants.models[0]
634
- .actualProductVariant.productVariants.models[1].gender.id
635
- ).toEqual(2);
636
- });
491
+ expect(shipments?.models[0].id).toEqual(19);
492
+ expect(
493
+ shipments?.models[0].shipmentActualProductVariants.models.length
494
+ ).toEqual(2);
495
+ expect(
496
+ shipments?.models[0].shipmentActualProductVariants.models[0].id
497
+ ).toEqual(25);
498
+ expect(
499
+ shipments?.models[0].shipmentActualProductVariants.models[0]
500
+ .actualProductVariant.id
501
+ ).toEqual(65);
502
+ expect(
503
+ shipments?.models[0].shipmentActualProductVariants.models[0]
504
+ .actualProductVariant.productVariants.models.length
505
+ ).toEqual(2);
506
+ expect(
507
+ shipments?.models[0].shipmentActualProductVariants.models[0]
508
+ .actualProductVariant.productVariants.models[0].id
509
+ ).toEqual(310);
510
+ expect(
511
+ shipments?.models[0].shipmentActualProductVariants.models[0]
512
+ .actualProductVariant.productVariants.models[0].product.id
513
+ ).toEqual(1);
514
+ expect(
515
+ shipments?.models[0].shipmentActualProductVariants.models[0]
516
+ .actualProductVariant.productVariants.models[0].size.id
517
+ ).toEqual(1);
518
+ expect(
519
+ shipments?.models[0].shipmentActualProductVariants.models[0]
520
+ .actualProductVariant.productVariants.models[0].color.id
521
+ ).toEqual(1);
522
+ expect(
523
+ shipments?.models[0].shipmentActualProductVariants.models[0]
524
+ .actualProductVariant.productVariants.models[0].gender.id
525
+ ).toEqual(1);
526
+ expect(
527
+ shipments?.models[0].shipmentActualProductVariants.models[0]
528
+ .actualProductVariant.productVariants.models[1].id
529
+ ).toEqual(309);
530
+ expect(
531
+ shipments?.models[0].shipmentActualProductVariants.models[0]
532
+ .actualProductVariant.productVariants.models[1].product.id
533
+ ).toEqual(2);
534
+ expect(
535
+ shipments?.models[0].shipmentActualProductVariants.models[0]
536
+ .actualProductVariant.productVariants.models[1].size.id
537
+ ).toEqual(4);
538
+ expect(
539
+ shipments?.models[0].shipmentActualProductVariants.models[0]
540
+ .actualProductVariant.productVariants.models[1].color.id
541
+ ).toEqual(1);
542
+ expect(
543
+ shipments?.models[0].shipmentActualProductVariants.models[0]
544
+ .actualProductVariant.productVariants.models[1].gender.id
545
+ ).toEqual(2);
546
+ expect(
547
+ shipments?.models[0].shipmentActualProductVariants.models[1].id
548
+ ).toEqual(26);
549
+ expect(
550
+ shipments?.models[0].shipmentActualProductVariants.models[1]
551
+ .actualProductVariant.id
552
+ ).toEqual(25);
553
+ expect(
554
+ shipments?.models[0].shipmentActualProductVariants.models[1]
555
+ .actualProductVariant.productVariants.models.length
556
+ ).toEqual(2);
557
+ expect(
558
+ shipments?.models[0].shipmentActualProductVariants.models[1]
559
+ .actualProductVariant.productVariants.models[0].id
560
+ ).toEqual(194);
561
+ expect(
562
+ shipments?.models[0].shipmentActualProductVariants.models[1]
563
+ .actualProductVariant.productVariants.models[0].product.id
564
+ ).toEqual(1);
565
+ expect(
566
+ shipments?.models[0].shipmentActualProductVariants.models[1]
567
+ .actualProductVariant.productVariants.models[0].size.id
568
+ ).toEqual(2);
569
+ expect(
570
+ shipments?.models[0].shipmentActualProductVariants.models[1]
571
+ .actualProductVariant.productVariants.models[0].color.id
572
+ ).toEqual(1);
573
+ expect(
574
+ shipments?.models[0].shipmentActualProductVariants.models[1]
575
+ .actualProductVariant.productVariants.models[0].gender.id
576
+ ).toEqual(1);
577
+ expect(
578
+ shipments?.models[0].shipmentActualProductVariants.models[1]
579
+ .actualProductVariant.productVariants.models[1].id
580
+ ).toEqual(195);
581
+ expect(
582
+ shipments?.models[0].shipmentActualProductVariants.models[1]
583
+ .actualProductVariant.productVariants.models[1].product.id
584
+ ).toEqual(2);
585
+ expect(
586
+ shipments?.models[0].shipmentActualProductVariants.models[1]
587
+ .actualProductVariant.productVariants.models[1].size.id
588
+ ).toEqual(5);
589
+ expect(
590
+ shipments?.models[0].shipmentActualProductVariants.models[1]
591
+ .actualProductVariant.productVariants.models[1].color.id
592
+ ).toEqual(1);
593
+ expect(
594
+ shipments?.models[0].shipmentActualProductVariants.models[1]
595
+ .actualProductVariant.productVariants.models[1].gender.id
596
+ ).toEqual(2);
597
+ expect(shipments?.models[1].id).toEqual(18);
598
+ expect(
599
+ shipments?.models[1].shipmentActualProductVariants.models.length
600
+ ).toEqual(1);
601
+ expect(
602
+ shipments?.models[1].shipmentActualProductVariants.models[0].id
603
+ ).toEqual(1);
604
+ expect(
605
+ shipments?.models[1].shipmentActualProductVariants.models[0]
606
+ .actualProductVariant.id
607
+ ).toEqual(25);
608
+ expect(
609
+ shipments?.models[1].shipmentActualProductVariants.models[0]
610
+ .actualProductVariant.productVariants.models.length
611
+ ).toEqual(2);
612
+ expect(
613
+ shipments?.models[1].shipmentActualProductVariants.models[0]
614
+ .actualProductVariant.productVariants.models[0].id
615
+ ).toEqual(194);
616
+ expect(
617
+ shipments?.models[1].shipmentActualProductVariants.models[0]
618
+ .actualProductVariant.productVariants.models[0].product.id
619
+ ).toEqual(1);
620
+ expect(
621
+ shipments?.models[1].shipmentActualProductVariants.models[0]
622
+ .actualProductVariant.productVariants.models[0].size.id
623
+ ).toEqual(2);
624
+ expect(
625
+ shipments?.models[1].shipmentActualProductVariants.models[0]
626
+ .actualProductVariant.productVariants.models[0].color.id
627
+ ).toEqual(1);
628
+ expect(
629
+ shipments?.models[1].shipmentActualProductVariants.models[0]
630
+ .actualProductVariant.productVariants.models[0].gender.id
631
+ ).toEqual(1);
632
+ expect(
633
+ shipments?.models[1].shipmentActualProductVariants.models[0]
634
+ .actualProductVariant.productVariants.models[1].id
635
+ ).toEqual(195);
636
+ expect(
637
+ shipments?.models[1].shipmentActualProductVariants.models[0]
638
+ .actualProductVariant.productVariants.models[1].product.id
639
+ ).toEqual(2);
640
+ expect(
641
+ shipments?.models[1].shipmentActualProductVariants.models[0]
642
+ .actualProductVariant.productVariants.models[1].size.id
643
+ ).toEqual(5);
644
+ expect(
645
+ shipments?.models[1].shipmentActualProductVariants.models[0]
646
+ .actualProductVariant.productVariants.models[1].color.id
647
+ ).toEqual(1);
648
+ expect(
649
+ shipments?.models[1].shipmentActualProductVariants.models[0]
650
+ .actualProductVariant.productVariants.models[1].gender.id
651
+ ).toEqual(2);
652
+ });
637
653
 
638
- // Issue occcurs in nestClump
639
- // Problem is with only top level nodes
640
- test('createFromDatabase with just top level nodes', () => {
641
- const core = createCore({ entities: nineEntities });
642
- let featureSwitches;
643
- try {
644
- // This failed when the bug was present
645
- featureSwitches = core.createFromDatabase(nine);
646
- } catch (e) {
647
- expect(e).not.toBeDefined();
648
- }
649
- expect(featureSwitches).toBeDefined();
650
- // Lots of other assertions that are unrelated and shouldn't be here except
651
- // I'm insecure about the lack of tests so just going at it cause I can.
652
- expect(featureSwitches?.models.length).toEqual(2);
653
- expect(featureSwitches?.models[0].id).toEqual('google_one_tap_sign_in');
654
- expect(featureSwitches?.models[1].id).toEqual('website_live_chat');
655
- });
654
+ // Issue occcurs in nestClump
655
+ // Problem is with only top level nodes
656
+ test('just top level nodes', () => {
657
+ const core = createCore({ entities: nineEntities });
658
+ let featureSwitches;
659
+ try {
660
+ // This failed when the bug was present
661
+ featureSwitches = core.createFromDatabase(nine);
662
+ } catch (e) {
663
+ expect(e).not.toBeDefined();
664
+ }
665
+ expect(featureSwitches).toBeDefined();
666
+ // Lots of other assertions that are unrelated and shouldn't be here except
667
+ // I'm insecure about the lack of tests so just going at it cause I can.
668
+ expect(featureSwitches?.models.length).toEqual(2);
669
+ expect(featureSwitches?.models[0].id).toEqual('google_one_tap_sign_in');
670
+ expect(featureSwitches?.models[1].id).toEqual('website_live_chat');
671
+ });
656
672
 
657
- // Issue occcurs in nestClump
658
- // Problem is when oldest parent is an empty join record and is not included
659
- // which results in the oldest parent search returning -1 and parent heirarchy
660
- // is thus messed up.
661
- test('createFromDatabase 10', () => {
662
- const core = createCore({ entities: orderMoreEntities });
663
- let orders;
664
- try {
665
- // This failed when the bug was present
666
- orders = core.createFromDatabase(ten);
667
- } catch (e) {
668
- expect(e).not.toBeDefined();
669
- }
670
- expect(orders).toBeDefined();
671
- // Lots of other assertions that are unrelated and shouldn't be here except
672
- // I'm insecure about the lack of tests so just going at it cause I can.
673
- expect(orders?.models.length).toEqual(5);
673
+ // Issue occcurs in nestClump
674
+ // Problem is when oldest parent is an empty join record and is not included
675
+ // which results in the oldest parent search returning -1 and parent heirarchy
676
+ // is thus messed up.
677
+ test('10', () => {
678
+ const core = createCore({ entities: orderMoreEntities });
679
+ let orders;
680
+ try {
681
+ // This failed when the bug was present
682
+ orders = core.createFromDatabase(ten);
683
+ } catch (e) {
684
+ expect(e).not.toBeDefined();
685
+ }
686
+ expect(orders).toBeDefined();
687
+ // Lots of other assertions that are unrelated and shouldn't be here except
688
+ // I'm insecure about the lack of tests so just going at it cause I can.
689
+ expect(orders?.models.length).toEqual(5);
674
690
 
675
- expect(orders?.models[0].id).toEqual(24591);
676
- expect(orders?.models[0].customer.id).toEqual(5390);
677
- expect(orders?.models[0].physicalAddress.id).toEqual(48982);
678
- expect(orders?.models[0].lineItems.models.length).toEqual(1);
679
- expect(orders?.models[0].lineItems.models[0].id).toEqual(29883);
680
- expect(orders?.models[0].lineItems.models[0].productVariant.id).toEqual(158);
681
- expect(
682
- orders?.models[0].lineItems.models[0].productVariant.product.id
683
- ).toEqual(1);
684
- expect(orders?.models[0].lineItems.models[0].productVariant.size.id).toEqual(
685
- 9
686
- );
687
- expect(orders?.models[0].lineItems.models[0].productVariant.color.id).toEqual(
688
- 3
689
- );
690
- expect(
691
- orders?.models[0].lineItems.models[0].productVariant.gender.id
692
- ).toEqual(1);
693
- expect(
694
- orders?.models[0].lineItems.models[0].productVariant.productVariantImages
695
- .models.length
696
- ).toEqual(1);
697
- expect(
698
- orders?.models[0].lineItems.models[0].productVariant.productVariantImages
699
- .models[0].id
700
- ).toEqual(17);
701
- expect(
702
- orders?.models[0].lineItems.models[0].parcelLineItems.models.length
703
- ).toEqual(1);
704
- expect(
705
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].id
706
- ).toEqual(6100);
707
- expect(
708
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.id
709
- ).toEqual(5942);
710
- expect(
711
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
712
- .parcelEvents.models.length
713
- ).toEqual(14);
714
- expect(
715
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
716
- .parcelEvents.models[0].id
717
- ).toEqual(193775);
718
- expect(
719
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
720
- .parcelEvents.models[1].id
721
- ).toEqual(193774);
722
- expect(
723
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
724
- .parcelEvents.models[2].id
725
- ).toEqual(193773);
726
- expect(
727
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
728
- .parcelEvents.models[3].id
729
- ).toEqual(193425);
730
- expect(
731
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
732
- .parcelEvents.models[4].id
733
- ).toEqual(193424);
734
- expect(
735
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
736
- .parcelEvents.models[5].id
737
- ).toEqual(193423);
738
- expect(
739
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
740
- .parcelEvents.models[6].id
741
- ).toEqual(192713);
742
- expect(
743
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
744
- .parcelEvents.models[7].id
745
- ).toEqual(192712);
746
- expect(
747
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
748
- .parcelEvents.models[8].id
749
- ).toEqual(192711);
750
- expect(
751
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
752
- .parcelEvents.models[9].id
753
- ).toEqual(192709);
754
- expect(
755
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
756
- .parcelEvents.models[10].id
757
- ).toEqual(192171);
758
- expect(
759
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
760
- .parcelEvents.models[11].id
761
- ).toEqual(192170);
762
- expect(
763
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
764
- .parcelEvents.models[12].id
765
- ).toEqual(192169);
766
- expect(
767
- orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
768
- .parcelEvents.models[13].id
769
- ).toEqual(191790);
770
- expect(orders?.models[1].id).toEqual(24589);
771
- expect(orders?.models[1].customer.id).toEqual(5390);
772
- expect(orders?.models[1].physicalAddress.id).toEqual(48982);
773
- expect(orders?.models[1].lineItems.models.length).toEqual(1);
774
- expect(orders?.models[1].lineItems.models[0].id).toEqual(29880);
775
- expect(orders?.models[1].lineItems.models[0].productVariant.id).toEqual(158);
776
- expect(
777
- orders?.models[1].lineItems.models[0].productVariant.product.id
778
- ).toEqual(1);
779
- expect(orders?.models[1].lineItems.models[0].productVariant.size.id).toEqual(
780
- 9
781
- );
782
- expect(orders?.models[1].lineItems.models[0].productVariant.color.id).toEqual(
783
- 3
784
- );
785
- expect(
786
- orders?.models[1].lineItems.models[0].productVariant.gender.id
787
- ).toEqual(1);
788
- expect(
789
- orders?.models[1].lineItems.models[0].productVariant.productVariantImages
790
- .models.length
791
- ).toEqual(1);
792
- expect(
793
- orders?.models[1].lineItems.models[0].productVariant.productVariantImages
794
- .models[0].id
795
- ).toEqual(17);
796
- expect(orders?.models[2].id).toEqual(24587);
797
- expect(orders?.models[2].customer.id).toEqual(5390);
798
- expect(orders?.models[2].physicalAddress.id).toEqual(28145);
799
- expect(orders?.models[2].lineItems.models.length).toEqual(1);
800
- expect(orders?.models[2].lineItems.models[0].id).toEqual(29877);
801
- expect(orders?.models[2].lineItems.models[0].productVariant.id).toEqual(158);
802
- expect(
803
- orders?.models[2].lineItems.models[0].productVariant.product.id
804
- ).toEqual(1);
805
- expect(orders?.models[2].lineItems.models[0].productVariant.size.id).toEqual(
806
- 9
807
- );
808
- expect(orders?.models[2].lineItems.models[0].productVariant.color.id).toEqual(
809
- 3
810
- );
811
- expect(
812
- orders?.models[2].lineItems.models[0].productVariant.gender.id
813
- ).toEqual(1);
814
- expect(
815
- orders?.models[2].lineItems.models[0].productVariant.productVariantImages
816
- .models.length
817
- ).toEqual(1);
818
- expect(
819
- orders?.models[2].lineItems.models[0].productVariant.productVariantImages
820
- .models[0].id
821
- ).toEqual(17);
822
- expect(
823
- orders?.models[2].lineItems.models[0].parcelLineItems.models.length
824
- ).toEqual(1);
825
- expect(
826
- orders?.models[2].lineItems.models[0].parcelLineItems.models[0].id
827
- ).toEqual(6070);
828
- expect(
829
- orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel.id
830
- ).toEqual(5914);
831
- expect(
832
- orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel
833
- .parcelEvents.models.length
834
- ).toEqual(1);
835
- expect(
836
- orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel
837
- .parcelEvents.models[0].id
838
- ).toEqual(189194);
839
- expect(orders?.models[3].id).toEqual(14219);
840
- expect(orders?.models[3].customer.id).toEqual(5390);
841
- expect(orders?.models[3].physicalAddress.id).toEqual(28145);
842
- expect(orders?.models[3].lineItems.models.length).toEqual(2);
843
- expect(orders?.models[3].lineItems.models[0].id).toEqual(17298);
844
- expect(orders?.models[3].lineItems.models[0].productVariant.id).toEqual(353);
845
- expect(
846
- orders?.models[3].lineItems.models[0].productVariant.product.id
847
- ).toEqual(8);
848
- expect(orders?.models[3].lineItems.models[0].productVariant.size.id).toEqual(
849
- 20
850
- );
851
- expect(orders?.models[3].lineItems.models[0].productVariant.color.id).toEqual(
852
- 10
853
- );
854
- expect(
855
- orders?.models[3].lineItems.models[0].productVariant.gender.id
856
- ).toEqual(3);
857
- expect(
858
- orders?.models[3].lineItems.models[0].productVariant.productVariantImages
859
- .models.length
860
- ).toEqual(1);
861
- expect(
862
- orders?.models[3].lineItems.models[0].productVariant.productVariantImages
863
- .models[0].id
864
- ).toEqual(789);
865
- expect(
866
- orders?.models[3].lineItems.models[0].parcelLineItems.models.length
867
- ).toEqual(1);
868
- expect(
869
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].id
870
- ).toEqual(3338);
871
- expect(
872
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.id
873
- ).toEqual(3304);
874
- expect(
875
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
876
- .parcelEvents.models.length
877
- ).toEqual(3);
878
- expect(
879
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
880
- .parcelEvents.models[0].id
881
- ).toEqual(87279);
882
- expect(
883
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
884
- .parcelEvents.models[1].id
885
- ).toEqual(87278);
886
- expect(
887
- orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
888
- .parcelEvents.models[2].id
889
- ).toEqual(84361);
890
- expect(orders?.models[3].lineItems.models[1].id).toEqual(17297);
891
- expect(orders?.models[3].lineItems.models[1].productVariant.id).toEqual(344);
892
- expect(
893
- orders?.models[3].lineItems.models[1].productVariant.product.id
894
- ).toEqual(6);
895
- expect(orders?.models[3].lineItems.models[1].productVariant.size.id).toEqual(
896
- 22
897
- );
898
- expect(orders?.models[3].lineItems.models[1].productVariant.color.id).toEqual(
899
- 8
900
- );
901
- expect(
902
- orders?.models[3].lineItems.models[1].productVariant.gender.id
903
- ).toEqual(3);
904
- expect(
905
- orders?.models[3].lineItems.models[1].productVariant.productVariantImages
906
- .models.length
907
- ).toEqual(1);
908
- expect(
909
- orders?.models[3].lineItems.models[1].productVariant.productVariantImages
910
- .models[0].id
911
- ).toEqual(780);
912
- expect(
913
- orders?.models[3].lineItems.models[1].parcelLineItems.models.length
914
- ).toEqual(1);
915
- expect(
916
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].id
917
- ).toEqual(2311);
918
- expect(
919
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.id
920
- ).toEqual(2317);
921
- expect(
922
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
923
- .parcelEvents.models.length
924
- ).toEqual(3);
925
- expect(
926
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
927
- .parcelEvents.models[0].id
928
- ).toEqual(52627);
929
- expect(
930
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
931
- .parcelEvents.models[1].id
932
- ).toEqual(52626);
933
- expect(
934
- orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
935
- .parcelEvents.models[2].id
936
- ).toEqual(48326);
937
- expect(orders?.models[4].id).toEqual(13888);
938
- expect(orders?.models[4].customer.id).toEqual(5390);
939
- expect(orders?.models[4].physicalAddress.id).toEqual(7608);
940
- expect(orders?.models[4].lineItems.models.length).toEqual(1);
941
- expect(orders?.models[4].lineItems.models[0].id).toEqual(16900);
942
- expect(orders?.models[4].lineItems.models[0].productVariant.id).toEqual(363);
943
- expect(
944
- orders?.models[4].lineItems.models[0].productVariant.product.id
945
- ).toEqual(5);
946
- expect(orders?.models[4].lineItems.models[0].productVariant.size.id).toEqual(
947
- 8
948
- );
949
- expect(orders?.models[4].lineItems.models[0].productVariant.color.id).toEqual(
950
- 12
951
- );
952
- expect(
953
- orders?.models[4].lineItems.models[0].productVariant.gender.id
954
- ).toEqual(1);
955
- expect(
956
- orders?.models[4].lineItems.models[0].productVariant.productVariantImages
957
- .models.length
958
- ).toEqual(1);
959
- expect(
960
- orders?.models[4].lineItems.models[0].productVariant.productVariantImages
961
- .models[0].id
962
- ).toEqual(829);
691
+ expect(orders?.models[0].id).toEqual(24591);
692
+ expect(orders?.models[0].customer.id).toEqual(5390);
693
+ expect(orders?.models[0].physicalAddress.id).toEqual(48982);
694
+ expect(orders?.models[0].lineItems.models.length).toEqual(1);
695
+ expect(orders?.models[0].lineItems.models[0].id).toEqual(29883);
696
+ expect(orders?.models[0].lineItems.models[0].productVariant.id).toEqual(
697
+ 158
698
+ );
699
+ expect(
700
+ orders?.models[0].lineItems.models[0].productVariant.product.id
701
+ ).toEqual(1);
702
+ expect(
703
+ orders?.models[0].lineItems.models[0].productVariant.size.id
704
+ ).toEqual(9);
705
+ expect(
706
+ orders?.models[0].lineItems.models[0].productVariant.color.id
707
+ ).toEqual(3);
708
+ expect(
709
+ orders?.models[0].lineItems.models[0].productVariant.gender.id
710
+ ).toEqual(1);
711
+ expect(
712
+ orders?.models[0].lineItems.models[0].productVariant.productVariantImages
713
+ .models.length
714
+ ).toEqual(1);
715
+ expect(
716
+ orders?.models[0].lineItems.models[0].productVariant.productVariantImages
717
+ .models[0].id
718
+ ).toEqual(17);
719
+ expect(
720
+ orders?.models[0].lineItems.models[0].parcelLineItems.models.length
721
+ ).toEqual(1);
722
+ expect(
723
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].id
724
+ ).toEqual(6100);
725
+ expect(
726
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.id
727
+ ).toEqual(5942);
728
+ expect(
729
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
730
+ .parcelEvents.models.length
731
+ ).toEqual(14);
732
+ expect(
733
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
734
+ .parcelEvents.models[0].id
735
+ ).toEqual(193775);
736
+ expect(
737
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
738
+ .parcelEvents.models[1].id
739
+ ).toEqual(193774);
740
+ expect(
741
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
742
+ .parcelEvents.models[2].id
743
+ ).toEqual(193773);
744
+ expect(
745
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
746
+ .parcelEvents.models[3].id
747
+ ).toEqual(193425);
748
+ expect(
749
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
750
+ .parcelEvents.models[4].id
751
+ ).toEqual(193424);
752
+ expect(
753
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
754
+ .parcelEvents.models[5].id
755
+ ).toEqual(193423);
756
+ expect(
757
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
758
+ .parcelEvents.models[6].id
759
+ ).toEqual(192713);
760
+ expect(
761
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
762
+ .parcelEvents.models[7].id
763
+ ).toEqual(192712);
764
+ expect(
765
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
766
+ .parcelEvents.models[8].id
767
+ ).toEqual(192711);
768
+ expect(
769
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
770
+ .parcelEvents.models[9].id
771
+ ).toEqual(192709);
772
+ expect(
773
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
774
+ .parcelEvents.models[10].id
775
+ ).toEqual(192171);
776
+ expect(
777
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
778
+ .parcelEvents.models[11].id
779
+ ).toEqual(192170);
780
+ expect(
781
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
782
+ .parcelEvents.models[12].id
783
+ ).toEqual(192169);
784
+ expect(
785
+ orders?.models[0].lineItems.models[0].parcelLineItems.models[0].parcel
786
+ .parcelEvents.models[13].id
787
+ ).toEqual(191790);
788
+ expect(orders?.models[1].id).toEqual(24589);
789
+ expect(orders?.models[1].customer.id).toEqual(5390);
790
+ expect(orders?.models[1].physicalAddress.id).toEqual(48982);
791
+ expect(orders?.models[1].lineItems.models.length).toEqual(1);
792
+ expect(orders?.models[1].lineItems.models[0].id).toEqual(29880);
793
+ expect(orders?.models[1].lineItems.models[0].productVariant.id).toEqual(
794
+ 158
795
+ );
796
+ expect(
797
+ orders?.models[1].lineItems.models[0].productVariant.product.id
798
+ ).toEqual(1);
799
+ expect(
800
+ orders?.models[1].lineItems.models[0].productVariant.size.id
801
+ ).toEqual(9);
802
+ expect(
803
+ orders?.models[1].lineItems.models[0].productVariant.color.id
804
+ ).toEqual(3);
805
+ expect(
806
+ orders?.models[1].lineItems.models[0].productVariant.gender.id
807
+ ).toEqual(1);
808
+ expect(
809
+ orders?.models[1].lineItems.models[0].productVariant.productVariantImages
810
+ .models.length
811
+ ).toEqual(1);
812
+ expect(
813
+ orders?.models[1].lineItems.models[0].productVariant.productVariantImages
814
+ .models[0].id
815
+ ).toEqual(17);
816
+ expect(orders?.models[2].id).toEqual(24587);
817
+ expect(orders?.models[2].customer.id).toEqual(5390);
818
+ expect(orders?.models[2].physicalAddress.id).toEqual(28145);
819
+ expect(orders?.models[2].lineItems.models.length).toEqual(1);
820
+ expect(orders?.models[2].lineItems.models[0].id).toEqual(29877);
821
+ expect(orders?.models[2].lineItems.models[0].productVariant.id).toEqual(
822
+ 158
823
+ );
824
+ expect(
825
+ orders?.models[2].lineItems.models[0].productVariant.product.id
826
+ ).toEqual(1);
827
+ expect(
828
+ orders?.models[2].lineItems.models[0].productVariant.size.id
829
+ ).toEqual(9);
830
+ expect(
831
+ orders?.models[2].lineItems.models[0].productVariant.color.id
832
+ ).toEqual(3);
833
+ expect(
834
+ orders?.models[2].lineItems.models[0].productVariant.gender.id
835
+ ).toEqual(1);
836
+ expect(
837
+ orders?.models[2].lineItems.models[0].productVariant.productVariantImages
838
+ .models.length
839
+ ).toEqual(1);
840
+ expect(
841
+ orders?.models[2].lineItems.models[0].productVariant.productVariantImages
842
+ .models[0].id
843
+ ).toEqual(17);
844
+ expect(
845
+ orders?.models[2].lineItems.models[0].parcelLineItems.models.length
846
+ ).toEqual(1);
847
+ expect(
848
+ orders?.models[2].lineItems.models[0].parcelLineItems.models[0].id
849
+ ).toEqual(6070);
850
+ expect(
851
+ orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel.id
852
+ ).toEqual(5914);
853
+ expect(
854
+ orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel
855
+ .parcelEvents.models.length
856
+ ).toEqual(1);
857
+ expect(
858
+ orders?.models[2].lineItems.models[0].parcelLineItems.models[0].parcel
859
+ .parcelEvents.models[0].id
860
+ ).toEqual(189194);
861
+ expect(orders?.models[3].id).toEqual(14219);
862
+ expect(orders?.models[3].customer.id).toEqual(5390);
863
+ expect(orders?.models[3].physicalAddress.id).toEqual(28145);
864
+ expect(orders?.models[3].lineItems.models.length).toEqual(2);
865
+ expect(orders?.models[3].lineItems.models[0].id).toEqual(17298);
866
+ expect(orders?.models[3].lineItems.models[0].productVariant.id).toEqual(
867
+ 353
868
+ );
869
+ expect(
870
+ orders?.models[3].lineItems.models[0].productVariant.product.id
871
+ ).toEqual(8);
872
+ expect(
873
+ orders?.models[3].lineItems.models[0].productVariant.size.id
874
+ ).toEqual(20);
875
+ expect(
876
+ orders?.models[3].lineItems.models[0].productVariant.color.id
877
+ ).toEqual(10);
878
+ expect(
879
+ orders?.models[3].lineItems.models[0].productVariant.gender.id
880
+ ).toEqual(3);
881
+ expect(
882
+ orders?.models[3].lineItems.models[0].productVariant.productVariantImages
883
+ .models.length
884
+ ).toEqual(1);
885
+ expect(
886
+ orders?.models[3].lineItems.models[0].productVariant.productVariantImages
887
+ .models[0].id
888
+ ).toEqual(789);
889
+ expect(
890
+ orders?.models[3].lineItems.models[0].parcelLineItems.models.length
891
+ ).toEqual(1);
892
+ expect(
893
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].id
894
+ ).toEqual(3338);
895
+ expect(
896
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.id
897
+ ).toEqual(3304);
898
+ expect(
899
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
900
+ .parcelEvents.models.length
901
+ ).toEqual(3);
902
+ expect(
903
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
904
+ .parcelEvents.models[0].id
905
+ ).toEqual(87279);
906
+ expect(
907
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
908
+ .parcelEvents.models[1].id
909
+ ).toEqual(87278);
910
+ expect(
911
+ orders?.models[3].lineItems.models[0].parcelLineItems.models[0].parcel
912
+ .parcelEvents.models[2].id
913
+ ).toEqual(84361);
914
+ expect(orders?.models[3].lineItems.models[1].id).toEqual(17297);
915
+ expect(orders?.models[3].lineItems.models[1].productVariant.id).toEqual(
916
+ 344
917
+ );
918
+ expect(
919
+ orders?.models[3].lineItems.models[1].productVariant.product.id
920
+ ).toEqual(6);
921
+ expect(
922
+ orders?.models[3].lineItems.models[1].productVariant.size.id
923
+ ).toEqual(22);
924
+ expect(
925
+ orders?.models[3].lineItems.models[1].productVariant.color.id
926
+ ).toEqual(8);
927
+ expect(
928
+ orders?.models[3].lineItems.models[1].productVariant.gender.id
929
+ ).toEqual(3);
930
+ expect(
931
+ orders?.models[3].lineItems.models[1].productVariant.productVariantImages
932
+ .models.length
933
+ ).toEqual(1);
934
+ expect(
935
+ orders?.models[3].lineItems.models[1].productVariant.productVariantImages
936
+ .models[0].id
937
+ ).toEqual(780);
938
+ expect(
939
+ orders?.models[3].lineItems.models[1].parcelLineItems.models.length
940
+ ).toEqual(1);
941
+ expect(
942
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].id
943
+ ).toEqual(2311);
944
+ expect(
945
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.id
946
+ ).toEqual(2317);
947
+ expect(
948
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
949
+ .parcelEvents.models.length
950
+ ).toEqual(3);
951
+ expect(
952
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
953
+ .parcelEvents.models[0].id
954
+ ).toEqual(52627);
955
+ expect(
956
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
957
+ .parcelEvents.models[1].id
958
+ ).toEqual(52626);
959
+ expect(
960
+ orders?.models[3].lineItems.models[1].parcelLineItems.models[0].parcel
961
+ .parcelEvents.models[2].id
962
+ ).toEqual(48326);
963
+ expect(orders?.models[4].id).toEqual(13888);
964
+ expect(orders?.models[4].customer.id).toEqual(5390);
965
+ expect(orders?.models[4].physicalAddress.id).toEqual(7608);
966
+ expect(orders?.models[4].lineItems.models.length).toEqual(1);
967
+ expect(orders?.models[4].lineItems.models[0].id).toEqual(16900);
968
+ expect(orders?.models[4].lineItems.models[0].productVariant.id).toEqual(
969
+ 363
970
+ );
971
+ expect(
972
+ orders?.models[4].lineItems.models[0].productVariant.product.id
973
+ ).toEqual(5);
974
+ expect(
975
+ orders?.models[4].lineItems.models[0].productVariant.size.id
976
+ ).toEqual(8);
977
+ expect(
978
+ orders?.models[4].lineItems.models[0].productVariant.color.id
979
+ ).toEqual(12);
980
+ expect(
981
+ orders?.models[4].lineItems.models[0].productVariant.gender.id
982
+ ).toEqual(1);
983
+ expect(
984
+ orders?.models[4].lineItems.models[0].productVariant.productVariantImages
985
+ .models.length
986
+ ).toEqual(1);
987
+ expect(
988
+ orders?.models[4].lineItems.models[0].productVariant.productVariantImages
989
+ .models[0].id
990
+ ).toEqual(829);
991
+ });
992
+
993
+ // Issue occcurs in nestClump
994
+ // Problem from early returning not logging bo so parent hierarcy was missing it
995
+ test('11', () => {
996
+ const core = createCore({ entities: orderMoreEntities });
997
+ let orders;
998
+ try {
999
+ // This failed when the bug was present
1000
+ orders = core.createFromDatabase(eleven);
1001
+ } catch (e) {
1002
+ expect(e).not.toBeDefined();
1003
+ }
1004
+ expect(orders).toBeDefined();
1005
+ });
1006
+
1007
+ // Issue occcurs in nestClump
1008
+ // Problem when a table references another model twice (two columns)
1009
+ test('12', () => {
1010
+ const core = createCore({ entities: twelveEntities });
1011
+ let prompt;
1012
+ try {
1013
+ // This failed when the bug was present
1014
+ prompt = core.createFromDatabase(twelve);
1015
+ } catch (e) {
1016
+ expect(e).not.toBeDefined();
1017
+ }
1018
+ expect(prompt).toBeDefined();
1019
+ // Ideally the below should work
1020
+ // expect(prompt.fromMember.id).toEqual(1);
1021
+ });
1022
+
1023
+ // Issue occcurs in nestClump
1024
+ // Problem when a table has records that are supposed to nest under root
1025
+ // but nest under other stuff below it instead
1026
+ // Member
1027
+ // Recommendations [1]
1028
+ // Brand
1029
+ // Recommendations [1]
1030
+ // Passion
1031
+ // Recommendations [2]
1032
+ // -- instead of correct --
1033
+ // Member
1034
+ // Recommendations[4]
1035
+ // Brand
1036
+ // Passion
1037
+ test('13', () => {
1038
+ const core = createCore({ entities: thirteenEntities });
1039
+ const members = core.createFromDatabase(thirteen);
1040
+ const member = members?.models[0];
1041
+ expect(member?.recommendations.models.length).toEqual(4);
1042
+ expect(member?.recommendations.models[0].brand.id).toEqual(2);
1043
+ expect(member?.recommendations.models[0].product.id).toEqual(7);
1044
+ expect(member?.recommendations.models[0].category.id).toEqual(1);
1045
+ expect(
1046
+ member?.recommendations.models[0].recommendationAudiences.models[0]
1047
+ .audience.id
1048
+ ).toEqual(1);
1049
+ expect(member?.recommendations.models[1].brand.id).toEqual(2);
1050
+ expect(member?.recommendations.models[1].product.id).toEqual(1);
1051
+ expect(member?.recommendations.models[1].category.id).toEqual(2);
1052
+ expect(
1053
+ member?.recommendations.models[1].recommendationAudiences.models[0]
1054
+ .audience.id
1055
+ ).toEqual(1);
1056
+ expect(member?.recommendations.models[2].brand.id).toEqual(3);
1057
+ expect(member?.recommendations.models[2].product.id).toEqual(27);
1058
+ expect(member?.recommendations.models[2].category.id).toEqual(3);
1059
+ expect(
1060
+ member?.recommendations.models[2].recommendationAudiences.models[0]
1061
+ .audience.id
1062
+ ).toEqual(1);
1063
+ expect(member?.recommendations.models[3].brand.id).toEqual(6);
1064
+ expect(member?.recommendations.models[3].product.id).toEqual(75);
1065
+ expect(member?.recommendations.models[3].category.id).toEqual(4);
1066
+ expect(
1067
+ member?.recommendations.models[3].recommendationAudiences.models[0]
1068
+ .audience.id
1069
+ ).toEqual(1);
1070
+ });
1071
+
1072
+ // Issue occcurs in nestClump
1073
+ // Problem when a table has two columns which reference the same other table
1074
+ test('14', () => {
1075
+ const core = createCore({ entities: fourteenEntities });
1076
+ const persons = core.createFromDatabase(fourteen);
1077
+ expect(persons?.models.length).toEqual(1);
1078
+ expect(persons.models[0].id).toEqual(67);
1079
+ // Known issue: A reference always uses the model's name,
1080
+ // instead of some version of the column's name
1081
+ expect(persons.models[0].customers?.models.length).toEqual(1);
1082
+ expect(persons.models[0].customers.models[0].id).toEqual(4);
1083
+ });
1084
+ });
1085
+
1086
+ describe('createOneFromDatabase', () => {
1087
+ test('reduces to one', () => {
1088
+ const core = createCore({ entities: orderEntities });
1089
+ const order = core.createOneFromDatabase(one);
1090
+ expect(order instanceof orderEntities[0].Model).toBe(true);
1091
+ });
1092
+ test('throws when less than one', () => {
1093
+ const core = createCore({ entities: blogEntities });
1094
+ expect(() => core.createOneFromDatabase([])).toThrow();
1095
+ });
1096
+ test('throws when more than one', () => {
1097
+ const core = createCore({ entities: blogEntities });
1098
+ expect(() => core.createOneFromDatabase(three)).toThrow();
1099
+ });
963
1100
  });
964
1101
 
965
- // Issue occcurs in nestClump
966
- // Problem from early returning not logging bo so parent hierarcy was missing it
967
- test('createFromDatabase 11', () => {
968
- const core = createCore({ entities: orderMoreEntities });
969
- let orders;
970
- try {
971
- // This failed when the bug was present
972
- orders = core.createFromDatabase(eleven);
973
- } catch (e) {
974
- expect(e).not.toBeDefined();
975
- }
976
- expect(orders).toBeDefined();
1102
+ describe('createOneOrNoneFromDatabase', () => {
1103
+ test('reduces to one', () => {
1104
+ const core = createCore({ entities: orderEntities });
1105
+ const order = core.createOneOrNoneFromDatabase(one);
1106
+ expect(order instanceof orderEntities[0].Model).toBe(true);
1107
+ });
1108
+ test('returns undefined when less than one', () => {
1109
+ const core = createCore({ entities: blogEntities });
1110
+ expect(core.createOneOrNoneFromDatabase([])).toEqual(void 0);
1111
+ });
1112
+ test('throws when more than one', () => {
1113
+ const core = createCore({ entities: blogEntities });
1114
+ expect(() => core.createOneOrNoneFromDatabase(three)).toThrow();
1115
+ });
977
1116
  });
978
1117
 
979
- // Issue occcurs in nestClump
980
- // Problem when a table references another model twice (two columns)
981
- test('createFromDatabase 12', () => {
982
- const core = createCore({ entities: twelveEntities });
983
- let prompt;
984
- try {
985
- // This failed when the bug was present
986
- prompt = core.createFromDatabase(twelve);
987
- } catch (e) {
988
- expect(e).not.toBeDefined();
989
- }
990
- expect(prompt).toBeDefined();
991
- // Ideally the below should work
992
- // expect(prompt.fromMember.id).toEqual(1);
1118
+ describe('createManyFromDatabase', () => {
1119
+ test('one result', () => {
1120
+ const core = createCore({ entities: orderEntities });
1121
+ const orders = core.createManyFromDatabase(one);
1122
+ expect(orders instanceof orderEntities[0].Collection).toBe(true);
1123
+ expect(Array.isArray(orders.models)).toBe(true);
1124
+ expect(orders.models.length).toEqual(1);
1125
+ });
1126
+ test('throws when less than one', () => {
1127
+ const core = createCore({ entities: blogEntities });
1128
+ expect(() => core.createManyFromDatabase([])).toThrow();
1129
+ });
1130
+ test('more than one', () => {
1131
+ const core = createCore({ entities: blogEntities });
1132
+ const articles = core.createManyFromDatabase(three);
1133
+ expect(articles instanceof blogEntities[0].Collection).toBe(true);
1134
+ expect(Array.isArray(articles.models)).toBe(true);
1135
+ expect(articles.models.length).toEqual(2);
1136
+ });
993
1137
  });
994
1138
 
995
- // Issue occcurs in nestClump
996
- // Problem when a table has records that are supposed to nest under root
997
- // but nest under other stuff below it instead
998
- // Member
999
- // Recommendations [1]
1000
- // Brand
1001
- // Recommendations [1]
1002
- // Passion
1003
- // Recommendations [2]
1004
- // -- instead of correct --
1005
- // Member
1006
- // Recommendations[4]
1007
- // Brand
1008
- // Passion
1009
- test('createFromDatabase 13', () => {
1010
- const core = createCore({ entities: thirteenEntities });
1011
- const members = core.createFromDatabase(thirteen);
1012
- const member = members?.models[0];
1013
- expect(member?.recommendations.models.length).toEqual(4);
1014
- expect(member?.recommendations.models[0].brand.id).toEqual(2);
1015
- expect(member?.recommendations.models[0].product.id).toEqual(7);
1016
- expect(member?.recommendations.models[0].category.id).toEqual(1);
1017
- expect(
1018
- member?.recommendations.models[0].recommendationAudiences.models[0].audience
1019
- .id
1020
- ).toEqual(1);
1021
- expect(member?.recommendations.models[1].brand.id).toEqual(2);
1022
- expect(member?.recommendations.models[1].product.id).toEqual(1);
1023
- expect(member?.recommendations.models[1].category.id).toEqual(2);
1024
- expect(
1025
- member?.recommendations.models[1].recommendationAudiences.models[0].audience
1026
- .id
1027
- ).toEqual(1);
1028
- expect(member?.recommendations.models[2].brand.id).toEqual(3);
1029
- expect(member?.recommendations.models[2].product.id).toEqual(27);
1030
- expect(member?.recommendations.models[2].category.id).toEqual(3);
1031
- expect(
1032
- member?.recommendations.models[2].recommendationAudiences.models[0].audience
1033
- .id
1034
- ).toEqual(1);
1035
- expect(member?.recommendations.models[3].brand.id).toEqual(6);
1036
- expect(member?.recommendations.models[3].product.id).toEqual(75);
1037
- expect(member?.recommendations.models[3].category.id).toEqual(4);
1038
- expect(
1039
- member?.recommendations.models[3].recommendationAudiences.models[0].audience
1040
- .id
1041
- ).toEqual(1);
1139
+ describe('createAnyFromDatabase', () => {
1140
+ test('one result', () => {
1141
+ const core = createCore({ entities: orderEntities });
1142
+ const orders = core.createAnyFromDatabase(one, orderEntities[0].Model);
1143
+ expect(orders instanceof orderEntities[0].Collection).toBe(true);
1144
+ expect(Array.isArray(orders.models)).toBe(true);
1145
+ expect(orders.models.length).toEqual(1);
1146
+ });
1147
+ test('less than one using table name', () => {
1148
+ const core = createCore({ entities: blogEntities });
1149
+ const articles = core.createAnyFromDatabase([], blogEntities[0].tableName);
1150
+ expect(articles instanceof blogEntities[0].Collection).toBe(true);
1151
+ expect(Array.isArray(articles.models)).toBe(true);
1152
+ expect(articles.models.length).toEqual(0);
1153
+ });
1154
+ test('less than one using model class', () => {
1155
+ const core = createCore({ entities: blogEntities });
1156
+ const articles = core.createAnyFromDatabase([], blogEntities[0].Model);
1157
+ expect(articles instanceof blogEntities[0].Collection).toBe(true);
1158
+ expect(Array.isArray(articles.models)).toBe(true);
1159
+ expect(articles.models.length).toEqual(0);
1160
+ });
1161
+ test('more than one', () => {
1162
+ const core = createCore({ entities: blogEntities });
1163
+ const articles = core.createAnyFromDatabase(three, blogEntities[0].Model);
1164
+ expect(articles instanceof blogEntities[0].Collection).toBe(true);
1165
+ expect(Array.isArray(articles.models)).toBe(true);
1166
+ expect(articles.models.length).toEqual(2);
1167
+ });
1042
1168
  });
1043
1169
 
1044
- test('orm.tables', () => {
1170
+ test('tables', () => {
1045
1171
  const core = createCore({ entities: orderEntities });
1046
1172
  expect(Object.keys(core.tables).length).toEqual(5);
1047
1173
  expect(core.tables.utmSource.columns).toEqual(