Files
obsidian-livesync/src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.unit.spec.ts
T

44 lines
1.7 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { isValidCouchDBServerURL, probeCouchDBConnection } from "./couchDBConnectionProbe";
describe("CouchDB setup connection policy", () => {
it.each([
[false, "connect to an existing database"],
[true, "create or connect to a database"],
] as const)("%s can %s through an owned connection probe", async (createIfMissing, _description) => {
const check = vi.fn(async () => ({ ok: true as const }));
const dispose = vi.fn(async () => undefined);
const probe = { check, getStatus: vi.fn(), dispose };
await expect(probeCouchDBConnection(probe, createIfMissing)).resolves.toEqual({ ok: true });
expect(check).toHaveBeenCalledWith({ createIfMissing, showResult: false });
expect(dispose).toHaveBeenCalledOnce();
});
it("returns a connection error and still disposes the probe", async () => {
const dispose = vi.fn(async () => undefined);
const probe = {
check: vi.fn(async () => ({ ok: false as const, reason: "database does not exist" })),
getStatus: vi.fn(),
dispose,
};
await expect(probeCouchDBConnection(probe, false)).resolves.toEqual({
ok: false,
reason: "database does not exist",
});
expect(dispose).toHaveBeenCalledOnce();
});
it.each([
["https://couch.example", true],
["http://127.0.0.1:5984", true],
["ftp://couch.example", false],
["couch.example", false],
["https://", false],
])("validates the saved server URL %s", (value, expected) => {
expect(isValidCouchDBServerURL(value)).toBe(expected);
});
});