Files
descrybe/apps/web/src/lib/shopify-admin-urls.test.ts
T
greeneclipse 8580c996c3 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.
2026-08-09 22:47:43 +02:00

54 lines
1.8 KiB
TypeScript

/**
* shopify-admin-urls unit tests (node:test).
* Pure URL / handle helpers for Shopify connect deep links (no network).
*
* Run from apps/web:
* node --experimental-strip-types --test src/lib/shopify-admin-urls.test.ts
*/
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import {
SHOPIFY_DEV_DASHBOARD_URL,
SHOPIFY_REQUIRED_SCOPES_CSV,
shopifyAdminDevelopAppsUrl,
shopifyShopHandle
} from "./shopify-admin-urls.ts";
describe("shopifyShopHandle", () => {
it("returns null for empty or invalid input", () => {
assert.equal(shopifyShopHandle(""), null);
assert.equal(shopifyShopHandle(" "), null);
assert.equal(shopifyShopHandle("not a shop"), null);
assert.equal(shopifyShopHandle("custom.example.com"), null);
assert.equal(shopifyShopHandle("localhost"), null);
});
it("accepts bare handle and myshopify host", () => {
assert.equal(shopifyShopHandle("acme-store"), "acme-store");
assert.equal(shopifyShopHandle("acme-store.myshopify.com"), "acme-store");
assert.equal(shopifyShopHandle("https://acme-store.myshopify.com/admin"), "acme-store");
});
});
describe("shopifyAdminDevelopAppsUrl", () => {
it("returns null until a valid shop handle is known", () => {
assert.equal(shopifyAdminDevelopAppsUrl(""), null);
assert.equal(shopifyAdminDevelopAppsUrl("https://example.com"), null);
});
it("builds admin.shopify.com develop-apps URL", () => {
assert.equal(
shopifyAdminDevelopAppsUrl("acme-store"),
"https://admin.shopify.com/store/acme-store/settings/apps/development"
);
});
});
describe("shopify constants", () => {
it("exposes Dev Dashboard and required scopes CSV", () => {
assert.match(SHOPIFY_DEV_DASHBOARD_URL, /^https:\/\/dev\.shopify\.com\//);
assert.equal(SHOPIFY_REQUIRED_SCOPES_CSV, "write_products, read_products, read_orders");
});
});