66using System ;
77using System . Threading ;
88using System . Threading . Tasks ;
9- using Xunit ;
9+
1010
1111namespace UnitTest . Ordering . Application
1212{
13+ using System . Collections ;
14+ using System . Collections . Generic ;
15+ using Xunit ;
1316 public class NewOrderRequestHandlerTest
1417 {
1518 private readonly Mock < IBuyerRepository < Buyer > > _buyerRepositoryMock ;
@@ -18,7 +21,7 @@ public class NewOrderRequestHandlerTest
1821
1922 public NewOrderRequestHandlerTest ( )
2023 {
21-
24+
2225 _buyerRepositoryMock = new Mock < IBuyerRepository < Buyer > > ( ) ;
2326 _orderRepositoryMock = new Mock < IOrderRepository < Order > > ( ) ;
2427 _identityServiceMock = new Mock < IIdentityService > ( ) ;
@@ -29,6 +32,10 @@ public async Task Handle_returns_true_when_order_is_persisted_succesfully()
2932 {
3033
3134 var buyerId = "1234" ;
35+
36+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
37+ { [ "cardExpiration" ] = DateTime . Now . AddYears ( 1 ) } ) ;
38+
3239 // Arrange
3340 _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
3441 . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
@@ -45,16 +52,20 @@ public async Task Handle_returns_true_when_order_is_persisted_succesfully()
4552 _identityServiceMock . Setup ( svc => svc . GetUserIdentity ( ) ) . Returns ( buyerId ) ;
4653 //Act
4754 var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
48- var result = await handler . Handle ( FakeOrderRequestWithBuyer ( ) ) ;
49-
55+ var result = await handler . Handle ( fakeOrderCmd ) ;
56+
5057 //Assert
5158 Assert . True ( result ) ;
52- }
59+ }
5360
5461 [ Fact ]
5562 public async Task Handle_return_false_if_order_is_not_persisted ( )
5663 {
5764 var buyerId = "1234" ;
65+
66+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
67+ { [ "cardExpiration" ] = DateTime . Now . AddYears ( 1 ) } ) ;
68+
5869 _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
5970 . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
6071
@@ -68,12 +79,148 @@ public async Task Handle_return_false_if_order_is_not_persisted()
6879
6980 //Act
7081 var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
71- var result = await handler . Handle ( FakeOrderRequestWithBuyer ( ) ) ;
82+ var result = await handler . Handle ( fakeOrderCmd ) ;
7283
7384 //Assert
7485 Assert . False ( result ) ;
7586 }
7687
88+ [ Fact ]
89+ public async Task Handle_throws_exception_when_order_expired ( )
90+ {
91+
92+ var buyerId = "1234" ;
93+
94+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
95+ { [ "cardExpiration" ] = DateTime . Now . AddYears ( - 1 ) } ) ;
96+
97+ // Arrange
98+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
99+ . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
100+
101+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
102+ . Returns ( Task . FromResult ( 1 ) ) ;
103+
104+ _orderRepositoryMock . Setup ( or => or . Add ( FakeOrder ( ) ) )
105+ . Returns ( FakeOrder ( ) ) ;
106+
107+ _orderRepositoryMock . Setup ( or => or . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
108+ . Returns ( Task . FromResult ( 1 ) ) ;
109+
110+ _identityServiceMock . Setup ( svc => svc . GetUserIdentity ( ) ) . Returns ( buyerId ) ;
111+ //Act
112+ var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
113+
114+ //Assert
115+ await Assert . ThrowsAsync < ArgumentException > ( async ( ) => await handler . Handle ( fakeOrderCmd ) ) ;
116+ }
117+
118+ [ Fact ]
119+ public async Task Handle_throws_exception_when_no_holdername ( )
120+ {
121+
122+ var buyerId = "1234" ;
123+
124+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
125+ {
126+ [ "cardExpiration" ] = DateTime . Now . AddYears ( 1 ) ,
127+ [ "cardHolderName" ] = string . Empty ,
128+ } ) ;
129+
130+ // Arrange
131+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
132+ . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
133+
134+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
135+ . Returns ( Task . FromResult ( 1 ) ) ;
136+
137+ _orderRepositoryMock . Setup ( or => or . Add ( FakeOrder ( ) ) )
138+ . Returns ( FakeOrder ( ) ) ;
139+
140+ _orderRepositoryMock . Setup ( or => or . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
141+ . Returns ( Task . FromResult ( 1 ) ) ;
142+
143+ _identityServiceMock . Setup ( svc => svc . GetUserIdentity ( ) ) . Returns ( buyerId ) ;
144+ //Act
145+ var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
146+
147+ //Assert
148+ await Assert . ThrowsAsync < ArgumentException > ( async ( ) => await handler . Handle ( fakeOrderCmd ) ) ;
149+ }
150+
151+ [ Fact ]
152+ public async Task Handle_throws_exception_when_no_securityNumber ( )
153+ {
154+
155+ var buyerId = "1234" ;
156+
157+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
158+ {
159+ [ "cardExpiration" ] = DateTime . Now . AddYears ( 1 ) ,
160+ [ "cardSecurityNumber" ] = string . Empty ,
161+ } ) ;
162+
163+ // Arrange
164+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
165+ . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
166+
167+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
168+ . Returns ( Task . FromResult ( 1 ) ) ;
169+
170+ _orderRepositoryMock . Setup ( or => or . Add ( FakeOrder ( ) ) )
171+ . Returns ( FakeOrder ( ) ) ;
172+
173+ _orderRepositoryMock . Setup ( or => or . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
174+ . Returns ( Task . FromResult ( 1 ) ) ;
175+
176+ _identityServiceMock . Setup ( svc => svc . GetUserIdentity ( ) ) . Returns ( buyerId ) ;
177+ //Act
178+ var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
179+
180+ //Assert
181+ await Assert . ThrowsAsync < ArgumentException > ( async ( ) => await handler . Handle ( fakeOrderCmd ) ) ;
182+ }
183+
184+ [ Fact ]
185+ public async Task Handle_throws_exception_when_no_cardNumber ( )
186+ {
187+
188+ var buyerId = "1234" ;
189+
190+ var fakeOrderCmd = FakeOrderRequestWithBuyer ( new Dictionary < string , object >
191+ {
192+ [ "cardExpiration" ] = DateTime . Now . AddYears ( 1 ) ,
193+ [ "cardNumber" ] = string . Empty ,
194+ } ) ;
195+
196+ // Arrange
197+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . FindAsync ( buyerId ) )
198+ . Returns ( Task . FromResult < Buyer > ( FakeBuyer ( ) ) ) ;
199+
200+ _buyerRepositoryMock . Setup ( buyerRepo => buyerRepo . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
201+ . Returns ( Task . FromResult ( 1 ) ) ;
202+
203+ _orderRepositoryMock . Setup ( or => or . Add ( FakeOrder ( ) ) )
204+ . Returns ( FakeOrder ( ) ) ;
205+
206+ _orderRepositoryMock . Setup ( or => or . UnitOfWork . SaveChangesAsync ( default ( CancellationToken ) ) )
207+ . Returns ( Task . FromResult ( 1 ) ) ;
208+
209+ _identityServiceMock . Setup ( svc => svc . GetUserIdentity ( ) ) . Returns ( buyerId ) ;
210+ //Act
211+ var handler = new CreateOrderCommandHandler ( _buyerRepositoryMock . Object , _orderRepositoryMock . Object , _identityServiceMock . Object ) ;
212+
213+ //Assert
214+ await Assert . ThrowsAsync < ArgumentException > ( async ( ) => await handler . Handle ( fakeOrderCmd ) ) ;
215+ }
216+
217+ [ Fact ]
218+ public void Handle_throws_exception_when_no_buyerId ( )
219+ {
220+ //Assert
221+ Assert . Throws < ArgumentNullException > ( ( ) => new Buyer ( string . Empty ) ) ;
222+ }
223+
77224 private Buyer FakeBuyer ( )
78225 {
79226 return new Buyer ( Guid . NewGuid ( ) . ToString ( ) ) ;
@@ -84,19 +231,19 @@ private Order FakeOrder()
84231 return new Order ( 1 , 1 , new Address ( "street" , "city" , "state" , "country" , "zipcode" ) ) ;
85232 }
86233
87- private CreateOrderCommand FakeOrderRequestWithBuyer ( )
234+ private CreateOrderCommand FakeOrderRequestWithBuyer ( Dictionary < string , object > args = null )
88235 {
89236 return new CreateOrderCommand (
90- city : null ,
91- street : null ,
92- state : null ,
93- country : null ,
94- zipcode : null ,
95- cardNumber : "1234" ,
96- cardExpiration : DateTime . Now . AddYears ( 1 ) ,
97- cardSecurityNumber : "123" ,
98- cardHolderName : "XXX" ,
99- cardTypeId : 0 ) ;
237+ city : args != null && args . ContainsKey ( "city" ) ? ( string ) args [ "city" ] : null ,
238+ street : args != null && args . ContainsKey ( "street" ) ? ( string ) args [ "street" ] : null ,
239+ state : args != null && args . ContainsKey ( "state" ) ? ( string ) args [ "state" ] : null ,
240+ country : args != null && args . ContainsKey ( "country" ) ? ( string ) args [ "country" ] : null ,
241+ zipcode : args != null && args . ContainsKey ( "zipcode" ) ? ( string ) args [ "zipcode" ] : null ,
242+ cardNumber : args != null && args . ContainsKey ( "cardNumber" ) ? ( string ) args [ "cardNumber" ] : "1234" ,
243+ cardExpiration : args != null && args . ContainsKey ( "cardExpiration" ) ? ( DateTime ) args [ "cardExpiration" ] : DateTime . MinValue ,
244+ cardSecurityNumber : args != null && args . ContainsKey ( "cardSecurityNumber" ) ? ( string ) args [ "cardSecurityNumber" ] : "123" ,
245+ cardHolderName : args != null && args . ContainsKey ( "cardHolderName" ) ? ( string ) args [ "cardHolderName" ] : "XXX" ,
246+ cardTypeId : args != null && args . ContainsKey ( "cardTypeId" ) ? ( int ) args [ "cardTypeId" ] : 0 ) ;
100247 }
101248 }
102249}
0 commit comments