@@ -124,6 +124,7 @@ public async Task Get_ShouldReturnAggregateFromRepository_GetLatestThrowsExcepti
124124 public async Task Save_ShouldSaveAggregateToRepository_NoCaching ( ) {
125125 // Arrange
126126 var aggregate = new TestAggregate { AggregateId = Guid . NewGuid ( ) } ;
127+ aggregate . SetAggregateName ( "1" , Guid . NewGuid ( ) ) ;
127128 var repositoryMock = new Mock < IAggregateRepository < TestAggregate , DomainEvent > > ( ) ;
128129
129130 repositoryMock . Setup ( repo => repo . SaveChanges ( aggregate , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( Result . Success ( ) ) ;
@@ -142,6 +143,7 @@ public async Task Save_ShouldSaveAggregateToRepository_NoCaching() {
142143 public async Task Save_ShouldSaveAggregateToRepository_AndCacheIt ( ) {
143144 // Arrange
144145 var aggregate = new TestAggregate { AggregateId = Guid . NewGuid ( ) } ;
146+ aggregate . SetAggregateName ( "1" , Guid . NewGuid ( ) ) ;
145147 var repositoryMock = new Mock < IAggregateRepository < TestAggregate , DomainEvent > > ( ) ;
146148 this . _aggregateService . AddCachedAggregate ( typeof ( TestAggregate ) ) ;
147149
@@ -157,6 +159,26 @@ public async Task Save_ShouldSaveAggregateToRepository_AndCacheIt() {
157159 repositoryMock . Verify ( repo => repo . SaveChanges ( aggregate , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
158160 }
159161
162+ [ Fact ]
163+ public async Task Save_ShouldSaveAggregateToRepository_NoChanges_SaveNotCalled ( )
164+ {
165+ // Arrange
166+ var aggregate = new TestAggregate { AggregateId = Guid . NewGuid ( ) } ;
167+ var repositoryMock = new Mock < IAggregateRepository < TestAggregate , DomainEvent > > ( ) ;
168+ this . _aggregateService . AddCachedAggregate ( typeof ( TestAggregate ) ) ;
169+
170+ repositoryMock . Setup ( repo => repo . SaveChanges ( aggregate , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( Result . Success ( ) ) ;
171+
172+ _repositoryResolverMock . Setup ( resolver => resolver . Resolve < TestAggregate , DomainEvent > ( ) ) . Returns ( repositoryMock . Object ) ;
173+
174+ // Act
175+ var result = await _aggregateService . Save ( aggregate , CancellationToken . None ) ;
176+
177+ // Assert
178+ result . IsSuccess . ShouldBeTrue ( ) ;
179+ repositoryMock . Verify ( repo => repo . SaveChanges ( aggregate , It . IsAny < CancellationToken > ( ) ) , Times . Never ) ;
180+ }
181+
160182 [ Fact ]
161183 public async Task Save_ShouldSaveAggregateToRepository_AndCacheIt_SecondSave_UpdatesCache ( ) {
162184 // Arrange
@@ -190,6 +212,7 @@ public async Task Save_ShouldSaveAggregateToRepository_AndCacheIt_SecondSave_Upd
190212 public async Task Save_ShouldSaveAggregateToRepository_SaveFails ( ) {
191213 // Arrange
192214 var aggregate = new TestAggregate { AggregateId = Guid . NewGuid ( ) } ;
215+ aggregate . SetAggregateName ( "1" , Guid . NewGuid ( ) ) ;
193216 var repositoryMock = new Mock < IAggregateRepository < TestAggregate , DomainEvent > > ( ) ;
194217
195218 repositoryMock . Setup ( repo => repo . SaveChanges ( aggregate , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( Result . Failure ) ;
0 commit comments