1
+ using System ;
2
+ using System . Linq ;
3
+ using System . Threading . Tasks ;
4
+ using FluentAssertions ;
5
+ using LinkDotNet . Blog . Web . Pages . Admin ;
6
+ using LinkDotNet . Domain ;
7
+ using Xunit ;
8
+
9
+ namespace LinkDotNet . Blog . IntegrationTests . Web . Pages . Admin . Dashboard
10
+ {
11
+ public class DashboardServiceTests : SqlDatabaseTestBase < UserRecord >
12
+ {
13
+ private readonly DashboardService sut ;
14
+
15
+ public DashboardServiceTests ( )
16
+ {
17
+ sut = new DashboardService ( Repository ) ;
18
+ }
19
+
20
+ [ Fact ]
21
+ public async Task ShouldGetTotalUsers ( )
22
+ {
23
+ var record1 = new UserRecord
24
+ {
25
+ UserIdentifierHash = 2 ,
26
+ DateTimeUtcClicked = DateTime . UtcNow ,
27
+ UrlClicked = string . Empty ,
28
+ } ;
29
+ var record2 = new UserRecord
30
+ {
31
+ UserIdentifierHash = 1 ,
32
+ UrlClicked = string . Empty ,
33
+ } ;
34
+ var record3 = new UserRecord
35
+ {
36
+ UserIdentifierHash = 2 ,
37
+ UrlClicked = string . Empty ,
38
+ } ;
39
+ await Repository . StoreAsync ( record1 ) ;
40
+ await Repository . StoreAsync ( record2 ) ;
41
+ await Repository . StoreAsync ( record3 ) ;
42
+
43
+ var data = await sut . GetDashboardDataAsync ( ) ;
44
+
45
+ data . TotalAmountOfUsers . Should ( ) . Be ( 2 ) ;
46
+ data . AmountOfUsersLast30Days . Should ( ) . Be ( 1 ) ;
47
+ }
48
+
49
+ [ Fact ]
50
+ public async Task ShouldGetTotalClicks ( )
51
+ {
52
+ var record1 = new UserRecord
53
+ {
54
+ DateTimeUtcClicked = DateTime . UtcNow ,
55
+ UrlClicked = "index" ,
56
+ } ;
57
+ var record2 = new UserRecord
58
+ {
59
+ UrlClicked = string . Empty ,
60
+ } ;
61
+ var record3 = new UserRecord
62
+ {
63
+ UrlClicked = string . Empty ,
64
+ } ;
65
+ await Repository . StoreAsync ( record1 ) ;
66
+ await Repository . StoreAsync ( record2 ) ;
67
+ await Repository . StoreAsync ( record3 ) ;
68
+
69
+ var data = await sut . GetDashboardDataAsync ( ) ;
70
+
71
+ data . TotalPageClicks . Should ( ) . Be ( 3 ) ;
72
+ data . PageClicksLast30Days . Should ( ) . Be ( 1 ) ;
73
+ }
74
+
75
+ [ Fact ]
76
+ public async Task ShouldGetAboutMeClicks ( )
77
+ {
78
+ var record1 = new UserRecord
79
+ {
80
+ DateTimeUtcClicked = DateTime . UtcNow ,
81
+ UrlClicked = "AboutMe" ,
82
+ } ;
83
+ var record2 = new UserRecord
84
+ {
85
+ UrlClicked = string . Empty ,
86
+ } ;
87
+ var record3 = new UserRecord
88
+ {
89
+ UrlClicked = "AboutMe" ,
90
+ } ;
91
+ await Repository . StoreAsync ( record1 ) ;
92
+ await Repository . StoreAsync ( record2 ) ;
93
+ await Repository . StoreAsync ( record3 ) ;
94
+
95
+ var data = await sut . GetDashboardDataAsync ( ) ;
96
+
97
+ data . TotalAboutMeClicks . Should ( ) . Be ( 2 ) ;
98
+ data . AboutMeClicksLast30Days . Should ( ) . Be ( 1 ) ;
99
+ }
100
+
101
+ [ Fact ]
102
+ public async Task ShouldGetBlogPostClicks ( )
103
+ {
104
+ var record1 = new UserRecord
105
+ {
106
+ UrlClicked = "blogPost/1" ,
107
+ } ;
108
+ var record2 = new UserRecord
109
+ {
110
+ UrlClicked = "blogPost/2" ,
111
+ } ;
112
+ var record3 = new UserRecord
113
+ {
114
+ UrlClicked = "blogPost/1" ,
115
+ } ;
116
+ var record4 = new UserRecord
117
+ {
118
+ UrlClicked = "unrelated" ,
119
+ } ;
120
+ await Repository . StoreAsync ( record1 ) ;
121
+ await Repository . StoreAsync ( record2 ) ;
122
+ await Repository . StoreAsync ( record3 ) ;
123
+ await Repository . StoreAsync ( record4 ) ;
124
+
125
+ var data = ( await sut . GetDashboardDataAsync ( ) ) . BlogPostVisitCount . ToList ( ) ;
126
+
127
+ data . Count . Should ( ) . Be ( 2 ) ;
128
+ data [ 0 ] . Key . Should ( ) . Be ( "blogPost/1" ) ;
129
+ data [ 0 ] . Value . Should ( ) . Be ( 2 ) ;
130
+ data [ 1 ] . Key . Should ( ) . Be ( "blogPost/2" ) ;
131
+ data [ 1 ] . Value . Should ( ) . Be ( 1 ) ;
132
+ }
133
+ }
134
+ }
0 commit comments