Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* 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"
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user