fix(rd21): guard career and job saves with durable revisions
This commit is contained in:
@@ -201,7 +201,7 @@ public sealed class ApplicationAssetsTests
|
||||
await using var _ = db;
|
||||
var job = await SeedJobAsync(db, "user-1");
|
||||
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Dear team", CoverLetterSources.Manual, null, default);
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Dear team", CoverLetterSources.Manual, null, job.Version, default);
|
||||
|
||||
Assert.Equal("Dear team", result!.Text);
|
||||
Assert.Equal(1, result.CurrentVersion);
|
||||
@@ -217,9 +217,9 @@ public sealed class ApplicationAssetsTests
|
||||
await using var _ = db;
|
||||
var job = await SeedJobAsync(db, "user-1");
|
||||
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "First draft", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Second draft", CoverLetterSources.Ai, "improve", default);
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Third draft", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "First draft", CoverLetterSources.Manual, null, job.Version, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Second draft", CoverLetterSources.Ai, "improve", job.Version, default);
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Third draft", CoverLetterSources.Manual, null, job.Version, default);
|
||||
|
||||
Assert.Equal(3, result!.CurrentVersion);
|
||||
Assert.Equal(3, result.Versions.Count);
|
||||
@@ -234,8 +234,8 @@ public sealed class ApplicationAssetsTests
|
||||
await using var _ = db;
|
||||
var job = await SeedJobAsync(db, "user-1");
|
||||
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Same text", CoverLetterSources.Manual, null, default);
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Same text", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Same text", CoverLetterSources.Manual, null, job.Version, default);
|
||||
var result = await assets.SaveCoverLetterAsync("user-1", job.Id, "Same text", CoverLetterSources.Manual, null, job.Version, default);
|
||||
|
||||
Assert.Single(result!.Versions);
|
||||
}
|
||||
@@ -246,10 +246,10 @@ public sealed class ApplicationAssetsTests
|
||||
var (db, assets) = New("user-1");
|
||||
await using var _ = db;
|
||||
var job = await SeedJobAsync(db, "user-1");
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "The good draft", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "The AI ruined it", CoverLetterSources.Ai, "shorten", default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "The good draft", CoverLetterSources.Manual, null, job.Version, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "The AI ruined it", CoverLetterSources.Ai, "shorten", job.Version, default);
|
||||
|
||||
var result = await assets.RestoreCoverLetterAsync("user-1", job.Id, 1, default);
|
||||
var result = await assets.RestoreCoverLetterAsync("user-1", job.Id, 1, job.Version, default);
|
||||
|
||||
Assert.Equal("The good draft", result!.Text);
|
||||
// Restore is additive: v1 and v2 both survive, and the restore is v3.
|
||||
@@ -265,9 +265,9 @@ public sealed class ApplicationAssetsTests
|
||||
var (db, assets) = New("user-1");
|
||||
await using var _ = db;
|
||||
var job = await SeedJobAsync(db, "user-1");
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Only draft", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", job.Id, "Only draft", CoverLetterSources.Manual, null, job.Version, default);
|
||||
|
||||
Assert.Null(await assets.RestoreCoverLetterAsync("user-1", job.Id, 99, default));
|
||||
Assert.Null(await assets.RestoreCoverLetterAsync("user-1", job.Id, 99, job.Version, default));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -277,11 +277,11 @@ public sealed class ApplicationAssetsTests
|
||||
await using var _ = db;
|
||||
var mine = await SeedJobAsync(db, "user-1");
|
||||
var theirs = await SeedJobAsync(db, "user-2");
|
||||
await assets.SaveCoverLetterAsync("user-1", mine.Id, "Mine", CoverLetterSources.Manual, null, default);
|
||||
await assets.SaveCoverLetterAsync("user-1", mine.Id, "Mine", CoverLetterSources.Manual, null, mine.Version, default);
|
||||
|
||||
Assert.Null(await assets.GetCoverLetterAsync("user-1", theirs.Id, default));
|
||||
Assert.Null(await assets.SaveCoverLetterAsync("user-1", theirs.Id, "Sneak", CoverLetterSources.Manual, null, default));
|
||||
Assert.Null(await assets.RestoreCoverLetterAsync("user-1", theirs.Id, 1, default));
|
||||
Assert.Null(await assets.SaveCoverLetterAsync("user-1", theirs.Id, "Sneak", CoverLetterSources.Manual, null, theirs.Version, default));
|
||||
Assert.Null(await assets.RestoreCoverLetterAsync("user-1", theirs.Id, 1, theirs.Version, default));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user