Skip to content

Commit 2b0e0ff

Browse files
committed
Implemented GetPorftolioSummary method and covered it with a unit test
1 parent ab81ed8 commit 2b0e0ff

File tree

2 files changed

+22
-24
lines changed

2 files changed

+22
-24
lines changed

Services/Services/SummaryService.cs

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public record Summary(decimal AbsoluteChange, decimal RelativeChange, decimal Ma
1414

1515
public Summary GetPortfolioEntrySummary(List<MarketOrder> portfolioEntryOrders, decimal assetPrice);
1616

17-
public Summary GetPortfolioSummary(Portfolio portfolio, Dictionary<string, decimal> assetPriceMap);
17+
public Summary GetPortfolioSummary(List<Summary> portfolioEntrySummaries);
1818
}
1919

2020
public class SummaryServiceImpl : ISummaryService
@@ -42,7 +42,7 @@ public ISummaryService.Summary GetAverageOfSummaries(IEnumerable<ISummaryService
4242
totalAbsoluteChange += summary.AbsoluteChange;
4343
}
4444

45-
decimal totalRelativeChange = (totalMarketValue / totalCost) / -1;
45+
decimal totalRelativeChange = (totalMarketValue / totalCost) -1m;
4646

4747
return new(totalAbsoluteChange, totalRelativeChange, totalMarketValue, totalCost);
4848
}
@@ -79,21 +79,7 @@ public ISummaryService.Summary GetPortfolioEntrySummary(List<MarketOrder> portfo
7979
totalCost + totalFee);
8080
}
8181

82-
public ISummaryService.Summary GetPortfolioSummary(Portfolio portfolio,
83-
Dictionary<string, decimal> assetPriceMap)
84-
{
85-
return null;
86-
// var portfolioEntrySumarries = PortfolioEntryService.GetPortfolioEntries(portfolio.Id).Select(entry =>
87-
// {
88-
// if (!assetPriceMap.TryGetValue(entry.Symbol, out var assetPrice))
89-
// {
90-
// throw new AssetPriceNotFoundException();
91-
// }
92-
93-
// return GetPortfolioEntrySummary(entry, assetPrice);
94-
// });
95-
// return GetAverageOfSummaries(portfolioEntrySumarries);
96-
}
82+
public ISummaryService.Summary GetPortfolioSummary(List<ISummaryService.Summary> portfolioEntrySummaries) => GetAverageOfSummaries(portfolioEntrySummaries);
9783

9884
public class AssetPriceNotFoundException : Exception
9985
{

Tests/Unit/Service/SummaryServiceTest.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,13 @@ public void GetMarketOrderSummary_WithFee_InLoss_Returns_Correct_Summary()
9292
10001
9393
), summary);
9494
}
95-
95+
9696
// PortfolioEntrySummary tests
9797

9898
[Fact]
9999
public void GetPortfolioEntrySummary_InProfit_Returns_Correct_Summary()
100100
{
101101
var service = new SummaryServiceImpl();
102-
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
103102
var summary = service.GetPortfolioEntrySummary(new()
104103
{
105104
new(10000m, 0m, 1m, DateTime.Now, true),
@@ -118,7 +117,6 @@ public void GetPortfolioEntrySummary_InProfit_Returns_Correct_Summary()
118117
public void GetPortfolioEntrySummary_WithFee_InProfit_Returns_Correct_Summary()
119118
{
120119
var service = new SummaryServiceImpl();
121-
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
122120
var summary = service.GetPortfolioEntrySummary(new()
123121
{
124122
new(10000m, 1m, 1m, DateTime.Now, true),
@@ -136,7 +134,6 @@ public void GetPortfolioEntrySummary_WithFee_InProfit_Returns_Correct_Summary()
136134
public void GetPortfolioEntrySummary_InProfit_WithSell_Returns_Correct_Summary()
137135
{
138136
var service = new SummaryServiceImpl();
139-
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
140137
var summary = service.GetPortfolioEntrySummary(new()
141138
{
142139
new(10000m, 0m, 1m, DateTime.Now, true),
@@ -146,7 +143,7 @@ public void GetPortfolioEntrySummary_InProfit_WithSell_Returns_Correct_Summary()
146143

147144
Assert.Equal(new ISummaryService.Summary(
148145
1.5m * 40000m + 15000m - 30000m,
149-
((1.5m * 40000m + 15000m - 30000m) / 30000m),
146+
((1.5m * 40000m + 15000m - 30000m) / 30000m),
150147
1.5m * 40000m,
151148
30000
152149
), summary);
@@ -156,19 +153,34 @@ public void GetPortfolioEntrySummary_InProfit_WithSell_Returns_Correct_Summary()
156153
public void GetPortfolioEntrySummary_WithFee_InProfit_WithSell_Returns_Correct_Summary()
157154
{
158155
var service = new SummaryServiceImpl();
159-
MarketOrder order = new(10000m, 1m, 1m, DateTime.Now, true);
160156
var summary = service.GetPortfolioEntrySummary(new()
161157
{
162158
new(10000m, 1m, 1m, DateTime.Now, true),
163159
new(20000m, 5m, 1m, DateTime.Now, true)
164160
}, 40000);
165-
// currentTotalHoldingValue + totalSellValue - totalCost - totalFee
166161
Assert.Equal(new ISummaryService.Summary(
167162
30000m + 20000m - 6,
168163
((80000m - 6m) / 30000m) - 1m,
169164
80000m,
170165
30006
171166
), summary);
172167
}
168+
169+
// Portfolio summary tests
170+
171+
[Fact]
172+
public void GetPortfolioSummary_Returns_Correct_Summary()
173+
{
174+
var service = new SummaryServiceImpl();
175+
var summary = service.GetPortfolioSummary(new()
176+
{
177+
new(10000m, 1, 20000m, 10000),
178+
new(2000m, 2, 3000m, 1000),
179+
});
180+
Assert.Equal(
181+
new ISummaryService.Summary(12000m, (23000m / 11000m) - 1m, 23000m, 11000m),
182+
summary
183+
);
184+
}
173185
}
174186
}

0 commit comments

Comments
 (0)