feat(jobs): complete workspace draft parity
CI and Deploy / test (pull_request) Successful in 5m4s
CI and Deploy / deploy (pull_request) Has been skipped

This commit is contained in:
cesnimda
2026-08-15 17:34:32 +02:00
parent 3b86ea2da0
commit deed948183
28 changed files with 676 additions and 131 deletions
@@ -46,6 +46,77 @@ public sealed class JobApplicationsApplicationPackageTests
Assert.Equal("Updated notes block", saved.Notes);
}
[Fact]
public async Task Save_application_drafts_updates_and_clears_answer_without_changing_human_notes()
{
await using var db = CreateDb();
var company = new Company { Name = "Acme", OwnerUserId = "user-1" };
db.Companies.Add(company);
await db.SaveChangesAsync();
var job = new JobApplication
{
JobTitle = "Backend Developer",
CompanyId = company.Id,
OwnerUserId = "user-1",
Notes = "Human note\n\n<<<APPLICATION_ANSWER_DRAFT>>>\nOld answer\n<<<END_APPLICATION_ANSWER_DRAFT>>>",
RecruiterMessageDraft = "Old recruiter message"
};
db.JobApplications.Add(job);
await db.SaveChangesAsync();
var controller = CreateController(db, Mock.Of<ISummarizerService>(), "user-1");
var updated = await controller.SaveApplicationDrafts(
job.Id,
new SaveApplicationDraftsRequest(null, null, " New recruiter message ", " New answer "),
CancellationToken.None);
Assert.IsType<NoContentResult>(updated);
Assert.Equal("Human note", JobApplicationHelpers.RemoveSavedApplicationAnswerDraft(job.Notes));
Assert.Equal("New answer", JobApplicationHelpers.ExtractSavedApplicationAnswerDraft(job.Notes));
Assert.Equal("New recruiter message", job.RecruiterMessageDraft);
job.Notes += "\n\n<<<APPLICATION_ANSWER_DRAFT>>>\nDuplicate stale answer\n<<<END_APPLICATION_ANSWER_DRAFT>>>";
var cleared = await controller.SaveApplicationDrafts(
job.Id,
new SaveApplicationDraftsRequest(null, null, "", ""),
CancellationToken.None);
Assert.IsType<NoContentResult>(cleared);
Assert.Equal("Human note", job.Notes);
Assert.Null(job.RecruiterMessageDraft);
}
[Fact]
public async Task Save_application_drafts_cannot_mutate_another_users_application()
{
await using var db = CreateDb();
var company = new Company { Name = "Other Acme", OwnerUserId = "user-2" };
db.Companies.Add(company);
await db.SaveChangesAsync();
var otherUsersJob = new JobApplication
{
JobTitle = "Private role",
CompanyId = company.Id,
OwnerUserId = "user-2",
Notes = "Private note",
RecruiterMessageDraft = "Private draft"
};
db.JobApplications.Add(otherUsersJob);
await db.SaveChangesAsync();
var controller = CreateController(db, Mock.Of<ISummarizerService>(), "user-1");
var result = await controller.SaveApplicationDrafts(
otherUsersJob.Id,
new SaveApplicationDraftsRequest(null, null, "Changed", "Changed"),
CancellationToken.None);
Assert.IsType<NotFoundResult>(result);
Assert.Equal("Private note", otherUsersJob.Notes);
Assert.Equal("Private draft", otherUsersJob.RecruiterMessageDraft);
}
[Fact]
public async Task Generate_application_package_uses_imported_correspondence_and_recruiter_context()
{