77using BookStore . ApiService . Infrastructure ;
88using BookStore . ApiService . Infrastructure . Logging ;
99using BookStore . Shared . Models ;
10+ using JasperFx . Events ;
1011using Marten ;
1112using Marten . Events ;
12- using JasperFx . Events ;
1313using Microsoft . AspNetCore . Http ;
1414using Microsoft . AspNetCore . Http . HttpResults ;
15+ using Microsoft . Extensions . Caching . Hybrid ;
1516using Microsoft . Extensions . Logging ;
1617using Microsoft . Extensions . Options ;
1718using NSubstitute ;
@@ -25,18 +26,10 @@ namespace BookStore.ApiService.UnitTests.Handlers;
2526public class BookHandlerTests
2627{
2728 static IOptions < LocalizationOptions > CreateLocalizationOptions ( )
28- => Options . Create ( new LocalizationOptions
29- {
30- DefaultCulture = "en" ,
31- SupportedCultures = [ "en" ]
32- } ) ;
29+ => Options . Create ( new LocalizationOptions { DefaultCulture = "en" , SupportedCultures = [ "en" ] } ) ;
3330
3431 static IOptions < CurrencyOptions > CreateCurrencyOptions ( )
35- => Options . Create ( new CurrencyOptions
36- {
37- DefaultCurrency = "USD" ,
38- SupportedCurrencies = [ "USD" , "EUR" ]
39- } ) ;
32+ => Options . Create ( new CurrencyOptions { DefaultCurrency = "USD" , SupportedCurrencies = [ "USD" , "EUR" ] } ) ;
4033
4134 [ Test ]
4235 [ Category ( "Unit" ) ]
@@ -62,7 +55,8 @@ public async Task CreateBookHandler_ShouldStartStreamWithBookAddedEvent()
6255 _ = session . CorrelationId . Returns ( "test-correlation-id" ) ;
6356
6457 // Act
65- var result = BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) , Substitute . For < ILogger < CreateBook > > ( ) ) ;
58+ var result = await BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) ,
59+ Substitute . For < HybridCache > ( ) , Substitute . For < ILogger > ( ) ) ;
6660
6761 // Assert
6862 _ = await Assert . That ( result ) . IsNotNull ( ) ;
@@ -79,7 +73,8 @@ public async Task CreateBookHandler_ShouldStartStreamWithBookAddedEvent()
7973 [ Arguments ( "invalid" , "en" , 10 ) ]
8074 [ Arguments ( "en" , "invalid" , 10 ) ]
8175 [ Arguments ( "en" , "en" , 5001 ) ]
82- public async Task CreateBookHandler_WithInvalidHandlerValidation_ShouldReturnBadRequest ( string language , string culture , int descLength )
76+ public async Task CreateBookHandler_WithInvalidHandlerValidation_ShouldReturnBadRequest ( string language ,
77+ string culture , int descLength )
8378 {
8479 // Arrange
8580 var description = new string ( 'a' , descLength ) ;
@@ -88,10 +83,7 @@ public async Task CreateBookHandler_WithInvalidHandlerValidation_ShouldReturnBad
8883 "Clean Code" ,
8984 "978-0132350884" ,
9085 language ,
91- new Dictionary < string , BookTranslationDto >
92- {
93- [ culture ] = new BookTranslationDto ( description )
94- } ,
86+ new Dictionary < string , BookTranslationDto > { [ culture ] = new BookTranslationDto ( description ) } ,
9587 new PartialDate ( 2008 , 8 , 1 ) ,
9688 Guid . CreateVersion7 ( ) ,
9789 [ Guid . CreateVersion7 ( ) ] ,
@@ -102,7 +94,8 @@ public async Task CreateBookHandler_WithInvalidHandlerValidation_ShouldReturnBad
10294 var session = Substitute . For < IDocumentSession > ( ) ;
10395
10496 // Act
105- var result = BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) , Substitute . For < ILogger < CreateBook > > ( ) ) ;
97+ var result = await BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) ,
98+ Substitute . For < HybridCache > ( ) , Substitute . For < ILogger > ( ) ) ;
10699
107100 // Assert
108101 _ = await Assert . That ( result ) . IsAssignableTo < IStatusCodeHttpResult > ( ) ;
@@ -124,10 +117,7 @@ public async Task CreateBookHandler_WithInvalidDomainValidation_ShouldReturnBadR
124117 title ,
125118 isbn ,
126119 "en" ,
127- new Dictionary < string , BookTranslationDto >
128- {
129- [ "en" ] = new BookTranslationDto ( "Description" )
130- } ,
120+ new Dictionary < string , BookTranslationDto > { [ "en" ] = new BookTranslationDto ( "Description" ) } ,
131121 new PartialDate ( 2008 , 8 , 1 ) ,
132122 Guid . CreateVersion7 ( ) ,
133123 [ Guid . CreateVersion7 ( ) ] ,
@@ -138,7 +128,8 @@ public async Task CreateBookHandler_WithInvalidDomainValidation_ShouldReturnBadR
138128 var session = Substitute . For < IDocumentSession > ( ) ;
139129
140130 // Act
141- var result = BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) , Substitute . For < ILogger < CreateBook > > ( ) ) ;
131+ var result = await BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) ,
132+ Substitute . For < HybridCache > ( ) , Substitute . For < ILogger > ( ) ) ;
142133
143134 // Assert
144135 _ = await Assert . That ( result ) . IsAssignableTo < IStatusCodeHttpResult > ( ) ;
@@ -166,7 +157,8 @@ public async Task CreateBookHandler_WithMissingDefaultPrice_ShouldReturnBadReque
166157 var session = Substitute . For < IDocumentSession > ( ) ;
167158
168159 // Act
169- var result = BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) , Substitute . For < ILogger < CreateBook > > ( ) ) ;
160+ var result = await BookHandlers . Handle ( command , session , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) ,
161+ Substitute . For < HybridCache > ( ) , Substitute . For < ILogger > ( ) ) ;
170162
171163 // Assert
172164 _ = await Assert . That ( result ) . IsAssignableTo < IStatusCodeHttpResult > ( ) ;
@@ -200,11 +192,13 @@ public async Task UpdateBookHandler_WithMissingBook_ShouldReturnNotFound()
200192 . Returns ( Task . FromResult < Marten . Events . StreamState ? > ( null ) ) ;
201193
202194 // Act
203- var result = await BookHandlers . Handle ( command , session , contextAccessor , CreateLocalizationOptions ( ) , CreateCurrencyOptions ( ) , Substitute . For < ILogger < UpdateBook > > ( ) ) ;
195+ var result = await BookHandlers . Handle ( command , session , contextAccessor , CreateLocalizationOptions ( ) ,
196+ CreateCurrencyOptions ( ) , Substitute . For < HybridCache > ( ) , Substitute . For < ILogger > ( ) ) ;
204197
205198 // Assert
206199 _ = await Assert . That ( result ) . IsTypeOf < Microsoft . AspNetCore . Http . HttpResults . NotFound > ( ) ;
207200 }
201+
208202 [ Test ]
209203 [ Category ( "Unit" ) ]
210204 public async Task ScheduleSale_ShouldAppendEvent ( )
@@ -281,11 +275,12 @@ public async Task CancelSale_ShouldAppendEvent()
281275 var session = Substitute . For < IDocumentSession > ( ) ;
282276
283277 _ = session . Events . FetchStreamStateAsync ( bookId ) . Returns ( new Marten . Events . StreamState { Version = 1 } ) ;
284-
278+
285279 // SaleHandlers.Handle for CancelSale fetches stream and projects manually
286280 var events = new List < IEvent >
287281 {
288- new JasperFx . Events . Event < BookSaleScheduled > ( new BookSaleScheduled ( bookId , new BookSale ( 10m , saleStart , saleStart . AddDays ( 1 ) ) ) )
282+ new JasperFx . Events . Event < BookSaleScheduled > ( new BookSaleScheduled ( bookId ,
283+ new BookSale ( 10m , saleStart , saleStart . AddDays ( 1 ) ) ) )
289284 } ;
290285 _ = session . Events . FetchStreamAsync ( bookId ) . Returns ( events ) ;
291286
@@ -302,7 +297,8 @@ public async Task CancelSale_ShouldAppendEvent()
302297
303298 static void SetPrivateProperty < T > ( T obj , string propertyName , object value )
304299 {
305- var property = typeof ( T ) . GetProperty ( propertyName , BindingFlags . Instance | BindingFlags . Public | BindingFlags . NonPublic ) ;
300+ var property = typeof ( T ) . GetProperty ( propertyName ,
301+ BindingFlags . Instance | BindingFlags . Public | BindingFlags . NonPublic ) ;
306302 property ? . SetValue ( obj , value ) ;
307303 }
308304}
0 commit comments