Skip to content

Commit 870868b

Browse files
committed
Added some UnitTests covering the functionality of the SummaryService
1 parent 33a6f82 commit 870868b

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Model;
4+
using Moq;
5+
using Services;
6+
using Xunit;
7+
8+
namespace Tests.Unit.Service
9+
{
10+
//public class SummaryServiceFixture : IDisposable
11+
//{
12+
// public ISummaryService SummaryService;
13+
14+
// public SummaryServiceFixture()
15+
// {
16+
// var marketOrderServiceMock = new Mock<IMarketOrderService>();
17+
// marketOrderServiceMock.Setup(x => x.GetPortfolioEntryOrders(It.IsAny<int>())).Returns(new List<MarketOrder>()
18+
// {
19+
// new (new decimal(10000), new decimal(2), 1, DateTime.Now, true)
20+
// })
21+
//
22+
// var repositoryMock = new Mock<IPortfolioRepository>();
23+
// repositoryMock.Setup(x => x.Add(It.Is<Portfolio>(portfolio => portfolio == portfolioToBeAdded))).Returns(1);
24+
// SummaryService = new ()
25+
// }
26+
//
27+
// public void Dispose()
28+
// {
29+
//
30+
// }
31+
//}
32+
33+
public class SummaryServiceTest
34+
{
35+
[Fact]
36+
public void GetMarketOrderSummary_WithoutFee_Returns_Correct_Summary()
37+
{
38+
var service = new SummaryServiceImpl();
39+
MarketOrder order = new(10000m, 0m, 1m, DateTime.Now, true);
40+
var summary = service.GetMarketOrderSummary(order, 20000m);
41+
42+
Assert.Equal(new ISummaryService.Summary(
43+
10000,
44+
1,
45+
20000,
46+
10000
47+
), summary);
48+
}
49+
50+
[Fact]
51+
public void GetMarketOrderSummary_WithFee_Returns_Correct_Summary()
52+
{
53+
var service = new SummaryServiceImpl();
54+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
55+
var summary = service.GetMarketOrderSummary(order, 20000m);
56+
57+
Assert.Equal(new ISummaryService.Summary(
58+
9999,
59+
(20000m / (10000m + 1m)) - 1m,
60+
20000,
61+
10001
62+
), summary);
63+
}
64+
65+
[Fact]
66+
public void GetMarketOrderSummary_WithoutFee_InLoss_Returns_Correct_Summary()
67+
{
68+
var service = new SummaryServiceImpl();
69+
MarketOrder order = new(10000m, 0m, 1m, DateTime.Now, true);
70+
var summary = service.GetMarketOrderSummary(order, 5000m);
71+
72+
Assert.Equal(new ISummaryService.Summary(
73+
-5000m,
74+
-0.5m,
75+
5000,
76+
10000
77+
), summary);
78+
}
79+
80+
81+
[Fact]
82+
public void GetMarketOrderSummary_WithFee_InLoss_Returns_Correct_Summary()
83+
{
84+
var service = new SummaryServiceImpl();
85+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
86+
var summary = service.GetMarketOrderSummary(order, 5000m);
87+
88+
Assert.Equal(new ISummaryService.Summary(
89+
-5001,
90+
(5000m / (10000m + 1m)) - 1m,
91+
5000,
92+
10001
93+
), summary);
94+
}
95+
96+
[Fact]
97+
public void GetPortfolioEntrySummary_InProfit_Returns_Correct_Summary()
98+
{
99+
var service = new SummaryServiceImpl();
100+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
101+
var summary = service.GetPortfolioEntrySummary(new()
102+
{
103+
new(10000m, 0m, 1m, DateTime.Now, true),
104+
new(20000m, 0m, 1m, DateTime.Now, true)
105+
}, 40000);
106+
107+
Assert.Equal(new ISummaryService.Summary(
108+
30000m + 20000m,
109+
(80000m / 30000m) - 1m,
110+
80000m,
111+
30000
112+
), summary);
113+
}
114+
115+
[Fact]
116+
public void GetPortfolioEntrySummary_WithFee_InProfit_Returns_Correct_Summary()
117+
{
118+
var service = new SummaryServiceImpl();
119+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
120+
var summary = service.GetPortfolioEntrySummary(new()
121+
{
122+
new(10000m, 1m, 1m, DateTime.Now, true),
123+
new(20000m, 5m, 1m, DateTime.Now, true)
124+
}, 40000);
125+
// currentTotalHoldingValue + totalSellValue - totalCost - totalFee
126+
Assert.Equal(new ISummaryService.Summary(
127+
30000m + 20000m - 6,
128+
((80000m - 6m) / 30000m) - 1m,
129+
80000m,
130+
30006
131+
), summary);
132+
}
133+
134+
[Fact]
135+
public void GetPortfolioEntrySummary_InProfit_WithSell_Returns_Correct_Summary()
136+
{
137+
var service = new SummaryServiceImpl();
138+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
139+
var summary = service.GetPortfolioEntrySummary(new()
140+
{
141+
new(10000m, 0m, 1m, DateTime.Now, true),
142+
new(20000m, 0m, 1m, DateTime.Now, true),
143+
new(30000m, 0m, 0.5m, DateTime.Now, false)
144+
}, 40000);
145+
146+
Assert.Equal(new ISummaryService.Summary(
147+
1.5m * 40000m + 15000m - 30000m,
148+
((1.5m * 40000m + 15000m - 30000m) / 30000m),
149+
1.5m * 40000m,
150+
30000
151+
), summary);
152+
}
153+
154+
[Fact]
155+
public void GetPortfolioEntrySummary_WithFee_InProfit_WithSell_Returns_Correct_Summary()
156+
{
157+
var service = new SummaryServiceImpl();
158+
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
159+
var summary = service.GetPortfolioEntrySummary(new()
160+
{
161+
new(10000m, 1m, 1m, DateTime.Now, true),
162+
new(20000m, 5m, 1m, DateTime.Now, true)
163+
}, 40000);
164+
// currentTotalHoldingValue + totalSellValue - totalCost - totalFee
165+
Assert.Equal(new ISummaryService.Summary(
166+
30000m + 20000m - 6,
167+
((80000m - 6m) / 30000m) - 1m,
168+
80000m,
169+
30006
170+
), summary);
171+
}
172+
}
173+
}

0 commit comments

Comments
 (0)