It existed as T1's proof of life; the rendered list proves it better. liste.js was its only caller and no longer counts VEVENTs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
67 lines
2.4 KiB
TypeScript
67 lines
2.4 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
||
import {
|
||
URL_CALENDRIER,
|
||
recupererFluxCalendrier,
|
||
} from "./extension/nextcloud.js";
|
||
|
||
const FLUX_VALIDE =
|
||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nSUMMARY:Atelier\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
|
||
|
||
function fetchQuiRenvoie(corps: string, status = 200) {
|
||
return async () => new Response(corps, { status });
|
||
}
|
||
|
||
describe("recupererFluxCalendrier", () => {
|
||
test("succès : 200 + VCALENDAR → { ok:true, flux }", async () => {
|
||
const res = await recupererFluxCalendrier(fetchQuiRenvoie(FLUX_VALIDE));
|
||
expect(res).toEqual({ ok: true, flux: FLUX_VALIDE });
|
||
});
|
||
|
||
test("non-connecté : 200 + page de login HTML → non-connecte", async () => {
|
||
const res = await recupererFluxCalendrier(
|
||
fetchQuiRenvoie("<!DOCTYPE html><html><body>Login</body></html>"),
|
||
);
|
||
expect(res).toEqual({ ok: false, erreur: "non-connecte" });
|
||
});
|
||
|
||
test("non-connecté : status 401 → non-connecte", async () => {
|
||
const res = await recupererFluxCalendrier(fetchQuiRenvoie("", 401));
|
||
expect(res).toEqual({ ok: false, erreur: "non-connecte" });
|
||
});
|
||
|
||
test("non-connecté : status 403 → non-connecte", async () => {
|
||
const res = await recupererFluxCalendrier(fetchQuiRenvoie("", 403));
|
||
expect(res).toEqual({ ok: false, erreur: "non-connecte" });
|
||
});
|
||
|
||
test("serveur : status 500 → serveur", async () => {
|
||
const res = await recupererFluxCalendrier(fetchQuiRenvoie("", 500));
|
||
expect(res).toEqual({ ok: false, erreur: "serveur" });
|
||
});
|
||
|
||
test("réseau : fetch lève → reseau", async () => {
|
||
const res = await recupererFluxCalendrier(async () => {
|
||
throw new TypeError("Failed to fetch");
|
||
});
|
||
expect(res).toEqual({ ok: false, erreur: "reseau" });
|
||
});
|
||
|
||
test("BOM / espaces en tête : reste un succès", async () => {
|
||
const corps = "\r\n" + FLUX_VALIDE;
|
||
const res = await recupererFluxCalendrier(fetchQuiRenvoie(corps));
|
||
expect(res).toEqual({ ok: true, flux: corps });
|
||
});
|
||
|
||
test("appelle fetchImpl avec URL_CALENDRIER et credentials:include", async () => {
|
||
let urlVue: unknown;
|
||
let optionsVues: unknown;
|
||
await recupererFluxCalendrier(async (url, options) => {
|
||
urlVue = url;
|
||
optionsVues = options;
|
||
return new Response(FLUX_VALIDE);
|
||
});
|
||
expect(urlVue).toBe(URL_CALENDRIER);
|
||
expect(optionsVues).toEqual({ credentials: "include" });
|
||
});
|
||
});
|