1
- using System . Collections . Generic ;
1
+ using System ;
2
2
using System . Linq ;
3
3
using System . Threading . Tasks ;
4
4
using AngleSharp . Html . Dom ;
5
5
using Bunit ;
6
6
using FluentAssertions ;
7
7
using LinkDotNet . Blog . Domain ;
8
- using LinkDotNet . Blog . Infrastructure . Persistence ;
9
8
using LinkDotNet . Blog . TestUtilities ;
10
9
using LinkDotNet . Blog . Web . Shared . Admin . Dashboard ;
11
10
using Microsoft . Extensions . DependencyInjection ;
@@ -21,12 +20,10 @@ public async Task ShouldShowCounts()
21
20
var blogPost = new BlogPostBuilder ( ) . WithTitle ( "I was clicked" ) . WithLikes ( 2 ) . Build ( ) ;
22
21
await Repository . StoreAsync ( blogPost ) ;
23
22
using var ctx = new TestContext ( ) ;
24
- ctx . Services . AddScoped < IRepository < BlogPost > > ( _ => Repository ) ;
25
- var visits = new List < KeyValuePair < string , int > > { new ( $ "blogPost/{ blogPost . Id } ", 5 ) } ;
26
- var pageVisitCounts = visits . OrderByDescending ( s => s . Value ) ;
23
+ ctx . Services . AddScoped ( _ => DbContext ) ;
24
+ await SaveBlogPostArticleClicked ( blogPost . Id , 10 ) ;
27
25
28
- var cut = ctx . RenderComponent < VisitCountPerPage > ( p => p . Add (
29
- s => s . PageVisitCount , pageVisitCounts ) ) ;
26
+ var cut = ctx . RenderComponent < VisitCountPerPage > ( ) ;
30
27
31
28
cut . WaitForState ( ( ) => cut . FindAll ( "td" ) . Any ( ) ) ;
32
29
var elements = cut . FindAll ( "td" ) . ToList ( ) ;
@@ -35,36 +32,54 @@ public async Task ShouldShowCounts()
35
32
titleData . Should ( ) . NotBeNull ( ) ;
36
33
titleData . InnerHtml . Should ( ) . Be ( blogPost . Title ) ;
37
34
titleData . Href . Should ( ) . Contain ( $ "blogPost/{ blogPost . Id } ") ;
38
- elements [ 1 ] . InnerHtml . Should ( ) . Be ( "5 " ) ;
35
+ elements [ 1 ] . InnerHtml . Should ( ) . Be ( "10 " ) ;
39
36
elements [ 2 ] . InnerHtml . Should ( ) . Be ( "2" ) ;
40
37
}
41
38
42
39
[ Fact ]
43
- public void ShouldIgnoreNullForBlogPostVisits ( )
40
+ public async Task ShouldFilterStartDate ( )
44
41
{
42
+ var blogPost1 = new BlogPostBuilder ( ) . WithTitle ( "1" ) . WithLikes ( 2 ) . Build ( ) ;
43
+ var blogPost2 = new BlogPostBuilder ( ) . WithTitle ( "2" ) . WithLikes ( 2 ) . Build ( ) ;
44
+ await Repository . StoreAsync ( blogPost1 ) ;
45
+ await Repository . StoreAsync ( blogPost2 ) ;
46
+ var urlClicked1New = new UserRecord
47
+ { UrlClicked = $ "blogPost/{ blogPost1 . Id } ", DateTimeUtcClicked = DateTime . UtcNow } ;
48
+ var urlClicked1Old = new UserRecord
49
+ { UrlClicked = $ "blogPost/{ blogPost1 . Id } ", DateTimeUtcClicked = DateTime . MinValue } ;
50
+ var urlClicked2 = new UserRecord
51
+ { UrlClicked = $ "blogPost/{ blogPost2 . Id } ", DateTimeUtcClicked = DateTime . MinValue } ;
52
+ await DbContext . UserRecords . AddRangeAsync ( new [ ] { urlClicked1New , urlClicked1Old , urlClicked2 } ) ;
53
+ await DbContext . SaveChangesAsync ( ) ;
45
54
using var ctx = new TestContext ( ) ;
46
- ctx . Services . AddScoped < IRepository < BlogPost > > ( _ => Repository ) ;
55
+ ctx . Services . AddScoped ( _ => DbContext ) ;
56
+ var cut = ctx . RenderComponent < VisitCountPerPage > ( ) ;
47
57
48
- var cut = ctx . RenderComponent < VisitCountPerPage > ( p => p . Add (
49
- s => s . PageVisitCount , null ) ) ;
58
+ cut . FindComponent < DateRangeSelector > ( ) . Find ( "select" ) . Change ( DateTime . UtcNow . Date ) ;
50
59
60
+ cut . WaitForState ( ( ) => cut . FindAll ( "td" ) . Any ( ) ) ;
51
61
var elements = cut . FindAll ( "td" ) . ToList ( ) ;
52
- elements . Should ( ) . BeEmpty ( ) ;
62
+ elements . Count . Should ( ) . Be ( 3 ) ;
63
+ var titleData = elements [ 0 ] . ChildNodes . Single ( ) as IHtmlAnchorElement ;
64
+ titleData . Should ( ) . NotBeNull ( ) ;
65
+ titleData . InnerHtml . Should ( ) . Be ( blogPost1 . Title ) ;
66
+ titleData . Href . Should ( ) . Contain ( $ "blogPost/{ blogPost1 . Id } ") ;
67
+ elements [ 1 ] . InnerHtml . Should ( ) . Be ( "1" ) ;
53
68
}
54
69
55
- [ Fact ]
56
- public void ShouldIgnoreNotBlogPosts ( )
70
+ private async Task SaveBlogPostArticleClicked ( string blogPostId , int count )
57
71
{
58
- using var ctx = new TestContext ( ) ;
59
- ctx . Services . AddScoped < IRepository < BlogPost > > ( _ => Repository ) ;
60
- var visits = new List < KeyValuePair < string , int > > { new ( "notablogpost" , 5 ) } ;
61
- var pageVisitCounts = visits . OrderByDescending ( s => s . Value ) ;
72
+ var urlClicked = $ "blogPost/{ blogPostId } ";
73
+ for ( var i = 0 ; i < count ; i ++ )
74
+ {
75
+ var data = new UserRecord
76
+ {
77
+ UrlClicked = urlClicked ,
78
+ } ;
79
+ await DbContext . UserRecords . AddAsync ( data ) ;
80
+ }
62
81
63
- var cut = ctx . RenderComponent < VisitCountPerPage > ( p => p . Add (
64
- s => s . PageVisitCount , pageVisitCounts ) ) ;
65
-
66
- var elements = cut . FindAll ( "td" ) . ToList ( ) ;
67
- elements . Should ( ) . BeEmpty ( ) ;
82
+ await DbContext . SaveChangesAsync ( ) ;
68
83
}
69
84
}
70
85
}
0 commit comments