@@ -157,5 +157,53 @@ await Assert.ThrowsAsync<ReaderDependencyValidationException>(() =>
157157 this . loggingBrokerMock . VerifyNoOtherCalls ( ) ;
158158 this . storageBrokerMock . VerifyNoOtherCalls ( ) ;
159159 }
160+
161+ [ Fact ]
162+ public async Task ShouldThrowServiceExceptionOnModifyIfDatabaseUpdateErrorOccursAndLogItAsync ( )
163+ {
164+ // given
165+ Reader randomReader = CreateRandomReader ( ) ;
166+ Reader someReader = randomReader ;
167+ Guid readerId = someReader . ReaderId ;
168+ Exception serviceException = new Exception ( ) ;
169+
170+ var failedReaderServiceException =
171+ new FailedReaderServiceException ( serviceException ) ;
172+
173+ var expectedReaderServiceException =
174+ new ReaderServiceException ( failedReaderServiceException ) ;
175+
176+ this . storageBrokerMock . Setup ( broker =>
177+ broker . SelectReaderByIdAsync ( readerId ) )
178+ . Throws ( serviceException ) ;
179+
180+ // when
181+ ValueTask < Reader > modifyReaderTask =
182+ this . readerService . ModifyReaderAsync ( someReader ) ;
183+
184+ ReaderServiceException actualReaderServiceException =
185+ await Assert . ThrowsAsync < ReaderServiceException > ( ( ) =>
186+ modifyReaderTask . AsTask ( ) ) ;
187+
188+ // then
189+ actualReaderServiceException . Should ( )
190+ . BeEquivalentTo ( expectedReaderServiceException ) ;
191+
192+ this . loggingBrokerMock . Verify ( broker =>
193+ broker . LogError ( It . Is ( SameExceptionAs (
194+ expectedReaderServiceException ) ) ) ,
195+ Times . Once ) ;
196+
197+ this . storageBrokerMock . Verify ( broker =>
198+ broker . SelectReaderByIdAsync ( readerId ) ,
199+ Times . Once ) ;
200+
201+ this . storageBrokerMock . Verify ( broker =>
202+ broker . UpdateReaderAsync ( someReader ) ,
203+ Times . Never ) ;
204+
205+ this . loggingBrokerMock . VerifyNoOtherCalls ( ) ;
206+ this . storageBrokerMock . VerifyNoOtherCalls ( ) ;
207+ }
160208 }
161209}
0 commit comments