Skip to content

Commit e7ec726

Browse files
committed
Added ordering unit tests
1 parent 77de525 commit e7ec726

6 files changed

Lines changed: 383 additions & 34 deletions

File tree

eShopOnContainers-ServicesAndWebApps.sln

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
4-
VisualStudioVersion = 15.0.26206.0
4+
VisualStudioVersion = 15.0.26228.0
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{932D8224-11F6-4D07-B109-DA28AD288A63}"
77
EndProject
@@ -454,10 +454,10 @@ Global
454454
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
455455
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
456456
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
457-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x64.ActiveCfg = Release|x64
458-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x64.Build.0 = Release|x64
459-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x86.ActiveCfg = Release|x86
460-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x86.Build.0 = Release|x86
457+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
458+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x64.Build.0 = Release|Any CPU
459+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
460+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Ad-Hoc|x86.Build.0 = Release|Any CPU
461461
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
462462
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|Any CPU.Build.0 = Debug|Any CPU
463463
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|ARM.ActiveCfg = Debug|Any CPU
@@ -466,10 +466,10 @@ Global
466466
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|iPhone.Build.0 = Debug|Any CPU
467467
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
468468
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
469-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x64.ActiveCfg = Release|x64
470-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x64.Build.0 = Release|x64
471-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x86.ActiveCfg = Release|x86
472-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x86.Build.0 = Release|x86
469+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x64.ActiveCfg = Release|Any CPU
470+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x64.Build.0 = Release|Any CPU
471+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x86.ActiveCfg = Release|Any CPU
472+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.AppStore|x86.Build.0 = Release|Any CPU
473473
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
474474
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|Any CPU.Build.0 = Debug|Any CPU
475475
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -478,10 +478,10 @@ Global
478478
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|iPhone.Build.0 = Debug|Any CPU
479479
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
480480
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
481-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x64.ActiveCfg = Debug|x64
482-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x64.Build.0 = Debug|x64
483-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x86.ActiveCfg = Debug|x86
484-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x86.Build.0 = Debug|x86
481+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x64.ActiveCfg = Debug|Any CPU
482+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x64.Build.0 = Debug|Any CPU
483+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x86.ActiveCfg = Debug|Any CPU
484+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Debug|x86.Build.0 = Debug|Any CPU
485485
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|Any CPU.ActiveCfg = Release|Any CPU
486486
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|Any CPU.Build.0 = Release|Any CPU
487487
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|ARM.ActiveCfg = Release|Any CPU
@@ -490,10 +490,10 @@ Global
490490
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|iPhone.Build.0 = Release|Any CPU
491491
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
492492
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
493-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x64.ActiveCfg = Release|x64
494-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x64.Build.0 = Release|x64
495-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x86.ActiveCfg = Release|x86
496-
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x86.Build.0 = Release|x86
493+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x64.ActiveCfg = Release|Any CPU
494+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x64.Build.0 = Release|Any CPU
495+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x86.ActiveCfg = Release|Any CPU
496+
{F16E3C6A-1C94-4EAB-BE91-099618060B68}.Release|x86.Build.0 = Release|Any CPU
497497
EndGlobalSection
498498
GlobalSection(SolutionProperties) = preSolution
499499
HideSolutionNode = FALSE

src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public CreateOrderCommand(string city, string street, string state, string count
7777
CardHolderName = cardHolderName;
7878
CardSecurityNumber = cardSecurityNumber;
7979
CardTypeId = cardTypeId;
80+
CardExpiration = cardExpiration;
8081
}
8182

8283

test/Services/UnitTest/Ordering/Application/NewOrderCommandHandlerTest.cs

Lines changed: 164 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
using System;
77
using System.Threading;
88
using System.Threading.Tasks;
9-
using Xunit;
9+
1010

1111
namespace 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

Comments
 (0)