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