116 lines
3.8 KiB
TypeScript
116 lines
3.8 KiB
TypeScript
import { strict as assert } from "node:assert";
|
|
import { test } from "node:test";
|
|
import {
|
|
BACKEND_API_BASE_URLS,
|
|
getBackendApiBaseUrl,
|
|
getDiagramTodayUrl,
|
|
getOfficialPositionResolverConfig,
|
|
normalizeJrDataSystemEnvironment,
|
|
resolveJrDataSystemEnvironment,
|
|
rewriteBackendApiUrl,
|
|
rewriteJrDataSystemUrl,
|
|
} from "../lib/jrDataSystemEnvironment";
|
|
import { buildOfficialPositionEditUrl } from "../lib/officialPositionEditUrl";
|
|
|
|
test("legacy environment keys normalize without inventing new environments", () => {
|
|
assert.equal(normalizeJrDataSystemEnvironment("production"), "production_release");
|
|
assert.equal(normalizeJrDataSystemEnvironment("chatgpt"), "production_beta");
|
|
assert.equal(normalizeJrDataSystemEnvironment("claude"), "production_beta");
|
|
assert.equal(normalizeJrDataSystemEnvironment("unknown"), "production_release");
|
|
});
|
|
|
|
test("track and UI choices resolve to the three supported environments", () => {
|
|
assert.equal(
|
|
resolveJrDataSystemEnvironment("production", "release"),
|
|
"production_release",
|
|
);
|
|
assert.equal(
|
|
resolveJrDataSystemEnvironment("production", "beta"),
|
|
"production_beta",
|
|
);
|
|
assert.equal(
|
|
resolveJrDataSystemEnvironment("experimental", "beta"),
|
|
"experimental",
|
|
);
|
|
});
|
|
|
|
test("experimental environment changes both backend and diagram endpoints", () => {
|
|
assert.equal(
|
|
getBackendApiBaseUrl("experimental"),
|
|
BACKEND_API_BASE_URLS.experimental,
|
|
);
|
|
assert.match(getDiagramTodayUrl("experimental"), /diagram-today-beta\.json$/);
|
|
assert.match(
|
|
getDiagramTodayUrl("production_release"),
|
|
/diagram-today\.json$/,
|
|
);
|
|
});
|
|
|
|
|
|
test("all environments use the canonical OfficialPosition Backend", () => {
|
|
assert.equal(
|
|
getOfficialPositionResolverConfig("experimental").backendApiBaseUrl,
|
|
BACKEND_API_BASE_URLS.experimental,
|
|
);
|
|
assert.equal(
|
|
getOfficialPositionResolverConfig("production_release").backendApiBaseUrl,
|
|
BACKEND_API_BASE_URLS.production,
|
|
);
|
|
assert.equal(
|
|
getOfficialPositionResolverConfig("production_beta").backendApiBaseUrl,
|
|
BACKEND_API_BASE_URLS.production,
|
|
);
|
|
});
|
|
test("OfficialPosition edit URL follows the selected Frontend environment", () => {
|
|
const positionId = "b754e5fc-789b-419c-b5bc-97585cba793f";
|
|
const experimental = buildOfficialPositionEditUrl(
|
|
positionId,
|
|
"push/token",
|
|
getOfficialPositionResolverConfig("experimental"),
|
|
"eachTrainInfo",
|
|
);
|
|
assert.ok(experimental);
|
|
const experimentalUrl = new URL(experimental);
|
|
assert.equal(experimentalUrl.origin, "https://experimental.shikoku-railinfo.haruk.in");
|
|
assert.equal(experimentalUrl.pathname, `/train-position/${positionId}/edit`);
|
|
assert.equal(experimentalUrl.searchParams.get("userID"), "push/token");
|
|
assert.equal(experimentalUrl.searchParams.get("from"), "eachTrainInfo");
|
|
assert.equal(experimentalUrl.searchParams.get("position_id"), null);
|
|
|
|
const production = buildOfficialPositionEditUrl(
|
|
positionId,
|
|
"machine",
|
|
getOfficialPositionResolverConfig("production_release"),
|
|
);
|
|
assert.ok(production);
|
|
assert.equal(new URL(production).origin, "https://shikoku-railinfo.haruk.in");
|
|
|
|
assert.equal(
|
|
buildOfficialPositionEditUrl(positionId, "machine", {
|
|
...getOfficialPositionResolverConfig("experimental"),
|
|
officialPositionEditEnabled: false,
|
|
}),
|
|
undefined,
|
|
);
|
|
});
|
|
test("URL rewriting only changes known JR data-system origins", () => {
|
|
assert.equal(
|
|
rewriteBackendApiUrl(
|
|
`${BACKEND_API_BASE_URLS.production}/train-data`,
|
|
"experimental",
|
|
),
|
|
`${BACKEND_API_BASE_URLS.experimental}/train-data`,
|
|
);
|
|
assert.equal(
|
|
rewriteJrDataSystemUrl(
|
|
"https://shikoku-railinfo.haruk.in/path?q=1",
|
|
"production_beta",
|
|
),
|
|
"https://nightly.shikoku-railinfo.haruk.in/path?q=1",
|
|
);
|
|
assert.equal(
|
|
rewriteJrDataSystemUrl("https://example.com/path", "experimental"),
|
|
"https://example.com/path",
|
|
);
|
|
});
|