You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { describe, expect, it, vi } from "vitest";
import {
assertRpaWorkerEnv,
isForbiddenQuoteUrl,
parseMothershipQuoteUrls,
shouldKeepBrowserOpen,
shouldKeepBrowserWarm,
isParkedSessionEnabled,
getRpaPlaceFixMode,
validateMothershipQuoteUrls,
isWidgetQuoteFallbackEnabled,
} from "@/lib/rpa/env";
describe("lib/rpa/env", () => {
it("parseMothershipQuoteUrls 解析逗号分隔列表", () => {
expect(
parseMothershipQuoteUrls(
"https://example.com/a , https://example.com/b",
),
).toEqual(["https://example.com/a", "https://example.com/b"]);
});
it("isForbiddenQuoteUrl 拦截 dashboard 与 /quote", () => {
expect(isForbiddenQuoteUrl("https://dashboard.mothership.com/")).toBe(true);
expect(isForbiddenQuoteUrl("https://www.mothership.com/quote")).toBe(true);
expect(isForbiddenQuoteUrl("https://ship.mothership.com/rate")).toBe(false);
});
it("validateMothershipQuoteUrls 空列表报错", () => {
expect(validateMothershipQuoteUrls([])).toContain(
"MOTHERSHIP_QUOTE_URLS 未配置或为空",
);
});
it("assertRpaWorkerEnv mock 模式跳过校验", () => {
vi.stubEnv("RPA_MOCK_MODE", "true");
vi.stubEnv("MOTHERSHIP_QUOTE_URLS", "");
expect(() => assertRpaWorkerEnv()).not.toThrow();
vi.unstubAllEnvs();
});
it("assertRpaWorkerEnv 缺 URL 时 fail-fast", () => {
vi.stubEnv("RPA_MOCK_MODE", "false");
vi.stubEnv("MOTHERSHIP_QUOTE_URLS", "");
expect(() => assertRpaWorkerEnv()).toThrow(/MOTHERSHIP_QUOTE_URLS/);
vi.unstubAllEnvs();
});
it("assertRpaWorkerEnv 禁止 dashboard URL", () => {
vi.stubEnv("RPA_MOCK_MODE", "false");
vi.stubEnv(
"MOTHERSHIP_QUOTE_URLS",
"https://dashboard.mothership.com/",
);
expect(() => assertRpaWorkerEnv()).toThrow(/禁止的报价入口 URL/);
vi.unstubAllEnvs();
});
it("shouldKeepBrowserOpen 唯一 config 来源", () => {
vi.stubEnv("RPA_KEEP_BROWSER_OPEN", "true");
expect(shouldKeepBrowserOpen()).toBe(true);
vi.stubEnv("RPA_KEEP_BROWSER_OPEN", "false");
expect(shouldKeepBrowserOpen()).toBe(false);
vi.unstubAllEnvs();
});
it("shouldKeepBrowserWarm headless 默认保活", () => {
vi.stubEnv("RPA_KEEP_BROWSER_WARM", "");
vi.stubEnv("RPA_HEADLESS", "true");
expect(shouldKeepBrowserWarm()).toBe(true);
vi.stubEnv("RPA_KEEP_BROWSER_WARM", "false");
expect(shouldKeepBrowserWarm()).toBe(false);
vi.unstubAllEnvs();
});
it("isParkedSessionEnabled 默认关,显式 true 才开", () => {
vi.stubEnv("RPA_PARKED_SESSION", "");
expect(isParkedSessionEnabled()).toBe(false);
vi.stubEnv("RPA_PARKED_SESSION", "true");
expect(isParkedSessionEnabled()).toBe(true);
vi.unstubAllEnvs();
});
it("getRpaPlaceFixMode 默认 event支持 state/legacy", () => {
vi.stubEnv("RPA_PLACE_FIX_MODE", "");
expect(getRpaPlaceFixMode()).toBe("event");
vi.stubEnv("RPA_PLACE_FIX_MODE", "state");
expect(getRpaPlaceFixMode()).toBe("state");
vi.stubEnv("RPA_PLACE_FIX_MODE", "legacy");
expect(getRpaPlaceFixMode()).toBe("legacy");
vi.unstubAllEnvs();
});
it("isWidgetQuoteFallbackEnabled 默认开RPA_DISABLE_WIDGET_QUOTE_FALLBACK=true 关闭", () => {
vi.stubEnv("RPA_DISABLE_WIDGET_QUOTE_FALLBACK", "");
expect(isWidgetQuoteFallbackEnabled()).toBe(true);
vi.stubEnv("RPA_DISABLE_WIDGET_QUOTE_FALLBACK", "true");
expect(isWidgetQuoteFallbackEnabled()).toBe(false);
vi.unstubAllEnvs();
});
});