pure-orm 4.0.0 → 4.0.1

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