@@ -420,9 +420,9 @@ public async Task GivenReadOnlyMode_WhenPuttingTransaction_ThenThrow()
420420 {
421421 new TransactionCommand < TransactionEntity >
422422 {
423- NextSnapshot = default ! ,
423+ EntitySnapshot = default ! ,
424424 EntityId = Guid . NewGuid ( ) ,
425- ExpectedPreviousVersionNumber = 0 ,
425+ EntityVersionNumber = 1 ,
426426 Command = new DoNothing ( ) ,
427427 Leases = new TransactionMetaData < ILease > ( ) ,
428428 Tags = new TransactionMetaData < ITag > ( )
@@ -456,9 +456,9 @@ static ITransaction<TransactionEntity> NewTransaction(Guid transactionId)
456456 {
457457 new TransactionCommand < TransactionEntity >
458458 {
459- NextSnapshot = default ! ,
459+ EntitySnapshot = default ! ,
460460 EntityId = Guid . NewGuid ( ) ,
461- ExpectedPreviousVersionNumber = 0 ,
461+ EntityVersionNumber = 1 ,
462462 Command = new DoNothing ( ) ,
463463 Leases = new TransactionMetaData < ILease > ( ) ,
464464 Tags = new TransactionMetaData < ITag > ( )
@@ -486,7 +486,7 @@ public async Task GivenNonUniqueVersionNumbers_WhenInsertingCommands_ThenReturnF
486486 // ARRANGE
487487
488488 var entityId = Guid . NewGuid ( ) ;
489- ulong previousVersionNumber = 0 ;
489+ const ulong entityVersionNumber = 1 ;
490490
491491 var transaction = new Transaction < TransactionEntity >
492492 {
@@ -497,18 +497,18 @@ public async Task GivenNonUniqueVersionNumbers_WhenInsertingCommands_ThenReturnF
497497 {
498498 new TransactionCommand < TransactionEntity >
499499 {
500- NextSnapshot = default ! ,
500+ EntitySnapshot = default ! ,
501501 EntityId = entityId ,
502- ExpectedPreviousVersionNumber = previousVersionNumber ,
502+ EntityVersionNumber = entityVersionNumber ,
503503 Command = new DoNothing ( ) ,
504504 Leases = new TransactionMetaData < ILease > ( ) ,
505505 Tags = new TransactionMetaData < ITag > ( )
506506 } ,
507507 new TransactionCommand < TransactionEntity >
508508 {
509- NextSnapshot = default ! ,
509+ EntitySnapshot = default ! ,
510510 EntityId = entityId ,
511- ExpectedPreviousVersionNumber = previousVersionNumber ,
511+ EntityVersionNumber = entityVersionNumber ,
512512 Command = new DoNothing ( ) ,
513513 Leases = new TransactionMetaData < ILease > ( ) ,
514514 Tags = new TransactionMetaData < ITag > ( )
@@ -527,17 +527,66 @@ public async Task GivenNonUniqueVersionNumbers_WhenInsertingCommands_ThenReturnF
527527 transactionInserted . ShouldBeFalse ( ) ;
528528 }
529529
530+ [ Fact ]
531+ public async Task
532+ GivenVersionNumberZero_WhenInsertingCommands_ThenVersionZeroReservedExceptionIsLogged ( )
533+ {
534+ // ARRANGE
535+
536+ const ulong entityVersionNumber = 0 ;
537+
538+ var entityId = Guid . NewGuid ( ) ;
539+
540+ var loggerMock = new Mock < ILogger > ( MockBehavior . Strict ) ;
541+
542+ loggerMock
543+ . Setup ( logger => logger . LogError ( It . IsAny < VersionZeroReservedException > ( ) , It . IsAny < string > ( ) ) )
544+ . Verifiable ( ) ;
545+
546+ var transaction = new Transaction < TransactionEntity >
547+ {
548+ Id = Guid . NewGuid ( ) ,
549+ TimeStamp = DateTime . UtcNow ,
550+ Source = new NoSource ( ) ,
551+ Commands = new [ ]
552+ {
553+ new TransactionCommand < TransactionEntity >
554+ {
555+ EntitySnapshot = default ! ,
556+ EntityId = entityId ,
557+ EntityVersionNumber = entityVersionNumber ,
558+ Command = new DoNothing ( ) ,
559+ Leases = new TransactionMetaData < ILease > ( ) ,
560+ Tags = new TransactionMetaData < ITag > ( )
561+ }
562+ } . ToImmutableArray < ITransactionCommand < TransactionEntity > > ( )
563+ } ;
564+
565+ await using var transactionRepository = await CreateRepository ( loggerOverride : loggerMock . Object ) ;
566+
567+ // ACT
568+
569+ var transactionInserted =
570+ await transactionRepository . PutTransaction ( transaction ) ;
571+
572+ // ASSERT
573+
574+ transactionInserted . ShouldBeTrue ( ) ;
575+
576+ loggerMock . Verify ( ) ;
577+ }
578+
530579 [ Fact ]
531580 public async Task
532581 GivenNonUniqueVersionNumbers_WhenInsertingCommands_ThenOptimisticConcurrencyExceptionIsLogged ( )
533582 {
534583 // ARRANGE
535584
536- const ulong previousVersionNumber = 0 ;
585+ const ulong entityVersionNumber = 1 ;
537586
538587 var entityId = Guid . NewGuid ( ) ;
539588
540- static ITransaction < TransactionEntity > NewTransaction ( Guid entityId , ulong previousVersionNumber )
589+ static ITransaction < TransactionEntity > NewTransaction ( Guid entityId , ulong entityVersionNumber )
541590 {
542591 return new Transaction < TransactionEntity >
543592 {
@@ -548,9 +597,9 @@ static ITransaction<TransactionEntity> NewTransaction(Guid entityId, ulong previ
548597 {
549598 new TransactionCommand < TransactionEntity >
550599 {
551- NextSnapshot = default ! ,
600+ EntitySnapshot = default ! ,
552601 EntityId = entityId ,
553- ExpectedPreviousVersionNumber = previousVersionNumber ,
602+ EntityVersionNumber = entityVersionNumber ,
554603 Command = new DoNothing ( ) ,
555604 Leases = new TransactionMetaData < ILease > ( ) ,
556605 Tags = new TransactionMetaData < ITag > ( )
@@ -570,9 +619,9 @@ static ITransaction<TransactionEntity> NewTransaction(Guid entityId, ulong previ
570619 // ACT
571620
572621 var firstTransactionInserted =
573- await transactionRepository . PutTransaction ( NewTransaction ( entityId , previousVersionNumber ) ) ;
622+ await transactionRepository . PutTransaction ( NewTransaction ( entityId , entityVersionNumber ) ) ;
574623 var secondTransactionInserted =
575- await transactionRepository . PutTransaction ( NewTransaction ( entityId , previousVersionNumber ) ) ;
624+ await transactionRepository . PutTransaction ( NewTransaction ( entityId , entityVersionNumber ) ) ;
576625
577626 // ASSERT
578627
@@ -598,9 +647,9 @@ public async Task GivenNonUniqueTags_WhenInsertingTagDocuments_ThenReturnTrue()
598647 {
599648 new TransactionCommand < TransactionEntity >
600649 {
601- NextSnapshot = default ! ,
650+ EntitySnapshot = default ! ,
602651 EntityId = Guid . NewGuid ( ) ,
603- ExpectedPreviousVersionNumber = 0 ,
652+ EntityVersionNumber = 1 ,
604653 Command = new DoNothing ( ) ,
605654 Leases = new TransactionMetaData < ILease > ( ) ,
606655 Tags = new TransactionMetaData < ITag >
@@ -610,9 +659,9 @@ public async Task GivenNonUniqueTags_WhenInsertingTagDocuments_ThenReturnTrue()
610659 } ,
611660 new TransactionCommand < TransactionEntity >
612661 {
613- NextSnapshot = default ! ,
662+ EntitySnapshot = default ! ,
614663 EntityId = Guid . NewGuid ( ) ,
615- ExpectedPreviousVersionNumber = 0 ,
664+ EntityVersionNumber = 1 ,
616665 Command = new DoNothing ( ) ,
617666 Leases = new TransactionMetaData < ILease > ( ) ,
618667 Tags = new TransactionMetaData < ITag >
@@ -650,9 +699,9 @@ public async Task GivenNonUniqueLeases_WhenInsertingLeaseDocuments_ThenReturnFal
650699 {
651700 new TransactionCommand < TransactionEntity >
652701 {
653- NextSnapshot = default ! ,
702+ EntitySnapshot = default ! ,
654703 EntityId = Guid . NewGuid ( ) ,
655- ExpectedPreviousVersionNumber = 0 ,
704+ EntityVersionNumber = 1 ,
656705 Command = new DoNothing ( ) ,
657706 Leases = new TransactionMetaData < ILease >
658707 {
@@ -662,9 +711,9 @@ public async Task GivenNonUniqueLeases_WhenInsertingLeaseDocuments_ThenReturnFal
662711 } ,
663712 new TransactionCommand < TransactionEntity >
664713 {
665- NextSnapshot = default ! ,
714+ EntitySnapshot = default ! ,
666715 EntityId = Guid . NewGuid ( ) ,
667- ExpectedPreviousVersionNumber = 0 ,
716+ EntityVersionNumber = 1 ,
668717 Command = new DoNothing ( ) ,
669718 Leases = new TransactionMetaData < ILease >
670719 {
@@ -819,7 +868,7 @@ public async Task GivenTransactionCreatesEntity_WhenQueryingForVersionOne_ThenRe
819868
820869 transaction . Commands . Length . ShouldBe ( 1 ) ;
821870
822- transaction . Commands [ 0 ] . ExpectedPreviousVersionNumber . ShouldBe ( default ) ;
871+ transaction . Commands [ 0 ] . EntityVersionNumber . ShouldBe ( 1ul ) ;
823872
824873 newCommands . Length . ShouldBe ( 1 ) ;
825874
@@ -862,7 +911,7 @@ public async Task
862911
863912 secondTransaction . Commands . Length . ShouldBe ( 1 ) ;
864913
865- secondTransaction . Commands [ 0 ] . ExpectedPreviousVersionNumber . ShouldBe ( 1ul ) ;
914+ secondTransaction . Commands [ 0 ] . EntityVersionNumber . ShouldBe ( 2ul ) ;
866915
867916 newCommands . Length . ShouldBe ( 1 ) ;
868917
0 commit comments