Checkpoint: Réception automatique e-mail sécurisée : le planificateur est créé uniquement après un test IMAP concluant, les erreurs d’authentification sont affichées explicitement et ne déclenchent plus de boucle. Les administrateurs peuvent sélectionner, démarrer, arrêter et suivre le compte source déjà configuré sans afficher ni recopier de secrets. Tests de démarrage réussi/refusé, arrêt et ciblage de compte ajoutés ; 59 tests, TypeScript et build validés.
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
createEmailImportAccountController,
|
||||
createImapFlowOptions,
|
||||
type EmailImportConfig,
|
||||
isEmailImportServiceRunning,
|
||||
startConfiguredEmailImportService,
|
||||
stopEmailImportService,
|
||||
validateEmailImportConfiguration,
|
||||
} from "./emailImportService";
|
||||
|
||||
@@ -76,3 +80,71 @@ describe("validateEmailImportConfiguration", () => {
|
||||
expect(error).toBe("Configuration IMAP incomplète");
|
||||
});
|
||||
});
|
||||
|
||||
describe("startConfiguredEmailImportService", () => {
|
||||
it("ne crée aucune planification si le test IMAP préalable échoue", async () => {
|
||||
const userId = 901;
|
||||
stopEmailImportService(userId);
|
||||
|
||||
const result = await startConfiguredEmailImportService(
|
||||
{ ...baseConfig, userId, authMode: "basic" },
|
||||
5,
|
||||
async () => ({
|
||||
success: false,
|
||||
message: "Authentification IMAP refusée.",
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result).toEqual({
|
||||
success: false,
|
||||
message: "Authentification IMAP refusée.",
|
||||
});
|
||||
expect(isEmailImportServiceRunning(userId)).toBe(false);
|
||||
});
|
||||
|
||||
it("démarre après un test IMAP concluant et exécute le contrôle initial", async () => {
|
||||
const userId = 902;
|
||||
const runEmailCheck = vi.fn(async () => undefined);
|
||||
|
||||
try {
|
||||
const result = await startConfiguredEmailImportService(
|
||||
{ ...baseConfig, userId, authMode: "basic" },
|
||||
5,
|
||||
async () => ({ success: true, message: "Connexion IMAP réussie." }),
|
||||
runEmailCheck,
|
||||
);
|
||||
|
||||
expect(result).toEqual({
|
||||
success: true,
|
||||
message: "Service de réception e-mail démarré",
|
||||
});
|
||||
expect(isEmailImportServiceRunning(userId)).toBe(true);
|
||||
expect(runEmailCheck).toHaveBeenCalledWith(expect.objectContaining({ userId }));
|
||||
} finally {
|
||||
stopEmailImportService(userId);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("createEmailImportAccountController", () => {
|
||||
it("cible exclusivement le compte sélectionné par un administrateur", async () => {
|
||||
const start = vi.fn(async () => ({ success: true, message: "Service de réception e-mail démarré" }));
|
||||
const stop = vi.fn();
|
||||
const isRunning = vi.fn(() => true);
|
||||
const controller = createEmailImportAccountController({ start, stop, isRunning });
|
||||
|
||||
await expect(controller.startAccount(42)).resolves.toEqual({
|
||||
success: true,
|
||||
message: "Service de réception e-mail démarré",
|
||||
});
|
||||
expect(start).toHaveBeenCalledWith(42);
|
||||
|
||||
expect(controller.stopAccount(42)).toEqual({
|
||||
success: true,
|
||||
message: "Service de réception e-mail arrêté",
|
||||
});
|
||||
expect(stop).toHaveBeenCalledWith(42);
|
||||
expect(controller.accountStatus(42)).toEqual({ isRunning: true });
|
||||
expect(isRunning).toHaveBeenCalledWith(42);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user