Files
Multi-Debrid-Downloader/tests/account-ui.test.ts
Sucukdeluxe 9f0140dd3c feat: refine account management and targeted editing
Add local provider icons, larger compact account rows, the requested column order, and full username display while keeping secrets masked. Replace provider-wide editing with a row-specific editor that preserves sibling accounts, exact limits, live usage counters, and status metadata. Add targeted credential validation, release notices, and regression coverage.
2026-08-09 21:32:09 +02:00

101 lines
3.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildBulkAccountEnabledState,
buildConfiguredProviderOrder,
getAccountDialogSelectableOptions,
isAccountRowSelectionKey,
matchesAccountModeFilter,
pruneAccountRowSelection,
resolveAccountUsername,
resolveVisibleAccountKind
} from "../src/renderer/account-ui";
describe("account mode filter", () => {
it("shows only API options for the API filter", () => {
expect(matchesAccountModeFilter({ modeLabel: "API" }, "api")).toBe(true);
expect(matchesAccountModeFilter({ modeLabel: "Web-Login" }, "api")).toBe(false);
});
it("shows Web-Login options for the Web filter", () => {
expect(matchesAccountModeFilter({ modeLabel: "Web-Login" }, "web")).toBe(true);
expect(matchesAccountModeFilter({ modeLabel: "API" }, "web")).toBe(false);
});
});
describe("bulk account activation", () => {
it("disables each configured provider and account exactly once", () => {
expect(buildBulkAccountEnabledState(
["alldebrid"],
["megadebrid-api", "alldebrid"],
["mega-1", "mega-1", "mega-2"],
["debrid-link-1", "debrid-link-1"],
false
)).toEqual({
disabledProviders: ["alldebrid", "megadebrid-api"],
megaDebridDisabledAccountIds: ["mega-1", "mega-2"],
debridLinkDisabledKeyIds: ["debrid-link-1"]
});
});
it("enables configured providers without changing unrelated provider state", () => {
expect(buildBulkAccountEnabledState(
["realdebrid", "alldebrid", "megadebrid-api"],
["alldebrid", "megadebrid-api"],
["mega-1"],
["debrid-link-1"],
true
)).toEqual({
disabledProviders: ["realdebrid"],
megaDebridDisabledAccountIds: [],
debridLinkDisabledKeyIds: []
});
});
it("preserves the custom provider order while accounts are disabled", () => {
expect(buildConfiguredProviderOrder(
["debridlink", "realdebrid", "alldebrid"],
["realdebrid", "alldebrid", "debridlink", "bestdebrid"]
)).toEqual(["debridlink", "realdebrid", "alldebrid", "bestdebrid"]);
});
});
describe("account selection", () => {
it("clears a selected row after that account disappears", () => {
expect(pruneAccountRowSelection("account-a", ["account-b"])).toBeNull();
expect(pruneAccountRowSelection("account-a", ["account-a", "account-b"])).toBe("account-a");
});
it("moves a hidden provider selection to the first visible option", () => {
expect(resolveVisibleAccountKind("realdebrid-api", ["realdebrid-web", "bestdebrid-web"]))
.toBe("realdebrid-web");
expect(resolveVisibleAccountKind("realdebrid-api", [])).toBeNull();
expect(resolveVisibleAccountKind("realdebrid-api", ["realdebrid-api", "bestdebrid-api"]))
.toBe("realdebrid-api");
});
it("keeps edit options available after a filter temporarily has no matches", () => {
const options = [
{ kind: "realdebrid-api", service: "realdebrid" },
{ kind: "realdebrid-web", service: "realdebrid" },
{ kind: "bestdebrid-api", service: "bestdebrid" }
];
expect(getAccountDialogSelectableOptions(options, [], "edit", "realdebrid").map((option) => option.kind))
.toEqual(["realdebrid-api", "realdebrid-web"]);
});
it("does not consume keyboard activation from controls inside a row", () => {
expect(isAccountRowSelectionKey("Enter", true)).toBe(true);
expect(isAccountRowSelectionKey(" ", true)).toBe(true);
expect(isAccountRowSelectionKey("Enter", false)).toBe(false);
expect(isAccountRowSelectionKey(" ", false)).toBe(false);
});
});
describe("account usernames", () => {
it("shows the full stored login and prefers a checked provider email", () => {
expect(resolveAccountUsername("member@example.com", undefined)).toBe("member@example.com");
expect(resolveAccountUsername("stored@example.com", "verified@example.com")).toBe("verified@example.com");
expect(resolveAccountUsername("", undefined)).toBe("—");
});
});