feat: harden gmail sync foundation

This commit is contained in:
2026-04-01 16:09:29 +02:00
parent 068ce447c0
commit e5bcf9d5ea
11 changed files with 435 additions and 115 deletions
@@ -78,7 +78,7 @@ describe("correspondence Gmail import", () => {
return Promise.resolve({ data: correspondenceMessages } as any);
}
if (url === "/gmail/status") {
return Promise.resolve({ data: { connected: true, gmailAddress: "user@example.test", lastSyncedAt: new Date().toISOString() } } as any);
return Promise.resolve({ data: { connected: true, gmailAddress: "user@example.test", lastSyncedAt: new Date().toISOString(), lastSyncAttemptedAt: new Date().toISOString(), lastSyncMode: "list-messages", lastSyncSource: "custom-query", lastSyncStatus: "error", lastSyncError: "Token refresh failed" } } as any);
}
if (url === "/gmail/job-candidates") {
return Promise.resolve({
@@ -291,6 +291,16 @@ describe("correspondence Gmail import", () => {
expect((await screen.findAllByText(/thread thread-1/i)).length).toBeGreaterThan(0);
});
test("shows Gmail sync state diagnostics alongside linked thread continuity", async () => {
renderDialog();
fireEvent.click(await screen.findByRole("button", { name: /import email/i }));
fireEvent.click(await screen.findByRole("tab", { name: /^google$/i }));
expect(await screen.findByText(/sync checked/i)).toBeInTheDocument();
expect((await screen.findAllByText(/token refresh failed/i)).length).toBeGreaterThan(0);
});
test("manual Gmail search override reloads job candidates with queryOverride", async () => {
renderDialog();