UNPKG

pure-orm

Version:

A SQL Toolkit based on pure business objects passed to and from stateful data access objects

534 lines 61.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable max-len */ const core_1 = require("./core"); const entities_1 = require("../test-utils/order/entities"); const entities_2 = require("../test-utils/blog/entities"); const entities_3 = require("../test-utils/order-more/entities"); const entities_4 = require("../test-utils/nine/entities"); const entities_5 = require("../test-utils/five/entities"); const entities_6 = require("../test-utils/six/entities"); const entities_7 = require("../test-utils/twelve/entities"); const entities_8 = require("../test-utils/thirteen/entities"); const entities_9 = require("../test-utils/fourteen/entities"); const article_1 = require("../test-utils/blog/models/article"); const two = require('../test-utils/two/results'); const three = require('../test-utils/three/results'); const one = require('../test-utils/one/results.json'); const four = require('../test-utils/four/results.json'); const five = require('../test-utils/five/results.json'); const six = require('../test-utils/six/results.json'); const seven = require('../test-utils/seven/results.json'); const eight = require('../test-utils/eight/results.json'); const nine = require('../test-utils/nine/results.json'); const ten = require('../test-utils/ten/results.json'); const eleven = require('../test-utils/eleven/results.json'); const twelve = require('../test-utils/twelve/results.json'); const thirteen = require('../test-utils/thirteen/results.json'); const fourteen = require('../test-utils/fourteen/results.json'); describe('createFromDatabase', () => { test('multiple rows reduce to one nested object (with all one-to-one or one-to-many tables)', () => { const core = (0, core_1.createCore)({ entities: entities_1.entities }); const orders = core.createFromDatabase(one); expect(orders.models.length).toEqual(1); const order = orders.models[0]; expect(order === null || order === void 0 ? void 0 : order.id).toEqual(3866); expect(order === null || order === void 0 ? void 0 : order.utmSource.id).toEqual(6); expect(order === null || order === void 0 ? void 0 : order.lineItems.models.length).toEqual(6); expect(order.lineItems.models[0].id).toEqual(2271); expect(order.lineItems.models[0].productVariant.id).toEqual(163); expect(order.lineItems.models[0].productVariant.product.id).toEqual(1); expect(order.lineItems.models[1].id).toEqual(2272); expect(order.lineItems.models[1].productVariant.id).toEqual(186); expect(order.lineItems.models[1].productVariant.product.id).toEqual(1); expect(order.lineItems.models[2].id).toEqual(2273); expect(order.lineItems.models[2].productVariant.id).toEqual(213); expect(order.lineItems.models[2].productVariant.product.id).toEqual(1); expect(order.lineItems.models[3].id).toEqual(2274); expect(order.lineItems.models[3].productVariant.id).toEqual(207); expect(order.lineItems.models[3].productVariant.product.id).toEqual(1); expect(order.lineItems.models[4].id).toEqual(2275); expect(order.lineItems.models[4].productVariant.id).toEqual(296); expect(order.lineItems.models[4].productVariant.product.id).toEqual(5); expect(order.lineItems.models[5].id).toEqual(2276); expect(order.lineItems.models[5].productVariant.id).toEqual(308); expect(order.lineItems.models[5].productVariant.product.id).toEqual(3); }); test('createFromDatabase where multiple rows reduce to one nested object (with many-to-many tables)', () => { const core = (0, core_1.createCore)({ entities: entities_2.entities }); const articles = core.createFromDatabase(two); expect(articles.models.length).toEqual(1); const article = articles.models[0]; expect(article.id).toEqual(14); expect(article.person.id).toEqual(8); expect(article.articleTags.models.length).toEqual(10); expect(article.articleTags.models[0].id).toEqual(36); expect(article.articleTags.models[0].tag.id).toEqual(3); expect(article.articleTags.models[1].id).toEqual(37); expect(article.articleTags.models[1].tag.id).toEqual(4); expect(article.articleTags.models[2].id).toEqual(38); expect(article.articleTags.models[2].tag.id).toEqual(5); expect(article.articleTags.models[3].id).toEqual(39); expect(article.articleTags.models[3].tag.id).toEqual(6); expect(article.articleTags.models[4].id).toEqual(40); expect(article.articleTags.models[4].tag.id).toEqual(7); expect(article.articleTags.models[5].id).toEqual(41); expect(article.articleTags.models[5].tag.id).toEqual(8); expect(article.articleTags.models[6].id).toEqual(42); expect(article.articleTags.models[6].tag.id).toEqual(9); expect(article.articleTags.models[7].id).toEqual(43); expect(article.articleTags.models[7].tag.id).toEqual(11); expect(article.articleTags.models[8].id).toEqual(44); expect(article.articleTags.models[8].tag.id).toEqual(12); expect(article.articleTags.models[9].id).toEqual(45); expect(article.articleTags.models[9].tag.id).toEqual(16); }); test('multiple rows reduce to many rows with nested objects (with many-to-many tables)', () => { const core = (0, core_1.createCore)({ entities: entities_2.entities }); const articles = core.createFromDatabase(three); expect(Array.isArray(articles.models)).toBe(true); expect(articles instanceof article_1.Articles).toBe(true); expect(articles.models.length).toEqual(2); const first = articles.models[0]; expect(first.person.id).toEqual(8); expect(first.articleTags.models.length).toEqual(10); expect(first.articleTags.models[0].id).toEqual(36); expect(first.articleTags.models[0].tag.id).toEqual(3); expect(first.articleTags.models[1].id).toEqual(37); expect(first.articleTags.models[1].tag.id).toEqual(4); expect(first.articleTags.models[2].id).toEqual(38); expect(first.articleTags.models[2].tag.id).toEqual(5); expect(first.articleTags.models[3].id).toEqual(39); expect(first.articleTags.models[3].tag.id).toEqual(6); expect(first.articleTags.models[4].id).toEqual(40); expect(first.articleTags.models[4].tag.id).toEqual(7); expect(first.articleTags.models[5].id).toEqual(41); expect(first.articleTags.models[5].tag.id).toEqual(8); expect(first.articleTags.models[6].id).toEqual(42); expect(first.articleTags.models[6].tag.id).toEqual(9); expect(first.articleTags.models[7].id).toEqual(43); expect(first.articleTags.models[7].tag.id).toEqual(11); expect(first.articleTags.models[8].id).toEqual(44); expect(first.articleTags.models[8].tag.id).toEqual(12); expect(first.articleTags.models[9].id).toEqual(45); expect(first.articleTags.models[9].tag.id).toEqual(16); const second = articles.models[1]; expect(second.id).toEqual(12); expect(second.person.id).toEqual(17); expect(second.articleTags.models.length).toEqual(3); expect(second.articleTags.models[0].id).toEqual(33); expect(second.articleTags.models[0].tag.id).toEqual(1); expect(second.articleTags.models[1].id).toEqual(34); expect(second.articleTags.models[1].tag.id).toEqual(5); expect(second.articleTags.models[2].id).toEqual(35); expect(second.articleTags.models[2].tag.id).toEqual(15); }); // Tests for where a deeply nested node which points to a node, is itself // reused (not recreated each time) so that nodes pointing to it all stack // together on it, rather than each attaching to different replica nodes // which overwrite themselves on the node it points to. // The example here is with the productVariant node being reused so that // productVariantImages append to it, instead of each productVariantImage // living on its own productVariant (which would keep overwriting itself // on the actualProductVariant node). test('node is already seen', () => { const core = (0, core_1.createCore)({ entities: entities_3.entities }); const inventoryLevels = core.createFromDatabase(four); expect(inventoryLevels).toBeDefined(); const first = inventoryLevels === null || inventoryLevels === void 0 ? void 0 : inventoryLevels.models[0]; expect(first === null || first === void 0 ? void 0 : first.id).toEqual(15); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.id).toEqual(120); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models.length).toEqual(1); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].actualProductVariantId).toEqual(120); // I think the above test is good enough, and not sure I actual care about below // expect(first.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(120); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].id).toEqual(199); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].color.id).toEqual(1); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].product.id).toEqual(1); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].size.id).toEqual(4); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models.length).toEqual(7); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[0].id).toEqual(621); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[1].id).toEqual(709); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[2].id).toEqual(797); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[3].id).toEqual(885); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[4].id).toEqual(973); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[5].id).toEqual(1061); expect(first === null || first === void 0 ? void 0 : first.actualProductVariant.productVariants.models[0].productVariantImages.models[6].id).toEqual(1149); const second = inventoryLevels === null || inventoryLevels === void 0 ? void 0 : inventoryLevels.models[1]; expect(second === null || second === void 0 ? void 0 : second.id).toEqual(35); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.id).toEqual(125); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models.length).toEqual(1); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].actualProductVariantId).toEqual(125); // I think the above test is good enough, and not sure I actual care about below // expect(second.actualProductVariant.productVariants.models[0].actualProductVariant.id).toEqual(125); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].id).toEqual(209); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].color.id).toEqual(1); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].product.id).toEqual(1); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].size.id).toEqual(9); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models.length).toEqual(7); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[0].id).toEqual(679); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[1].id).toEqual(767); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[2].id).toEqual(855); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[3].id).toEqual(943); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[4].id).toEqual(1031); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[5].id).toEqual(1119); expect(second === null || second === void 0 ? void 0 : second.actualProductVariant.productVariants.models[0].productVariantImages.models[6].id).toEqual(1207); }); // Test for a nested object (eg, parcel) with objects in it that referenced to // it (eg, parcel_events), correctly placing the objects (parcel_events) in // its (parcel) collection of models, and not errantly placing the established // parent node (parcel) as a direct reference of the child (parcel_event). // For example: the errant behavior was: // Parcel1 // ParcelEvent1 // Parcel1 // ParcelEvent2 // Instead of: // Parcel1 // ParcelEvent1 // ParcelEvent2 // NOTE: if this test ever breaks, you can widdle the five.json file to just // the two relevant line items of the one relevant order. This test should // be doing that, but since code coverage all-around isn't great and I already // had this fuller json dump from production, I just used it all - YOLO. test('a deeply nested models property was misbehaving', () => { const core = (0, core_1.createCore)({ entities: entities_5.entities }); const orders = core.createFromDatabase(five); // The assertion that failed when the bug was present expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(2); // Lots of other assertions that are unrelated and shouldn't be here except // I'm insecure about the lack of tests so just going at it cause I can. expect(orders === null || orders === void 0 ? void 0 : orders.models[0].id).toEqual(14219); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].email).toEqual('tswift@kujo.com'); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models.length).toEqual(2); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].id).toEqual(17298); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].orderId).toEqual(14219); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].id).toEqual(17297); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].orderId).toEqual(14219); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcelId).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].lineItemId).toEqual(17297); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(2); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[0].id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[0].parcelId).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[0].status).toEqual('in_transit'); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[1].id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[1].parcelId).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[1].status).toEqual('placed'); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].id).toEqual(13888); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].email).toEqual('tswift@kujo.com'); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].id).toEqual(16900); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].orderId).toEqual(13888); }); // Problem: // Parcel // ParcelLineItem // LineItem // Order // Customer // ParcelLineItem // LineItem // [MISSING ORDER] // Issue occcurs in nestClump // Problem only surfaced when custom was included test('a deeply nested models property was misbehaving', () => { const core = (0, core_1.createCore)({ entities: entities_6.entities }); const parcels = core.createFromDatabase(six); expect(parcels.models.length).toEqual(1); const parcel = parcels.models[0]; // The assertion that failed when the bug was present expect(parcel.parcelLineItems.models[1].lineItem.order).toBeDefined(); // Lots of other assertions that are unrelated and shouldn't be here except // I'm insecure about the lack of tests so just going at it cause I can. expect(parcel.id).toEqual(1); expect(parcel.parcelLineItems.models.length).toEqual(2); expect(parcel.parcelLineItems.models[0].id).toEqual(604); expect(parcel.parcelLineItems.models[0].lineItem.id).toEqual(17298); expect(parcel.parcelLineItems.models[0].lineItem.order.id).toEqual(14219); expect(parcel.parcelLineItems.models[0].lineItem.order.customer.id).toEqual(5390); expect(parcel.parcelLineItems.models[0].lineItem.order.customer.email).toEqual('tswift@kujo.com'); expect(parcel.parcelLineItems.models[1].id).toEqual(605); expect(parcel.parcelLineItems.models[1].lineItem.id).toEqual(17297); expect(parcel.parcelLineItems.models[1].lineItem.order.id).toEqual(14219); expect(parcel.parcelLineItems.models[1].lineItem.order.customer.id).toEqual(5390); expect(parcel.parcelLineItems.models[1].lineItem.order.customer.email).toEqual('tswift@kujo.com'); }); // Problem: // InventoryLevel // ActualProductVariant // ProductVariant(1) // Color // ProductVariant(2) // Instead of: // InventoryLevel // ActualProductVariant // ProductVariant // Color // ProductVariant(2) // Color // Issue occcurs in nestClump test('a deeply nested models property was attaching to wrong parent', () => { const core = (0, core_1.createCore)({ entities: entities_3.entities }); const inventoryLevels = core.createFromDatabase(seven); expect(inventoryLevels.models.length).toEqual(1); const inventoryLevel = inventoryLevels.models[0]; // The assertion that failed when the bug was present expect(inventoryLevel.actualProductVariant.productVariants.models[1]).toBeDefined(); // Lots of other assertions that are unrelated and shouldn't be here except // I'm insecure about the lack of tests so just going at it cause I can. expect(inventoryLevel.id).toEqual(30); expect(inventoryLevel.actualProductVariant.id).toEqual(15); expect(inventoryLevel.actualProductVariant.productVariants.models.length).toEqual(2); expect(inventoryLevel.actualProductVariant.productVariants.models[0].id).toEqual(179); expect(inventoryLevel.actualProductVariant.productVariants.models[0].color.id).toEqual(4); expect(inventoryLevel.actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(inventoryLevel.actualProductVariant.productVariants.models[0].size.id).toEqual(8); expect(inventoryLevel.actualProductVariant.productVariants.models[1].id).toEqual(180); expect(inventoryLevel.actualProductVariant.productVariants.models[1].color.id).toEqual(4); expect(inventoryLevel.actualProductVariant.productVariants.models[1].gender.id).toEqual(2); expect(inventoryLevel.actualProductVariant.productVariants.models[1].size.id).toEqual(11); }); // Problem: // Shipment // ShipmentActualProductVariant // ActualProductVariant // ProductVariant(1) // Product // ProductVariant(2) // ShipmentActualProductVariant // ActualProductVariant // Instead of: // Shipment // ShipmentActualProductVariant // ActualProductVariant // ProductVariant(1) // Product // ShipmentActualProductVariant // ActualProductVariant // ProductVariant(2) // Product // Issue occcurs in nestClump test('a deeply nested models property was attaching to wrong parent 2', () => { const core = (0, core_1.createCore)({ entities: entities_3.entities }); const shipments = core.createFromDatabase(eight); // The assertion that failed when the bug was present expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants).toBeDefined(); // IN ADDITION TO ABOVE ASSERTION and helpful test description of what is // being tested, the below tests tease out some logic that was hitherto // incorrect. This "some logic" should be defined and have separate tests // and jazz, but my brain hurts so TLDR these below tests are important but // (somewhat?) unrelated to the example/assertion above. "Are you serious?!" expect(shipments === null || shipments === void 0 ? void 0 : shipments.models.length).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].id).toEqual(19); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models.length).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].id).toEqual(25); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.id).toEqual(65); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models.length).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].id).toEqual(310); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].product.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].size.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].id).toEqual(309); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].product.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].size.id).toEqual(4); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].gender.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].id).toEqual(26); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.id).toEqual(25); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models.length).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[0].id).toEqual(194); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[0].product.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[0].size.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[0].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[1].id).toEqual(195); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[1].product.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[1].size.id).toEqual(5); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[1].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[0].shipmentActualProductVariants.models[1].actualProductVariant.productVariants.models[1].gender.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].id).toEqual(18); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models.length).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.id).toEqual(25); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models.length).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].id).toEqual(194); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].product.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].size.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[0].gender.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].id).toEqual(195); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].product.id).toEqual(2); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].size.id).toEqual(5); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].color.id).toEqual(1); expect(shipments === null || shipments === void 0 ? void 0 : shipments.models[1].shipmentActualProductVariants.models[0].actualProductVariant.productVariants.models[1].gender.id).toEqual(2); }); // Issue occcurs in nestClump // Problem is with only top level nodes test('just top level nodes', () => { const core = (0, core_1.createCore)({ entities: entities_4.entities }); let featureSwitches; try { // This failed when the bug was present featureSwitches = core.createFromDatabase(nine); } catch (e) { expect(e).not.toBeDefined(); } expect(featureSwitches).toBeDefined(); // Lots of other assertions that are unrelated and shouldn't be here except // I'm insecure about the lack of tests so just going at it cause I can. expect(featureSwitches === null || featureSwitches === void 0 ? void 0 : featureSwitches.models.length).toEqual(2); expect(featureSwitches === null || featureSwitches === void 0 ? void 0 : featureSwitches.models[0].id).toEqual('google_one_tap_sign_in'); expect(featureSwitches === null || featureSwitches === void 0 ? void 0 : featureSwitches.models[1].id).toEqual('website_live_chat'); }); // Issue occcurs in nestClump // Problem is when oldest parent is an empty join record and is not included // which results in the oldest parent search returning -1 and parent heirarchy // is thus messed up. test('10', () => { const core = (0, core_1.createCore)({ entities: entities_3.entities }); let orders; try { // This failed when the bug was present orders = core.createFromDatabase(ten); } catch (e) { expect(e).not.toBeDefined(); } expect(orders).toBeDefined(); // Lots of other assertions that are unrelated and shouldn't be here except // I'm insecure about the lack of tests so just going at it cause I can. expect(orders === null || orders === void 0 ? void 0 : orders.models.length).toEqual(5); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].id).toEqual(24591); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].customer.id).toEqual(5390); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].physicalAddress.id).toEqual(48982); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].id).toEqual(29883); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.id).toEqual(158); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.product.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.size.id).toEqual(9); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.color.id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.gender.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].productVariant.productVariantImages.models[0].id).toEqual(17); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].id).toEqual(6100); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.id).toEqual(5942); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(14); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[0].id).toEqual(193775); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[1].id).toEqual(193774); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[2].id).toEqual(193773); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[3].id).toEqual(193425); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[4].id).toEqual(193424); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[5].id).toEqual(193423); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[6].id).toEqual(192713); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[7].id).toEqual(192712); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[8].id).toEqual(192711); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[9].id).toEqual(192709); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[10].id).toEqual(192171); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[11].id).toEqual(192170); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[12].id).toEqual(192169); expect(orders === null || orders === void 0 ? void 0 : orders.models[0].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[13].id).toEqual(191790); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].id).toEqual(24589); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].customer.id).toEqual(5390); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].physicalAddress.id).toEqual(48982); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].id).toEqual(29880); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.id).toEqual(158); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.product.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.size.id).toEqual(9); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.color.id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.gender.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[1].lineItems.models[0].productVariant.productVariantImages.models[0].id).toEqual(17); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].id).toEqual(24587); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].customer.id).toEqual(5390); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].physicalAddress.id).toEqual(28145); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].id).toEqual(29877); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.id).toEqual(158); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.product.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.size.id).toEqual(9); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.color.id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.gender.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].productVariant.productVariantImages.models[0].id).toEqual(17); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].parcelLineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].parcelLineItems.models[0].id).toEqual(6070); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].parcelLineItems.models[0].parcel.id).toEqual(5914); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[2].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[0].id).toEqual(189194); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].id).toEqual(14219); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].customer.id).toEqual(5390); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].physicalAddress.id).toEqual(28145); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models.length).toEqual(2); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].id).toEqual(17298); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.id).toEqual(353); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.product.id).toEqual(8); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.size.id).toEqual(20); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.color.id).toEqual(10); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.gender.id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].productVariant.productVariantImages.models[0].id).toEqual(789); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].id).toEqual(3338); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.id).toEqual(3304); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[0].id).toEqual(87279); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[1].id).toEqual(87278); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[0].parcelLineItems.models[0].parcel.parcelEvents.models[2].id).toEqual(84361); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].id).toEqual(17297); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.id).toEqual(344); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.product.id).toEqual(6); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.size.id).toEqual(22); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.color.id).toEqual(8); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.gender.id).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].productVariant.productVariantImages.models[0].id).toEqual(780); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].id).toEqual(2311); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.id).toEqual(2317); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models.length).toEqual(3); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[0].id).toEqual(52627); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[1].id).toEqual(52626); expect(orders === null || orders === void 0 ? void 0 : orders.models[3].lineItems.models[1].parcelLineItems.models[0].parcel.parcelEvents.models[2].id).toEqual(48326); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].id).toEqual(13888); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].customer.id).toEqual(5390); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].physicalAddress.id).toEqual(7608); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].id).toEqual(16900); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.id).toEqual(363); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.product.id).toEqual(5); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.size.id).toEqual(8); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.color.id).toEqual(12); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.gender.id).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.productVariantImages.models.length).toEqual(1); expect(orders === null || orders === void 0 ? void 0 : orders.models[4].lineItems.models[0].productVariant.productVariantImages.models[0].id).toEqual(829); }); // Issue occcurs in nestClump // Problem from early returning not logging bo so parent hierarcy was missing it test('11', () => { const core = (0, core_1.createCore)({ entities: entities_3.entities }); let orders; try { // This failed when the bug was present orders = core.createFromDatabase(eleven); } catch (e) { expect(e).not.toBeDefined(); } expect(orders).toBeDefined(); }); // Issue occcurs in nestClump // Problem when a table references another model twice (two columns) test('12', () => { const core = (0, core_1.createCore)({ entities: entities_7.entities }); let prompt; try { // T