diff --git a/src/SIL.Harmony.Tests/SnapshotWorkerTests.cs b/src/SIL.Harmony.Tests/SnapshotWorkerTests.cs index c45a634..c3c4590 100644 --- a/src/SIL.Harmony.Tests/SnapshotWorkerTests.cs +++ b/src/SIL.Harmony.Tests/SnapshotWorkerTests.cs @@ -109,6 +109,22 @@ public async Task DeletingAnEntityDropsReferencesToItFromBaselineEntities() WordFrom(wordSnapshot).AntonymId.Should().BeNull(); } + [Fact] + public async Task DeletingAnEntityCascadesThroughReferrersThatRemovingTheReferenceDeletes() + { + var word = new Word { Id = Guid.NewGuid(), Text = "hello" }; + var definition = new Definition { Id = Guid.NewGuid(), Text = "a greeting", Order = 0, PartOfSpeech = "noun", WordId = word.Id }; + var example = new Example { Id = Guid.NewGuid(), DefinitionId = definition.Id }; + var baseline = Baseline(word, definition, example); + var delete = NextCommit(DeleteWord(word.Id)); + + var (snapshots, _) = await SnapshotWorker.ComputeNewSnapshotsAndCheckpoints(baseline, [delete], SampleConfig); + + //the example only references the definition, so it's deleted by the recursive MarkDeleted + snapshots.Should().HaveCount(3).And.OnlyContain(s => s.EntityIsDeleted && s.CommitId == delete.Id); + snapshots.Select(s => s.EntityId).Should().BeEquivalentTo([word.Id, definition.Id, example.Id]); + } + [Fact] public async Task ADeletedEntityIsRevivedByACreateChange() {