mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-11-14 04:33:43 +01:00
127 lines
4.0 KiB
TypeScript
127 lines
4.0 KiB
TypeScript
import type { LicenseCheckStatus } from "@yaakapp-internal/license";
|
|
import type { Settings } from "@yaakapp-internal/models";
|
|
import { describe, expect, test } from "vite-plus/test";
|
|
import {
|
|
licenseStatusFromCheck,
|
|
settingsValuesFromModel,
|
|
themesViewFromResolved,
|
|
} from "./settingsView";
|
|
|
|
describe("settingsValuesFromModel", () => {
|
|
test("picks the shared tabs' values and nothing client-only", () => {
|
|
const settings = {
|
|
model: "settings",
|
|
id: "st_1",
|
|
appearance: "dark",
|
|
themeLight: "yaak-light",
|
|
themeDark: "hotdog",
|
|
interfaceFont: "Inter",
|
|
interfaceFontSize: 15,
|
|
editorFont: null,
|
|
editorFontSize: 13,
|
|
editorKeymap: "emacs",
|
|
editorSoftWrap: false,
|
|
coloredMethods: true,
|
|
useNativeTitlebar: true,
|
|
hideWindowControls: true,
|
|
updateChannel: "beta",
|
|
autoupdate: false,
|
|
autoDownloadUpdates: false,
|
|
checkNotifications: false,
|
|
promptFeedback: false,
|
|
openWorkspaceNewWindow: true,
|
|
hideLicenseBadge: true,
|
|
clientCertificates: [],
|
|
} as unknown as Settings;
|
|
|
|
expect(settingsValuesFromModel(settings)).toEqual({
|
|
appearance: "dark",
|
|
themeLight: "yaak-light",
|
|
themeDark: "hotdog",
|
|
interfaceFont: "Inter",
|
|
interfaceFontSize: 15,
|
|
editorFont: null,
|
|
editorFontSize: 13,
|
|
editorKeymap: "emacs",
|
|
editorSoftWrap: false,
|
|
coloredMethods: true,
|
|
useNativeTitlebar: true,
|
|
hideWindowControls: true,
|
|
updateChannel: "beta",
|
|
autoupdate: false,
|
|
autoDownloadUpdates: false,
|
|
checkNotifications: false,
|
|
promptFeedback: false,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("licenseStatusFromCheck", () => {
|
|
test("is null without a check", () => {
|
|
expect(licenseStatusFromCheck(null)).toBeNull();
|
|
expect(licenseStatusFromCheck(undefined)).toBeNull();
|
|
});
|
|
|
|
test("keeps what each state's copy needs", () => {
|
|
const cases: [LicenseCheckStatus, unknown][] = [
|
|
[
|
|
{ status: "active", data: { periodEnd: "2027-01-01", cancelAt: null } },
|
|
{ status: "active" },
|
|
],
|
|
[
|
|
{ status: "trialing", data: { end: "2026-11-20" } },
|
|
{ status: "trialing", trialEnd: "2026-11-20" },
|
|
],
|
|
[{ status: "personal_use", data: { trial_ended: "2026-01-01" } }, { status: "personal_use" }],
|
|
[{ status: "inactive", data: { status: "canceled" } }, { status: "inactive" }],
|
|
[
|
|
{
|
|
status: "expired",
|
|
data: {
|
|
changes: 3,
|
|
changesUrl: "https://yaak.app/changes",
|
|
billingUrl: "https://yaak.app/billing",
|
|
periodEnd: "2026-03-04",
|
|
},
|
|
},
|
|
{ status: "expired", periodEnd: "2026-03-04", changesUrl: "https://yaak.app/changes" },
|
|
],
|
|
[
|
|
{ status: "past_due", data: { billingUrl: "https://yaak.app/billing", periodEnd: "x" } },
|
|
{ status: "past_due", billingUrl: "https://yaak.app/billing" },
|
|
],
|
|
[
|
|
{ status: "error", data: { message: "Boom", code: "E1" } },
|
|
{ status: "error", message: "Boom", code: "E1" },
|
|
],
|
|
];
|
|
for (const [check, expected] of cases) {
|
|
expect(licenseStatusFromCheck(check)).toEqual(expected);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("themesViewFromResolved", () => {
|
|
const light = { id: "yaak-light", label: "Yaak", dark: false, base: {} };
|
|
const dark = { id: "yaak-dark", label: "Yaak", dark: true, base: {} };
|
|
|
|
test("is null while the themes load", () => {
|
|
expect(themesViewFromResolved(undefined, "dark")).toBeNull();
|
|
});
|
|
|
|
test("keeps each theme's id, label and darkness, and the resolved appearance", () => {
|
|
expect(
|
|
themesViewFromResolved({ themes: [dark, light], light, dark, active: dark }, "dark"),
|
|
).toEqual({
|
|
themes: [
|
|
{ id: "yaak-dark", label: "Yaak", dark: true },
|
|
{ id: "yaak-light", label: "Yaak", dark: false },
|
|
],
|
|
light: { id: "yaak-light", label: "Yaak", dark: false },
|
|
dark: { id: "yaak-dark", label: "Yaak", dark: true },
|
|
active: { id: "yaak-dark", label: "Yaak", dark: true },
|
|
resolvedAppearance: "dark",
|
|
});
|
|
});
|
|
});
|