@flowselections/floriday-voorraad 1.0.155 → 1.0.157
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.
- package/dist-lib/components/TemplatePage.d.ts +2 -0
- package/dist-lib/components/TemplatePage.d.ts.map +1 -0
- package/dist-lib/components/TemplatePage.js +4 -0
- package/dist-lib/components/fs-ui/DataTable.d.ts +1 -1
- package/dist-lib/components/fs-ui/DataTable.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/EmptyState.d.ts +1 -1
- package/dist-lib/components/fs-ui/EmptyState.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/FilterChips.d.ts +1 -1
- package/dist-lib/components/fs-ui/FilterChips.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/FilterPanel.d.ts +2 -2
- package/dist-lib/components/fs-ui/FilterPanel.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/FiltersButton.d.ts +1 -1
- package/dist-lib/components/fs-ui/FiltersButton.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/HeaderButton.d.ts +2 -2
- package/dist-lib/components/fs-ui/HeaderButton.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/HoverTip.d.ts +1 -1
- package/dist-lib/components/fs-ui/HoverTip.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/InlineAlert.d.ts +1 -1
- package/dist-lib/components/fs-ui/InlineAlert.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/KpiRow.d.ts +1 -1
- package/dist-lib/components/fs-ui/KpiRow.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/KpiTile.d.ts +1 -1
- package/dist-lib/components/fs-ui/KpiTile.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts +1 -1
- package/dist-lib/components/fs-ui/MobilePrimaryAction.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/NoticeBar.d.ts +1 -1
- package/dist-lib/components/fs-ui/NoticeBar.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/PageHeader.d.ts +1 -1
- package/dist-lib/components/fs-ui/PageHeader.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/Pagination.d.ts +1 -1
- package/dist-lib/components/fs-ui/Pagination.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/PillTabs.d.ts +1 -1
- package/dist-lib/components/fs-ui/PillTabs.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/RowMenu.d.ts +1 -1
- package/dist-lib/components/fs-ui/RowMenu.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/SearchInput.d.ts +1 -1
- package/dist-lib/components/fs-ui/SearchInput.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/ShortcutHelp.d.ts +1 -1
- package/dist-lib/components/fs-ui/ShortcutHelp.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/StatusIcon.d.ts +1 -1
- package/dist-lib/components/fs-ui/StatusIcon.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/TableSkeleton.d.ts +1 -1
- package/dist-lib/components/fs-ui/TableSkeleton.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/Toolbar.d.ts +1 -1
- package/dist-lib/components/fs-ui/Toolbar.d.ts.map +1 -1
- package/dist-lib/components/fs-ui/UpdatedAt.d.ts +1 -1
- package/dist-lib/components/fs-ui/UpdatedAt.d.ts.map +1 -1
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +1 -1
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/CollapsibleText.d.ts +1 -1
- package/dist-lib/components/voorraad/CollapsibleText.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts +6 -0
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ConnectionBadge.js +12 -0
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayConnectionNotice.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayConnectionNotice.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayLoadCarriers.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayLoadCarriers.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridaySentCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridaySentCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +4 -0
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/FloridayStatusBadge.js +8 -0
- package/dist-lib/components/voorraad/FloridayTakeoverPanel.d.ts +2 -2
- package/dist-lib/components/voorraad/FloridayTakeoverPanel.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustAdministratie.d.ts +2 -2
- package/dist-lib/components/voorraad/FustAdministratie.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts +1 -1
- package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +2 -0
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ModuleHealthCard.js +40 -0
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductSalePriceField.d.ts +2 -2
- package/dist-lib/components/voorraad/ProductSalePriceField.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductStructureCard.d.ts +2 -2
- package/dist-lib/components/voorraad/ProductStructureCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/Sneltoetsen.d.ts +2 -2
- package/dist-lib/components/voorraad/Sneltoetsen.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
- package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts +1 -1
- package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts.map +1 -1
- package/dist-lib/components/voorraad/TelmomentButton.d.ts +1 -1
- package/dist-lib/components/voorraad/TelmomentButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadBeheerCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadBeheerCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +10 -0
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/VoorraadDashboard.js +53 -0
- package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts +1 -1
- package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts.map +1 -1
- package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts +1 -1
- package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts.map +1 -1
- package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts +1 -1
- package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts.map +1 -1
- package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts +1 -1
- package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts.map +1 -1
- package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts +2 -2
- package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts.map +1 -1
- package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts +2 -2
- package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/lib/__tests__/floricode-required-features.test.js +3 -7
- package/dist-lib/lib/floriday-field-sources.d.ts +18 -0
- package/dist-lib/lib/floriday-field-sources.d.ts.map +1 -0
- package/dist-lib/lib/floriday-field-sources.js +45 -0
- package/dist-lib/lib/floriday-schema-to-zod.d.ts +9 -0
- package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +1 -0
- package/dist-lib/lib/floriday-schema-to-zod.js +53 -0
- package/dist-lib/lib/merge-products.d.ts +8 -0
- package/dist-lib/lib/merge-products.d.ts.map +1 -0
- package/dist-lib/lib/merge-products.js +17 -0
- package/dist-lib/lib/module-health.functions.d.ts +53497 -0
- package/dist-lib/lib/module-health.functions.d.ts.map +1 -0
- package/dist-lib/lib/module-health.functions.js +261 -0
- package/dist-lib/lib/validationSchemas.d.ts +15 -0
- package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
- package/dist-lib/lib/validationSchemas.js +25 -0
- package/dist-lib/server-hooks/floriday-stock-reconcile.d.ts.map +1 -1
- package/dist-lib/server-hooks/floriday-stock-reconcile.js +14 -1
- package/package.json +2 -2
- package/sql/floriday-voorraad-schema.sql +13 -27
- package/dist-lib/components/voorraad/__tests__/count-stock-free.test.d.ts +0 -2
- package/dist-lib/components/voorraad/__tests__/count-stock-free.test.d.ts.map +0 -1
- package/dist-lib/components/voorraad/__tests__/count-stock-free.test.js +0 -12
- package/dist-lib/lib/__tests__/article-code.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/article-code.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/article-code.test.js +0 -11
- package/dist-lib/lib/__tests__/erp-test-123.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/erp-test-123.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/erp-test-123.test.js +0 -43
- package/dist-lib/lib/__tests__/floriday-customer-offers.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/floriday-customer-offers.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/floriday-customer-offers.test.js +0 -36
- package/dist-lib/lib/__tests__/floriday-fetch-status.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/floriday-fetch-status.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/floriday-fetch-status.test.js +0 -25
- package/dist-lib/lib/__tests__/floriday-write-mode.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/floriday-write-mode.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/floriday-write-mode.test.js +0 -40
- package/dist-lib/lib/__tests__/fust-dimensions.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/fust-dimensions.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/fust-dimensions.test.js +0 -27
- package/dist-lib/lib/__tests__/load-carriers.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/load-carriers.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/load-carriers.test.js +0 -15
- package/dist-lib/lib/__tests__/mirror-products.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/mirror-products.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/mirror-products.test.js +0 -13
- package/dist-lib/lib/__tests__/product-packings.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/product-packings.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/product-packings.test.js +0 -42
- package/dist-lib/lib/__tests__/publish-114.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/publish-114.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/publish-114.test.js +0 -31
- package/dist-lib/lib/__tests__/publish-packing-block.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/publish-packing-block.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/publish-packing-block.test.js +0 -14
- package/dist-lib/lib/__tests__/release-130.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/release-130.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/release-130.test.js +0 -103
- package/dist-lib/lib/__tests__/release-134.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/release-134.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/release-134.test.js +0 -50
- package/dist-lib/lib/__tests__/release-136.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/release-136.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/release-136.test.js +0 -36
- package/dist-lib/lib/__tests__/release-140.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/release-140.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/release-140.test.js +0 -42
- package/dist-lib/lib/__tests__/request-guard.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/request-guard.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/request-guard.test.js +0 -50
- package/dist-lib/lib/__tests__/stock-save.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/stock-save.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/stock-save.test.js +0 -35
- package/dist-lib/lib/__tests__/stock-scope.test.d.ts +0 -2
- package/dist-lib/lib/__tests__/stock-scope.test.d.ts.map +0 -1
- package/dist-lib/lib/__tests__/stock-scope.test.js +0 -44
- package/dist-lib/server-hooks/__tests__/trade-item-photo.test.d.ts +0 -2
- package/dist-lib/server-hooks/__tests__/trade-item-photo.test.d.ts.map +0 -1
- package/dist-lib/server-hooks/__tests__/trade-item-photo.test.js +0 -19
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fust-dimensions.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/fust-dimensions.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
vi.mock("../../integrations/supabase/client", () => ({ supabase: {} }));
|
|
3
|
-
import { customPackageDimsOf, resolveFustDimensions } from "../fusten.js";
|
|
4
|
-
const fc = new Map([["18", { name: "Trayrand", lengthMm: 560, widthMm: 250, heightMm: 170 }]]);
|
|
5
|
-
const cp = new Map([["cp-1", { lengthMm: 400, widthMm: 300, heightMm: 120 }]]);
|
|
6
|
-
const base = { vbn_code: null, custom_package_id: null, length_mm: null, width_mm: null, height_mm: null };
|
|
7
|
-
describe("fustmaten: Floricode → Floriday custom package → handmatig → leeg", () => {
|
|
8
|
-
it("Floricode wint", () => {
|
|
9
|
-
const r = resolveFustDimensions({ ...base, vbn_code: 18, custom_package_id: "cp-1", length_mm: 1 }, fc, cp);
|
|
10
|
-
expect(r).toEqual({ length_mm: 560, width_mm: 250, height_mm: 170, source: "floricode" });
|
|
11
|
-
});
|
|
12
|
-
it("anders custom package", () => {
|
|
13
|
-
const r = resolveFustDimensions({ ...base, custom_package_id: "cp-1", length_mm: 1 }, fc, cp);
|
|
14
|
-
expect(r).toEqual({ length_mm: 400, width_mm: 300, height_mm: 120, source: "floriday" });
|
|
15
|
-
});
|
|
16
|
-
it("anders handmatig", () => {
|
|
17
|
-
const r = resolveFustDimensions({ ...base, custom_package_id: "onbekend", length_mm: 7 }, fc, cp);
|
|
18
|
-
expect(r.source).toBe("handmatig");
|
|
19
|
-
expect(r.length_mm).toBe(7);
|
|
20
|
-
});
|
|
21
|
-
it("anders leeg, nooit standaardwaarden", () => {
|
|
22
|
-
expect(resolveFustDimensions(base, fc, cp)).toEqual({ length_mm: null, width_mm: null, height_mm: null, source: "onbekend" });
|
|
23
|
-
});
|
|
24
|
-
it("leest mm uit data.dimensions", () => {
|
|
25
|
-
expect(customPackageDimsOf({ dimensions: { length: 400, width: 0, height: "120" } })).toEqual({ lengthMm: 400, widthMm: null, heightMm: 120 });
|
|
26
|
-
});
|
|
27
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-carriers.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/load-carriers.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
vi.mock("../../integrations/supabase/client", () => ({ supabase: {} }));
|
|
3
|
-
import { loadCarriersFromRows } from "../../hooks/useLoadCarriers.js";
|
|
4
|
-
describe("gedeelde lijst ladingdragers", () => {
|
|
5
|
-
it("neemt codes en namen over uit de database, op volgorde", () => {
|
|
6
|
-
const list = loadCarriersFromRows([
|
|
7
|
-
{ code: "DANISH_TROLLEY", naam: "Deense container", volgorde: 2 },
|
|
8
|
-
{ code: "AUCTION_TROLLEY", naam: "Stapelwagen", volgorde: 1 },
|
|
9
|
-
]);
|
|
10
|
-
expect(list.map((c) => c.code)).toEqual(["AUCTION_TROLLEY", "DANISH_TROLLEY"]);
|
|
11
|
-
});
|
|
12
|
-
it("vult niets zelf aan als de database niets geeft", () => {
|
|
13
|
-
expect(loadCarriersFromRows(null)).toEqual([]);
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mirror-products.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/mirror-products.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { hideMirrorItems } from "../mirror-products.js";
|
|
3
|
-
describe("hideMirrorItems", () => {
|
|
4
|
-
it("verbergt een spiegel (id = Floriday-id van eigen artikel), ook met voorraad", () => {
|
|
5
|
-
const own = { productId: "27612767", floridayId: "ea7776dd", qty: 450 };
|
|
6
|
-
const mirror = { productId: "ea7776dd", floridayId: null, qty: 500 };
|
|
7
|
-
expect(hideMirrorItems([own, mirror])).toEqual([own]);
|
|
8
|
-
});
|
|
9
|
-
it("laat een spiegel staan zolang er geen canoniek artikel is", () => {
|
|
10
|
-
const mirror = { productId: "ea7776dd", floridayId: null };
|
|
11
|
-
expect(hideMirrorItems([mirror])).toEqual([mirror]);
|
|
12
|
-
});
|
|
13
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"product-packings.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/product-packings.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
vi.mock("../../integrations/supabase/client", () => ({ supabase: {} }));
|
|
3
|
-
import { requireCompletePacking, packingNumberOrEmpty } from "../floriday-payload.js";
|
|
4
|
-
import { isCompletePackingRow, packingRowsFromWizard, positiveIntOrNull, primaryPacking } from "../product-packings.js";
|
|
5
|
-
import { floridayPackingsToRows, pickPrimaryPacking } from "../product-packing.js";
|
|
6
|
-
describe("verpakking: geen stille standaardwaarden", () => {
|
|
7
|
-
it("lege of ongeldige getallen blijven leeg", () => {
|
|
8
|
-
expect(positiveIntOrNull("")).toBeNull();
|
|
9
|
-
expect(positiveIntOrNull(undefined)).toBeNull();
|
|
10
|
-
expect(positiveIntOrNull(0)).toBeNull();
|
|
11
|
-
expect(positiveIntOrNull(2.5)).toBeNull();
|
|
12
|
-
expect(packingNumberOrEmpty(undefined)).toBe(0);
|
|
13
|
-
});
|
|
14
|
-
it("push weigert een onvolledige verpakking", () => {
|
|
15
|
-
expect(() => requireCompletePacking({ unitsPerPackage: 6, packagesPerLayer: 4 })).toThrow(/Verpakking onvolledig/);
|
|
16
|
-
expect(requireCompletePacking({ unitsPerPackage: 6, packagesPerLayer: 4, layersPerLoadCarrier: 8 })).toEqual({
|
|
17
|
-
pieces: 6, packages: 4, layers: 8,
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
it("Floriday-verpakking 8x4x6 (fust 306) wordt exact overgenomen", () => {
|
|
21
|
-
const rows = floridayPackingsToRows([
|
|
22
|
-
{ primary: true, piecesPerPackage: 6, packagesPerLayer: 4, layersPerLoadCarrier: 8, package: { vbnPackageCode: 306 }, loadCarrier: "DANISH_TROLLEY" },
|
|
23
|
-
{ primary: false, piecesPerPackage: 8, packagesPerLayer: 5, package: { vbnPackageCode: 408 } },
|
|
24
|
-
]);
|
|
25
|
-
expect(rows[0]).toMatchObject({ pieces_per_package: 6, packages_per_layer: 4, layers_per_load_carrier: 8, vbn_package_code: 306, is_primary: true });
|
|
26
|
-
expect(rows[1]).toMatchObject({ layers_per_load_carrier: null, is_primary: false });
|
|
27
|
-
});
|
|
28
|
-
it("zonder gemarkeerde primaire verpakking wordt niet gegokt", () => {
|
|
29
|
-
expect(pickPrimaryPacking([{ piecesPerPackage: 6, packagesPerLayer: 4, layersPerLoadCarrier: 8 }])).toBeNull();
|
|
30
|
-
});
|
|
31
|
-
it("meerdere verpakkingen: de primaire bepaalt", () => {
|
|
32
|
-
const rows = packingRowsFromWizard([
|
|
33
|
-
{ id: "a", source: "VBN", packagingType: "306", loadCarrier: "", unitsPerPackage: 6, packagesPerLayer: 4, layersPerLoadCarrier: 8, isPrimary: false, isCustomerSpecific: false, customerOrganizationIds: [] },
|
|
34
|
-
{ id: "b", source: "VBN", packagingType: "408", loadCarrier: "", unitsPerPackage: 8, packagesPerLayer: 5, layersPerLoadCarrier: 8, isPrimary: true, isCustomerSpecific: false, customerOrganizationIds: [] },
|
|
35
|
-
]);
|
|
36
|
-
const p = primaryPacking(rows);
|
|
37
|
-
expect(p?.pieces_per_package).toBe(8);
|
|
38
|
-
expect(p?.vbn_package_code).toBe(408);
|
|
39
|
-
expect(isCompletePackingRow(p)).toBe(true);
|
|
40
|
-
expect(isCompletePackingRow({ ...p, layers_per_load_carrier: null })).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish-114.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/publish-114.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { translatePublishError } from "../publish-errors.js";
|
|
3
|
-
import { effectiveJobStatus } from "../../components/voorraad/PublishProgressCard.js";
|
|
4
|
-
import { countStock } from "../../components/voorraad/VoorraadPage.js";
|
|
5
|
-
describe("1.0.114 publiceren en telling", () => {
|
|
6
|
-
it("toont de echte reden als de poort schrijven tegenhoudt", () => {
|
|
7
|
-
const f = translatePublishError(new Error("publishTradeItem: gateway /api/public/gateway/write → Tegengehouden door poort: in de Floriday-kopie wijkt de verpakking af van Floriday."));
|
|
8
|
-
expect(f.code).toBe("GATE_BLOCKED");
|
|
9
|
-
expect(f.message).toContain("wijkt de verpakking af");
|
|
10
|
-
});
|
|
11
|
-
it("onbekende fout toont de technische reden", () => {
|
|
12
|
-
const f = translatePublishError(new Error("stap x → iets raars"));
|
|
13
|
-
expect(f.message).toContain("iets raars");
|
|
14
|
-
});
|
|
15
|
-
it("job blijft niet op bezig na mislukte productstap", () => {
|
|
16
|
-
expect(effectiveJobStatus("running", [
|
|
17
|
-
{ status: "failed", step_key: "trade-item" },
|
|
18
|
-
{ status: "pending", step_key: "stock" },
|
|
19
|
-
])).toBe("failed");
|
|
20
|
-
expect(effectiveJobStatus("running", [{ status: "running", step_key: "trade-item" }])).toBe("running");
|
|
21
|
-
});
|
|
22
|
-
it("volledig gereserveerd telt als op voorraad", () => {
|
|
23
|
-
const c = countStock([
|
|
24
|
-
{ quantity: 100, availableQuantity: 0, minQuantity: 0 },
|
|
25
|
-
{ quantity: 0, availableQuantity: 0, minQuantity: 0 },
|
|
26
|
-
]);
|
|
27
|
-
expect(c.inStock).toBe(1);
|
|
28
|
-
expect(c.outOfStock).toBe(1);
|
|
29
|
-
expect(c.fullyReserved).toBe(1);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish-packing-block.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/publish-packing-block.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { parsePackingBlock } from "../publish-errors.js";
|
|
3
|
-
describe("parsePackingBlock", () => {
|
|
4
|
-
it("leest code, data.message en mismatchTradeItemIds", () => {
|
|
5
|
-
const r = parsePackingBlock('fout: {"code":"packing_mismatch","data":{"message":"Afwijking","mismatchTradeItemIds":["a1"]}}');
|
|
6
|
-
expect(r).toEqual({ code: "packing_mismatch", message: "Afwijking", ids: ["a1"] });
|
|
7
|
-
});
|
|
8
|
-
it("onderscheidt packing_mismatch_connection", () => {
|
|
9
|
-
expect(parsePackingBlock("packing_mismatch_connection")?.code).toBe("packing_mismatch_connection");
|
|
10
|
-
});
|
|
11
|
-
it("geeft null zonder code", () => {
|
|
12
|
-
expect(parsePackingBlock("iets anders")).toBeNull();
|
|
13
|
-
});
|
|
14
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-130.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/release-130.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { READ_ROUTE_MISSING, chunk, interpretContinuousStock, parseReadResponse, toReadRequest, } from "../floriday-read-contract.js";
|
|
3
|
-
import { editTargetText, isPublishedToFloriday, publishOutcome } from "../publish-status.js";
|
|
4
|
-
import { priceStatus } from "../price-status.js";
|
|
5
|
-
import { validateStep } from "../floriday-payload.js";
|
|
6
|
-
vi.mock("../supabase-admin.server", () => ({
|
|
7
|
-
getAdminClient: () => ({
|
|
8
|
-
from: () => ({
|
|
9
|
-
select: () => ({ eq: () => ({ maybeSingle: async () => ({ data: null }) }) }),
|
|
10
|
-
upsert: async () => ({ error: null }),
|
|
11
|
-
}),
|
|
12
|
-
}),
|
|
13
|
-
}));
|
|
14
|
-
describe("leesroute floriday-get", () => {
|
|
15
|
-
it("haalt het voorvoegsel /suppliers-api-2026v1 weg en zet de query apart", () => {
|
|
16
|
-
expect(toReadRequest("/suppliers-api-2026v1/trade-items/abc/continuous-stock")).toEqual({
|
|
17
|
-
method: "GET",
|
|
18
|
-
path: "/trade-items/abc/continuous-stock",
|
|
19
|
-
});
|
|
20
|
-
expect(toReadRequest("/suppliers-api-2026v1/trade-items/base-supply?year=2026&week=44")).toEqual({
|
|
21
|
-
method: "GET",
|
|
22
|
-
path: "/trade-items/base-supply",
|
|
23
|
-
query: { year: "2026", week: "44" },
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
it("bundelt per 10", () => {
|
|
27
|
-
expect(chunk(Array.from({ length: 23 }, (_, i) => i)).map((c) => c.length)).toEqual([10, 10, 3]);
|
|
28
|
-
});
|
|
29
|
-
it("HTML of 404 van de route = leesroute ontbreekt, nooit ruwe HTML", () => {
|
|
30
|
-
expect(() => parseReadResponse(404, "text/html", "<html>Not found</html>", 1)).toThrow(READ_ROUTE_MISSING);
|
|
31
|
-
});
|
|
32
|
-
it("404 per artikel = geen beschikbaarheid; 429 = wachten volgens retryAfterMs", () => {
|
|
33
|
-
const [a, b, c] = parseReadResponse(200, "application/json", JSON.stringify({
|
|
34
|
-
ok: true,
|
|
35
|
-
results: [
|
|
36
|
-
{ ok: false, status: 404, path: "/trade-items/a/continuous-stock", error: "not found" },
|
|
37
|
-
{ ok: false, status: 429, path: "/trade-items/b/continuous-stock", error: "rate", retryAfterMs: 2500 },
|
|
38
|
-
{ ok: true, status: 200, path: "/trade-items/c/continuous-stock", data: { numberOfPieces: 7 } },
|
|
39
|
-
],
|
|
40
|
-
}), 3);
|
|
41
|
-
expect(interpretContinuousStock(a)).toEqual({ kind: "pieces", pieces: 0 });
|
|
42
|
-
expect(interpretContinuousStock(b)).toEqual({ kind: "retry", waitMs: 2500 });
|
|
43
|
-
expect(interpretContinuousStock(c)).toEqual({ kind: "pieces", pieces: 7 });
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe("gatewayRead via floriday-get (gemockt, niets naar Floriday)", () => {
|
|
47
|
-
const realFetch = globalThis.fetch;
|
|
48
|
-
beforeEach(() => {
|
|
49
|
-
process.env.FLORIDAY_GATEWAY_URL = "https://shell.test";
|
|
50
|
-
process.env.FLORIDAY_GATEWAY_SECRET = "test-secret";
|
|
51
|
-
});
|
|
52
|
-
afterEach(() => {
|
|
53
|
-
globalThis.fetch = realFetch;
|
|
54
|
-
});
|
|
55
|
-
it("stuurt één GET-verzoek zonder voorvoegsel naar /api/public/gateway/floriday-get", async () => {
|
|
56
|
-
const calls = [];
|
|
57
|
-
globalThis.fetch = vi.fn(async (url, init) => {
|
|
58
|
-
calls.push({ url: String(url), body: JSON.parse(init.body) });
|
|
59
|
-
return new Response(JSON.stringify({ ok: true, environment: "staging", results: [{ ok: true, status: 200, path: "/trade-items/x", data: { id: "x" } }] }), { status: 200, headers: { "content-type": "application/json" } });
|
|
60
|
-
});
|
|
61
|
-
const { gatewayRead } = await import("../floriday-gateway.server.js");
|
|
62
|
-
const res = await gatewayRead({ environment: "staging", path: "/suppliers-api-2026v1/trade-items/x" });
|
|
63
|
-
expect(calls[0].url).toBe("https://shell.test/api/public/gateway/floriday-get");
|
|
64
|
-
expect(calls[0].body.requests).toEqual([{ method: "GET", path: "/trade-items/x" }]);
|
|
65
|
-
expect(res).toMatchObject({ ok: true, status: 200, data: { id: "x" } });
|
|
66
|
-
});
|
|
67
|
-
it("ontbrekende route geeft 'leesroute ontbreekt in de shell'", async () => {
|
|
68
|
-
globalThis.fetch = vi.fn(async () => new Response("<html>404</html>", { status: 404, headers: { "content-type": "text/html" } }));
|
|
69
|
-
const { gatewayRead } = await import("../floriday-gateway.server.js");
|
|
70
|
-
await expect(gatewayRead({ environment: "staging", path: "/trade-items/x" })).rejects.toThrow(/Leesroute ontbreekt in de shell/);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
describe("publicatiestatus", () => {
|
|
74
|
-
it("een artikel met een Floriday-id telt als gepubliceerd", () => {
|
|
75
|
-
expect(isPublishedToFloriday(null, "ea7776dd-cdee-46e3-ab2a-ffd970bd8d7b")).toBe(true);
|
|
76
|
-
expect(isPublishedToFloriday(null, "")).toBe(false);
|
|
77
|
-
});
|
|
78
|
-
it("artikel gelukt + controle mislukt = waarschuwing, niet mislukt", () => {
|
|
79
|
-
expect(publishOutcome([{ step_key: "trade-item", status: "succeeded" }, { step_key: "verify", status: "failed" }])).toBe("succeeded_with_warnings");
|
|
80
|
-
expect(publishOutcome([{ step_key: "trade-item", status: "failed" }])).toBe("failed");
|
|
81
|
-
});
|
|
82
|
-
it("met Floriday-id gaan wijzigingen naar Floriday, tenzij alleen-lezen (met reden)", () => {
|
|
83
|
-
expect(editTargetText({ floridayId: "x", writeReadOnly: false }).sendsToFloriday).toBe(true);
|
|
84
|
-
const blocked = editTargetText({ floridayId: "x", writeReadOnly: true, writeReason: "verpakkingsverschil" });
|
|
85
|
-
expect(blocked.sendsToFloriday).toBe(false);
|
|
86
|
-
expect(blocked.text).toContain("verpakkingsverschil");
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe("prijsstatus", () => {
|
|
90
|
-
const now = Date.parse("2026-10-28T12:00:00Z");
|
|
91
|
-
it("één label per prijsregel", () => {
|
|
92
|
-
expect(priceStatus(null, now)).toBe("none");
|
|
93
|
-
expect(priceStatus({ available_quantity: 500, period_end: "2026-11-30T00:00:00Z" }, now)).toBe("live");
|
|
94
|
-
expect(priceStatus({ available_quantity: 500, period_end: "2026-10-01T00:00:00Z" }, now)).toBe("expired");
|
|
95
|
-
expect(priceStatus({ available_quantity: 0, period_end: null }, now)).toBe("drained");
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
describe("artikelcode bij Volgende", () => {
|
|
99
|
-
it("weigert een invultekst al in de artikelstap", () => {
|
|
100
|
-
const r = validateStep("artikel", { articleCode: "artikelcode", name: "Gaultheria" });
|
|
101
|
-
expect(r.ok).toBe(false);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-134.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/release-134.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { contentIdempotencyKey } from "../idempotency-key.js";
|
|
3
|
-
import { compareAfterUpdate, verifyDifferenceMessage } from "../publish-verify.js";
|
|
4
|
-
import { publishOutcome } from "../publish-status.js";
|
|
5
|
-
import { translatePublishError } from "../publish-errors.js";
|
|
6
|
-
const id = "ea7776dd-cdee-46e3-ab2a-ffd970bd8d7b";
|
|
7
|
-
describe("1.0.134 idempotentiesleutel per inhoud", () => {
|
|
8
|
-
it("naam wijzigen geeft een nieuwe sleutel (nieuwe PUT)", async () => {
|
|
9
|
-
const a = await contentIdempotencyKey("inventory:trade-item:update", id, { tradeItemName: "TEST QA artikel 28-10" });
|
|
10
|
-
const b = await contentIdempotencyKey("inventory:trade-item:update", id, { tradeItemName: "TEST QA artikel 28-10 gewijzigd" });
|
|
11
|
-
expect(a).not.toBe(b);
|
|
12
|
-
});
|
|
13
|
-
it("dezelfde wijziging nog eens geeft dezelfde sleutel (geen tweede PUT)", async () => {
|
|
14
|
-
const a = await contentIdempotencyKey("inventory:trade-item:update", id, { tradeItemName: "X", vbnProductCode: 34407 });
|
|
15
|
-
const b = await contentIdempotencyKey("inventory:trade-item:update", id, { vbnProductCode: 34407, tradeItemName: "X" });
|
|
16
|
-
expect(a).toBe(b);
|
|
17
|
-
});
|
|
18
|
-
it("sleutel bevat geen vaste versie meer", async () => {
|
|
19
|
-
const k = await contentIdempotencyKey("inventory:trade-item:update", id, {});
|
|
20
|
-
expect(k).not.toMatch(/:v1$/);
|
|
21
|
-
expect(k).toMatch(new RegExp(`^inventory:trade-item:update:${id}:[0-9a-f]{64}$`));
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe("1.0.134 controle na update", () => {
|
|
25
|
-
const item = {
|
|
26
|
-
tradeItemName: "TEST QA artikel 28-10",
|
|
27
|
-
vbnProductCode: 34407,
|
|
28
|
-
packingConfigurations: [{ primary: true, piecesPerPackage: 12, packagesPerLayer: 5, layersPerLoadCarrier: 8, package: { vbnPackageCode: 412 }, loadCarrier: "DANISH_TROLLEY" }],
|
|
29
|
-
};
|
|
30
|
-
it("naamafwijking is een verschil met beide waarden", () => {
|
|
31
|
-
const d = compareAfterUpdate({ name: "TEST QA artikel 28-10 gewijzigd", vbnCode: 34407 }, item);
|
|
32
|
-
expect(d).toHaveLength(1);
|
|
33
|
-
expect(verifyDifferenceMessage(d)).toContain("«TEST QA artikel 28-10»");
|
|
34
|
-
expect(verifyDifferenceMessage(d)).toContain("«TEST QA artikel 28-10 gewijzigd»");
|
|
35
|
-
});
|
|
36
|
-
it("verpakkingsafwijking telt", () => {
|
|
37
|
-
const d = compareAfterUpdate({ packing: { piecesPerPackage: 6, packagesPerLayer: 5, layersPerLoadCarrier: 8, vbnPackageCode: 412, loadCarrier: "DANISH_TROLLEY" } }, item);
|
|
38
|
-
expect(d.map((x) => x.field)).toEqual(["piecesPerPackage"]);
|
|
39
|
-
});
|
|
40
|
-
it("gelijk = geen verschil", () => {
|
|
41
|
-
expect(compareAfterUpdate({ name: "TEST QA artikel 28-10", vbnCode: "34407" }, item)).toEqual([]);
|
|
42
|
-
});
|
|
43
|
-
it("afwijking na update = job mislukt", () => {
|
|
44
|
-
expect(publishOutcome([
|
|
45
|
-
{ step_key: "trade-item", status: "done" },
|
|
46
|
-
{ step_key: "verify", status: "failed", error_code: "VERIFY_MISMATCH" },
|
|
47
|
-
])).toBe("failed");
|
|
48
|
-
expect(translatePublishError(new Error("VERIFY_MISMATCH:Naam wijkt af")).code).toBe("VERIFY_MISMATCH");
|
|
49
|
-
});
|
|
50
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-136.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/release-136.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { formSalePrice, publishOutcome, syncAfterPublish } from "../publish-status.js";
|
|
3
|
-
import { compareAfterUpdate, verifyDifferenceMessage } from "../publish-verify.js";
|
|
4
|
-
// Floriday wordt nagebootst: alleen teruggelezen artikelobjecten, geen verzending.
|
|
5
|
-
const floridayItem = (name) => ({ tradeItemName: name, vbnProductCode: 1234 });
|
|
6
|
-
describe("1.0.136 — prijs, dirty en controlestap", () => {
|
|
7
|
-
it("(1) sale_price 1,40 blijft staan, ook als trade_item_prices 1,25 is", () => {
|
|
8
|
-
const tradeItemPrice = 1.25; // wordt bewust niet doorgegeven
|
|
9
|
-
const price = formSalePrice(1.4, undefined);
|
|
10
|
-
expect(price).toBe(1.4);
|
|
11
|
-
expect(price).not.toBe(tradeItemPrice);
|
|
12
|
-
// Ook met een oude waarde in de lokale gegevens wint sale_price.
|
|
13
|
-
expect(formSalePrice("1.40", 1.25)).toBe(1.4);
|
|
14
|
-
});
|
|
15
|
-
it("(2) geslaagde wijziging: job geslaagd en artikel niet dirty", () => {
|
|
16
|
-
const diffs = compareAfterUpdate({ name: "TQA gewijzigd", vbnCode: 1234 }, floridayItem("TQA gewijzigd"));
|
|
17
|
-
expect(diffs).toEqual([]);
|
|
18
|
-
const status = publishOutcome([
|
|
19
|
-
{ step_key: "trade-item", status: "succeeded" },
|
|
20
|
-
{ step_key: "verify", status: "succeeded" },
|
|
21
|
-
]);
|
|
22
|
-
expect(status).toBe("succeeded");
|
|
23
|
-
expect(syncAfterPublish(status, null)).toEqual({ dirty: false, last_error: null });
|
|
24
|
-
});
|
|
25
|
-
it("(3) afwijkende naam: job mislukt met VERIFY_MISMATCH en artikel blijft dirty", () => {
|
|
26
|
-
const diffs = compareAfterUpdate({ name: "TQA gewijzigd", vbnCode: 1234 }, floridayItem("TQA oud"));
|
|
27
|
-
expect(diffs.map((d) => d.field)).toEqual(["name"]);
|
|
28
|
-
const msg = verifyDifferenceMessage(diffs);
|
|
29
|
-
const status = publishOutcome([
|
|
30
|
-
{ step_key: "trade-item", status: "succeeded" },
|
|
31
|
-
{ step_key: "verify", status: "failed", error_code: "VERIFY_MISMATCH" },
|
|
32
|
-
]);
|
|
33
|
-
expect(status).toBe("failed");
|
|
34
|
-
expect(syncAfterPublish(status, msg)).toEqual({ dirty: true, last_error: msg });
|
|
35
|
-
});
|
|
36
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"release-140.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/release-140.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
|
-
import { opslaanMelding, valuesAfterSave, OPSLAAN_MISLUKT_TEKST } from "../stock-save.js";
|
|
4
|
-
import { dbFoutTekst } from "../db-error-message.js";
|
|
5
|
-
// @ts-expect-error plain ESM script
|
|
6
|
-
import { controleerSchema } from "../../../scripts/check-schema-version.mjs";
|
|
7
|
-
const saved = { physical_stock: 10, minimum_stock: 0, reserved_stock: 2, incoming_stock: 0, notes: null };
|
|
8
|
-
const entered = { ...saved, physical_stock: 100 };
|
|
9
|
-
describe("1.0.140 opslaan bij dichte poort", () => {
|
|
10
|
-
it("bevestigde opslag met dichte poort: 'Opgeslagen; er is niets naar Floriday gestuurd.'", () => {
|
|
11
|
-
const m = opslaanMelding({ opgeslagen: true, floriday_klaargezet_toegestaan: false }, true);
|
|
12
|
-
expect(m).toEqual({ ok: true, tekst: "Opgeslagen; er is niets naar Floriday gestuurd." });
|
|
13
|
-
});
|
|
14
|
-
it("teruggedraaide opslag (fout, geen antwoord) = mislukt en oude waarden terug", () => {
|
|
15
|
-
const m = opslaanMelding(null, true);
|
|
16
|
-
expect(m).toEqual({ ok: false, tekst: OPSLAAN_MISLUKT_TEKST });
|
|
17
|
-
expect(valuesAfterSave(m.ok, entered, saved).physical_stock).toBe(10);
|
|
18
|
-
});
|
|
19
|
-
it("antwoord zonder bevestiging telt niet als opgeslagen", () => {
|
|
20
|
-
expect(opslaanMelding({ opgeslagen: false }, true).ok).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe("1.0.140 databasefouten in gewone taal", () => {
|
|
24
|
-
it("ontbrekende controlewaarde wordt 'nog niet beschikbaar'", () => {
|
|
25
|
-
const t = dbFoutTekst({ code: "23514", message: 'new row for relation "stock_mutation_log" violates check constraint' }, "Afboeken");
|
|
26
|
-
expect(t).toBe("Afboeken is nog niet beschikbaar in deze omgeving, neem contact op met de beheerder.");
|
|
27
|
-
});
|
|
28
|
-
it("oude poortfout toont geen technische tekst", () => {
|
|
29
|
-
const t = dbFoutTekst({ message: "Uitgaand Floriday-verkeer (stock_publish) is uitgeschakeld" }, "Opslaan");
|
|
30
|
-
expect(t).not.toContain("stock_publish");
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe("1.0.140 schemacontrole", () => {
|
|
34
|
-
it("ouder schema blokkeert", () => {
|
|
35
|
-
expect(controleerSchema("-- @flowselections/floriday-voorraad 1.0.136 x", "1.0.140").length).toBeGreaterThan(0);
|
|
36
|
-
});
|
|
37
|
-
it("het meegeleverde schema hoort bij de versie in package.json", () => {
|
|
38
|
-
const versie = JSON.parse(readFileSync("package.json", "utf8")).version;
|
|
39
|
-
const sql = readFileSync("sql/floriday-voorraad-schema.sql", "utf8");
|
|
40
|
-
expect(controleerSchema(sql, versie)).toEqual([]);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-guard.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/request-guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createBundler, createRequestGuard } from "../request-guard.js";
|
|
3
|
-
describe("request guard", () => {
|
|
4
|
-
it("staat 30 aanvragen in 10 s toe en stopt de 31e", () => {
|
|
5
|
-
let t = 0;
|
|
6
|
-
const g = createRequestGuard(30, 10000, () => t);
|
|
7
|
-
const err = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
8
|
-
for (let i = 0; i < 30; i++)
|
|
9
|
-
expect(g.allow("products")).toBe(true);
|
|
10
|
-
expect(g.allow("products")).toBe(false);
|
|
11
|
-
expect(g.trips()[0].table).toBe("products");
|
|
12
|
-
expect(g.allow("trade_item_stock")).toBe(true);
|
|
13
|
-
err.mockRestore();
|
|
14
|
-
});
|
|
15
|
-
it("telt alleen binnen het venster", () => {
|
|
16
|
-
let t = 0;
|
|
17
|
-
const g = createRequestGuard(30, 10000, () => t);
|
|
18
|
-
for (let i = 0; i < 30; i++)
|
|
19
|
-
g.allow("products");
|
|
20
|
-
t = 10001;
|
|
21
|
-
expect(g.allow("products")).toBe(true);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe("bundler", () => {
|
|
25
|
-
it("10 seintjes binnen 2 s geven 1 herlaadactie", () => {
|
|
26
|
-
vi.useFakeTimers();
|
|
27
|
-
const run = vi.fn();
|
|
28
|
-
const b = createBundler(run, 2000, { isHidden: () => false });
|
|
29
|
-
for (let i = 0; i < 10; i++)
|
|
30
|
-
b.trigger();
|
|
31
|
-
vi.advanceTimersByTime(1999);
|
|
32
|
-
expect(run).toHaveBeenCalledTimes(1);
|
|
33
|
-
vi.useRealTimers();
|
|
34
|
-
});
|
|
35
|
-
it("verborgen tabblad: 0 herlaadacties, bij terugkeren 1", () => {
|
|
36
|
-
vi.useFakeTimers();
|
|
37
|
-
let hidden = true;
|
|
38
|
-
const run = vi.fn();
|
|
39
|
-
const b = createBundler(run, 2000, { isHidden: () => hidden });
|
|
40
|
-
for (let i = 0; i < 5; i++)
|
|
41
|
-
b.trigger();
|
|
42
|
-
vi.advanceTimersByTime(10000);
|
|
43
|
-
expect(run).toHaveBeenCalledTimes(0);
|
|
44
|
-
hidden = false;
|
|
45
|
-
b.flushIfPending();
|
|
46
|
-
vi.advanceTimersByTime(0);
|
|
47
|
-
expect(run).toHaveBeenCalledTimes(1);
|
|
48
|
-
vi.useRealTimers();
|
|
49
|
-
});
|
|
50
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stock-save.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/stock-save.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { afboekFout, floridayNaOpslaanTekst, valuesAfterSave } from "../stock-save.js";
|
|
3
|
-
const saved = { physical_stock: 40, minimum_stock: 5, reserved_stock: 12, incoming_stock: 0, notes: null };
|
|
4
|
-
describe("lokaal voorraad opslaan (1.0.138)", () => {
|
|
5
|
-
it("mislukte opslag zet de oude waarden terug (geen 'Beschikbaar: 100' zonder opslag)", () => {
|
|
6
|
-
const entered = { ...saved, physical_stock: 112 };
|
|
7
|
-
expect(valuesAfterSave(false, entered, saved).physical_stock).toBe(40);
|
|
8
|
-
});
|
|
9
|
-
it("gereserveerd komt na opslaan uit de opgeslagen rij, niet uit invoer", () => {
|
|
10
|
-
const entered = { ...saved, physical_stock: 100, reserved_stock: 0 };
|
|
11
|
-
const out = valuesAfterSave(true, entered, saved);
|
|
12
|
-
expect(out.physical_stock).toBe(100);
|
|
13
|
-
expect(out.reserved_stock).toBe(12);
|
|
14
|
-
});
|
|
15
|
-
it("Floriday-artikel bij dichte poort: lokaal opgeslagen, melding dat er niets naar Floriday gaat", () => {
|
|
16
|
-
expect(floridayNaOpslaanTekst(true, false)).toMatch(/niets naar Floriday/);
|
|
17
|
-
expect(floridayNaOpslaanTekst(true, null)).toMatch(/niets naar Floriday/);
|
|
18
|
-
expect(floridayNaOpslaanTekst(true, true)).toBeNull();
|
|
19
|
-
expect(floridayNaOpslaanTekst(false, false)).toBeNull();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
describe("afboeken met verplichte reden", () => {
|
|
23
|
-
it("zonder reden geweigerd", () => {
|
|
24
|
-
expect(afboekFout(5, null, 40)).toBe("Kies een reden.");
|
|
25
|
-
expect(afboekFout(5, "zomaar", 40)).toBe("Kies een reden.");
|
|
26
|
-
});
|
|
27
|
-
it("met reden uit de vaste lijst toegestaan", () => {
|
|
28
|
-
for (const r of ["derving", "kapot", "eigen_gebruik", "overig"])
|
|
29
|
-
expect(afboekFout(5, r, 40)).toBeNull();
|
|
30
|
-
});
|
|
31
|
-
it("niet meer dan liggend, en groter dan 0", () => {
|
|
32
|
-
expect(afboekFout(41, "kapot", 40)).toMatch(/niet meer afboeken/);
|
|
33
|
-
expect(afboekFout(0, "kapot", 40)).toMatch(/groter dan 0/);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stock-scope.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/stock-scope.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { buildScopedStockMap, connectionStatusOf, noConnectionText } from "../stock-scope.js";
|
|
3
|
-
const row = (connection_id, key, physical_stock) => ({
|
|
4
|
-
connection_id,
|
|
5
|
-
trade_item_key: key,
|
|
6
|
-
physical_stock,
|
|
7
|
-
});
|
|
8
|
-
describe("connectionStatusOf", () => {
|
|
9
|
-
it("lege RPC-uitkomst = geen koppeling", () => {
|
|
10
|
-
expect(connectionStatusOf({ loading: false, error: null, connectionId: null })).toBe("geen_koppeling");
|
|
11
|
-
});
|
|
12
|
-
it("RPC-fout = fout", () => {
|
|
13
|
-
expect(connectionStatusOf({ loading: false, error: "kapot", connectionId: null })).toBe("fout");
|
|
14
|
-
});
|
|
15
|
-
it("rij met id = actief", () => {
|
|
16
|
-
expect(connectionStatusOf({ loading: false, error: null, connectionId: "c1" })).toBe("actief");
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe("noConnectionText", () => {
|
|
20
|
-
it("noemt de omgeving alleen als die bekend is", () => {
|
|
21
|
-
expect(noConnectionText("live")).toContain("omgeving live");
|
|
22
|
-
expect(noConnectionText(null)).toContain("de gekozen omgeving");
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
describe("buildScopedStockMap", () => {
|
|
26
|
-
it("geen koppeling: eigen rij telt mee", () => {
|
|
27
|
-
const m = buildScopedStockMap([row(null, "product:a", 12)], null);
|
|
28
|
-
expect(m.get("product:a")?.physical_stock).toBe(12);
|
|
29
|
-
});
|
|
30
|
-
it("geen koppeling: rijen met een koppeling tellen niet", () => {
|
|
31
|
-
const m = buildScopedStockMap([row("c1", "product:a", 5), row("c2", "product:b", 7)], null);
|
|
32
|
-
expect(m.size).toBe(0);
|
|
33
|
-
});
|
|
34
|
-
it("koppeling + eigen rij: één regel, geen dubbele telling", () => {
|
|
35
|
-
const m = buildScopedStockMap([row(null, "product:a", 3), row("c1", "product:a", 9), row("c1", "product:b", 4), row(null, "product:c", 2)], "c1");
|
|
36
|
-
expect(m.size).toBe(3);
|
|
37
|
-
expect(m.get("product:a")?.physical_stock).toBe(9);
|
|
38
|
-
expect(m.get("product:c")?.physical_stock).toBe(2);
|
|
39
|
-
});
|
|
40
|
-
it("koppeling: rijen van een andere koppeling tellen niet", () => {
|
|
41
|
-
const m = buildScopedStockMap([row("c2", "product:a", 50)], "c1");
|
|
42
|
-
expect(m.size).toBe(0);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trade-item-photo.test.d.ts","sourceRoot":"","sources":["../../../src/server-hooks/__tests__/trade-item-photo.test.ts"],"names":[],"mappings":""}
|