Files
descrybe/apps/web/src/lib/store-reconnect.test.ts
T

144 lines
3.9 KiB
TypeScript
Raw Normal View History

/**
* 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"
);
});
});