test(S01/T01): Added a job-scoped Gmail matching contract with backend-…

- JobTrackerApi/Controllers/GmailController.cs
- JobTrackerApi/Services/GmailOAuthService.cs
- JobTrackerApi.Tests/GmailControllerTests.cs
- .gsd/milestones/M001/slices/S01/S01-PLAN.md
- .gsd/KNOWLEDGE.md
This commit is contained in:
2026-03-24 12:07:25 +01:00
parent 8890906231
commit 955cae6d4b
15 changed files with 557 additions and 65 deletions
@@ -0,0 +1,41 @@
---
title: T02 summary
status: done
files:
- Models/Correspondence.cs
- JobTrackerApi/Controllers/GmailController.cs
- JobTrackerApi/Controllers/CorrespondenceController.cs
- JobTrackerApi/Program.cs
- JobTrackerApi.Tests/GmailControllerTests.cs
verification:
- $HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj
- docker run --rm -v "$PWD":/src -w /src mcr.microsoft.com/dotnet/sdk:9.0 bash -lc '...dotnet test /tmp/gmailtests/GmailTests.csproj...'
---
Extended correspondence persistence and Gmail import continuity for S01.
What changed:
- `Models/Correspondence.cs`
- added `ExternalThreadId`
- added `ExternalFrom`
- added `ExternalTo`
- `JobTrackerApi/Controllers/GmailController.cs`
- single-message import now returns `GmailImportMessageResultDto` with `Imported`, `Skipped`, `MessageId`, `ThreadId`, and the imported/existing `Correspondence`
- repeat single-message imports now report `Imported=0` / `Skipped=1` instead of returning a bare correspondence record
- imported Gmail messages now persist thread id plus raw sender/recipient metadata
- `JobTrackerApi/Controllers/CorrespondenceController.cs`
- create request now accepts optional external message/thread/from/to metadata so the correspondence surface stays consistent with enriched imports
- `JobTrackerApi/Program.cs`
- added SQLite compatibility guards for `Correspondences.ExternalThreadId`, `Correspondences.ExternalFrom`, and `Correspondences.ExternalTo`
- added MySQL compatibility guards for the same columns
- `JobTrackerApi.Tests/GmailControllerTests.cs`
- added repeat single-message import coverage
- added repeat thread import coverage
- retained ranking and owned-job scope coverage from T01
Verification:
- Native API build passed with `$HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj`
- Isolated Gmail controller tests passed in Docker (`5 passed`)
Important caveat:
- The repositorys main `JobTrackerApi.Tests` project still has unrelated pre-existing compile failures outside Gmail tests, so the exact planned command `dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter GmailControllerTests` remains blocked by broader test drift. Gmail coverage itself passes when isolated.