714486f43c
Check Deno code / Check Deno code (pull_request) Successful in 5s
Tests / Unit tests (pull_request) Successful in 12s
Tests / Integration tests (pull_request) Successful in 1m9s
Check Deno code / Check Deno code (push) Successful in 6s
Tests / Unit tests (push) Successful in 12s
Tests / Integration tests (push) Successful in 1m13s
225 lines
6.6 KiB
TypeScript
225 lines
6.6 KiB
TypeScript
// Unit tests for /ajustements endpoints — fixtures, mock API, mock DB
|
|
|
|
import { assertEquals, assertExists } from "@std/assert";
|
|
import { mockFetch, restoreFetch } from "../helpers/api_mock.ts";
|
|
import { createMockDb } from "../helpers/db_mock.ts";
|
|
import { type Ajustement, ajustements } from "../helpers/fixtures.ts";
|
|
|
|
// --- Fixtures ---
|
|
|
|
Deno.test("ajustements: fixtures have correct shape", () => {
|
|
assertEquals(ajustements.length, 2);
|
|
assertEquals(typeof ajustements[0].numEtud, "number");
|
|
assertEquals(typeof ajustements[0].idUE, "number");
|
|
assertEquals(typeof ajustements[0].valeur, "number");
|
|
});
|
|
|
|
// --- Mock API ---
|
|
|
|
Deno.test("mock API: GET /ajustements returns list", async () => {
|
|
mockFetch({ "/ajustements": ajustements });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements");
|
|
assertEquals(res.status, 200);
|
|
const data: Ajustement[] = await res.json();
|
|
assertEquals(data.length, 2);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: GET /ajustements?numEtud filters by student", async () => {
|
|
const filtered = ajustements.filter((a) => a.numEtud === 21212006);
|
|
mockFetch({ "/ajustements": filtered });
|
|
try {
|
|
const res = await fetch(
|
|
"http://localhost/api/ajustements?numEtud=21212006",
|
|
);
|
|
const data: Ajustement[] = await res.json();
|
|
assertEquals(data.length, 1);
|
|
assertEquals(data[0].numEtud, 21212006);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: GET /ajustements?numEtud=NaN returns 400", async () => {
|
|
mockFetch({ "/ajustements": { status: 400 } });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements?numEtud=abc");
|
|
assertEquals(res.status, 400);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: POST /ajustements creates ajustement (201) as employee", async () => {
|
|
const newAjust: Ajustement = { numEtud: 21212007, idUE: 2, valeur: 14.0 };
|
|
mockFetch({
|
|
"/ajustements": { method: "POST", status: 201, body: newAjust },
|
|
});
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements", {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify(newAjust),
|
|
});
|
|
assertEquals(res.status, 201);
|
|
const data: Ajustement = await res.json();
|
|
assertEquals(data.numEtud, 21212007);
|
|
assertEquals(data.valeur, 14.0);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: POST /ajustements 403 for non-employee", async () => {
|
|
mockFetch({ "/ajustements": { method: "POST", status: 403 } });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements", {
|
|
method: "POST",
|
|
});
|
|
assertEquals(res.status, 403);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: POST /ajustements 400 on missing fields", async () => {
|
|
mockFetch({ "/ajustements": { method: "POST", status: 400 } });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements", {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({ numEtud: 21212006 }),
|
|
});
|
|
assertEquals(res.status, 400);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: GET /ajustements/:numEtud/:idUE returns ajustement (employee)", async () => {
|
|
mockFetch({ "/ajustements/21212006/1": ajustements[0] });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements/21212006/1");
|
|
assertEquals(res.status, 200);
|
|
const data: Ajustement = await res.json();
|
|
assertEquals(data.valeur, 13.25);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: GET /ajustements/:numEtud/:idUE 403 for non-employee", async () => {
|
|
mockFetch({ "/ajustements/21212006/1": { status: 403 } });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements/21212006/1");
|
|
assertEquals(res.status, 403);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: GET /ajustements/:numEtud/:idUE 404 when not found", async () => {
|
|
mockFetch({
|
|
"/ajustements/99999/9": {
|
|
status: 404,
|
|
body: { error: "Ajustement introuvable" },
|
|
},
|
|
});
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements/99999/9");
|
|
assertEquals(res.status, 404);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: PUT /ajustements/:numEtud/:idUE updates valeur", async () => {
|
|
const updated: Ajustement = { ...ajustements[0], valeur: 18.0 };
|
|
mockFetch({
|
|
"/ajustements/21212006/1": { method: "PUT", status: 200, body: updated },
|
|
});
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements/21212006/1", {
|
|
method: "PUT",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({ valeur: 18.0 }),
|
|
});
|
|
assertEquals(res.status, 200);
|
|
const data: Ajustement = await res.json();
|
|
assertEquals(data.valeur, 18.0);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
Deno.test("mock API: DELETE /ajustements/:numEtud/:idUE returns 204", async () => {
|
|
mockFetch({ "/ajustements/21212006/1": { method: "DELETE", status: 204 } });
|
|
try {
|
|
const res = await fetch("http://localhost/api/ajustements/21212006/1", {
|
|
method: "DELETE",
|
|
});
|
|
assertEquals(res.status, 204);
|
|
} finally {
|
|
restoreFetch();
|
|
}
|
|
});
|
|
|
|
// --- Mock DB ---
|
|
|
|
Deno.test("mock DB: find ajustement by composite key", () => {
|
|
const db = createMockDb({ tables: { ajustements: [...ajustements] } });
|
|
const a = db.findOne<Ajustement>(
|
|
"ajustements",
|
|
(a) => a.numEtud === 21212006 && a.idUE === 1,
|
|
);
|
|
assertExists(a);
|
|
assertEquals(a.valeur, 13.25);
|
|
});
|
|
|
|
Deno.test("mock DB: filter ajustements by numEtud", () => {
|
|
const db = createMockDb({ tables: { ajustements: [...ajustements] } });
|
|
const rows = db.findMany<Ajustement>(
|
|
"ajustements",
|
|
(a) => a.numEtud === 21212006,
|
|
);
|
|
assertEquals(rows.length, 1);
|
|
});
|
|
|
|
Deno.test("mock DB: insert ajustement", () => {
|
|
const db = createMockDb({ tables: { ajustements: [...ajustements] } });
|
|
db.insert<Ajustement>("ajustements", {
|
|
numEtud: 21212007,
|
|
idUE: 2,
|
|
valeur: 14.0,
|
|
});
|
|
assertEquals(db.getTable("ajustements").length, 3);
|
|
});
|
|
|
|
Deno.test("mock DB: update ajustement valeur", () => {
|
|
const db = createMockDb({ tables: { ajustements: [...ajustements] } });
|
|
db.updateWhere<Ajustement>(
|
|
"ajustements",
|
|
(a) => a.numEtud === 21212006 && a.idUE === 1,
|
|
{ valeur: 20.0 },
|
|
);
|
|
assertEquals(
|
|
db.findOne<Ajustement>(
|
|
"ajustements",
|
|
(a) => a.numEtud === 21212006 && a.idUE === 1,
|
|
)?.valeur,
|
|
20.0,
|
|
);
|
|
});
|
|
|
|
Deno.test("mock DB: delete ajustement", () => {
|
|
const db = createMockDb({ tables: { ajustements: [...ajustements] } });
|
|
db.deleteWhere<Ajustement>(
|
|
"ajustements",
|
|
(a) => a.numEtud === 21212006 && a.idUE === 1,
|
|
);
|
|
assertEquals(db.getTable("ajustements").length, 1);
|
|
});
|