/** * store-reconnect unit tests (node:test). * Pure helpers for store cutover reconnect UX (StoreReconnectBanner / ProductSyncSummary). * * Run from apps/web: * node --experimental-strip-types --test src/lib/store-reconnect.test.ts */ import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { STORE_RECONNECT_TARGETS, STORE_RECONNECT_WIZARD_HREF, needsStoreReconnect, storeConnectorAction, storeReconnectHref } from "./store-reconnect.ts"; describe("STORE_RECONNECT_TARGETS", () => { it("lists WooCommerce and Shopify with connection deep links", () => { assert.deepEqual( STORE_RECONNECT_TARGETS.map((t) => t.id), ["woocommerce", "shopify"] ); const woo = STORE_RECONNECT_TARGETS.find((t) => t.id === "woocommerce"); const shopify = STORE_RECONNECT_TARGETS.find((t) => t.id === "shopify"); assert.ok(woo); assert.ok(shopify); assert.equal(woo.href, "/woocommerce?tab=connection#store-reconnect"); assert.equal(shopify.href, "/stores/shopify?tab=connection#store-reconnect"); assert.equal(woo.label, "WooCommerce"); assert.equal(shopify.label, "Shopify"); }); it("exposes guided wizard href", () => { assert.equal(STORE_RECONNECT_WIZARD_HREF, "/stores/wizard"); }); }); describe("needsStoreReconnect", () => { it("returns false for missing or empty probes", () => { assert.equal(needsStoreReconnect(null), false); assert.equal(needsStoreReconnect(undefined), false); assert.equal(needsStoreReconnect({}), false); assert.equal(needsStoreReconnect({ configured: false }), false); assert.equal(needsStoreReconnect({ store_url: " ", shop_domain: "" }), false); }); it("returns false when credentials are present", () => { assert.equal( needsStoreReconnect({ configured: true, has_credentials: true, store_url: "https://shop.example" }), false ); assert.equal( needsStoreReconnect({ has_credentials: true, shop_domain: "example.myshopify.com" }), false ); }); it("returns true when configured but secrets are missing", () => { assert.equal(needsStoreReconnect({ configured: true }), true); assert.equal( needsStoreReconnect({ configured: true, has_credentials: false }), true ); }); it("returns true when store identity exists without credentials", () => { assert.equal( needsStoreReconnect({ store_url: "https://shop.example" }), true ); assert.equal( needsStoreReconnect({ shop_domain: "example.myshopify.com" }), true ); assert.equal( needsStoreReconnect({ store_url: " https://shop.example ", has_credentials: false }), true ); }); }); describe("storeReconnectHref", () => { it("resolves known connector ids", () => { assert.equal( storeReconnectHref("woocommerce"), "/woocommerce?tab=connection#store-reconnect" ); assert.equal( storeReconnectHref("shopify"), "/stores/shopify?tab=connection#store-reconnect" ); }); it("falls back to /stores for unknown ids", () => { assert.equal( storeReconnectHref("unknown" as "woocommerce"), "/stores" ); }); }); describe("storeConnectorAction", () => { it("shows connect/reconnect only for company admins", () => { assert.equal( storeConnectorAction({ canAdmin: true, connected: false, needsReconnect: false }), "connect" ); assert.equal( storeConnectorAction({ canAdmin: true, connected: false, needsReconnect: true }), "reconnect" ); assert.equal( storeConnectorAction({ canAdmin: false, connected: false, needsReconnect: false }), "view" ); assert.equal( storeConnectorAction({ canAdmin: false, connected: false, needsReconnect: true }), "view" ); }); it("keeps open for connected stores regardless of role", () => { assert.equal( storeConnectorAction({ canAdmin: false, connected: true, needsReconnect: false }), "open" ); assert.equal( storeConnectorAction({ canAdmin: true, connected: true, needsReconnect: false }), "open" ); }); });