@@ -190,28 +190,46 @@ public async Task CanDeleteAnEntry()
190190 }
191191
192192 [ Fact ]
193- public async Task CanModifyAnEntryAfterDelete ( )
193+ public async Task ApplyChange_ModifiesADeletedEntry ( )
194194 {
195195 await WriteNextChange ( SetWord ( _entity1Id , "test-value" ) ) ;
196196 var deleteCommit = await WriteNextChange ( new DeleteChange < Word > ( _entity1Id ) ) ;
197- await WriteNextChange ( SetWord ( _entity1Id , "after-delete" ) ) ;
197+ var newNoteChange = new SetWordNoteChange ( _entity1Id , "note-after-delete" ) ;
198+ newNoteChange . SupportsApplyChange ( ) . Should ( ) . BeTrue ( ) ;
199+ newNoteChange . SupportsNewEntity ( ) . Should ( ) . BeFalse ( ) ; // otherwise it will override the delete
200+ await WriteNextChange ( newNoteChange ) ;
198201 var snapshot = await DbContext . Snapshots . DefaultOrder ( ) . LastAsync ( ) ;
199202 var word = snapshot . Entity . Is < Word > ( ) ;
200- word . Text . Should ( ) . Be ( "after-delete" ) ;
203+ word . Text . Should ( ) . Be ( "test-value" ) ;
204+ word . Note . Should ( ) . Be ( "note-after-delete" ) ;
201205 word . DeletedAt . Should ( ) . Be ( deleteCommit . DateTime ) ;
202206 }
203207
208+ [ Fact ]
209+ public async Task NewEntity_UndeletesAnEntry ( )
210+ {
211+ await WriteNextChange ( SetWord ( _entity1Id , "test-value" ) ) ;
212+ await WriteNextChange ( new DeleteChange < Word > ( _entity1Id ) ) ;
213+ var recreateChange = SetWord ( _entity1Id , "after-undo-delete" ) ;
214+ recreateChange . SupportsNewEntity ( ) . Should ( ) . BeTrue ( ) ;
215+ await WriteNextChange ( recreateChange ) ;
216+ var snapshot = await DbContext . Snapshots . DefaultOrder ( ) . LastAsync ( ) ;
217+ var word = snapshot . Entity . Is < Word > ( ) ;
218+ word . Text . Should ( ) . Be ( "after-undo-delete" ) ;
219+ word . DeletedAt . Should ( ) . Be ( null ) ;
220+ }
221+
204222 [ Fact ]
205223 public async Task ChangesToSnapshotsAreNotSaved ( )
206224 {
207225 await WriteNextChange ( SetWord ( _entity1Id , "test-value" ) ) ;
208226 var word = await DataModel . GetLatest < Word > ( _entity1Id ) ;
209227 word ! . Text . Should ( ) . Be ( "test-value" ) ;
210228 word . Note . Should ( ) . BeNull ( ) ;
211-
229+
212230 //change made outside the model, should not be saved when writing the next change
213231 word . Note = "a note" ;
214-
232+
215233 var commit = await WriteNextChange ( SetWord ( _entity1Id , "after-change" ) ) ;
216234 var objectSnapshot = commit . Snapshots . Should ( ) . ContainSingle ( ) . Subject ;
217235 objectSnapshot . Entity . Is < Word > ( ) . Text . Should ( ) . Be ( "after-change" ) ;
0 commit comments