@@ -26,5 +26,76 @@ public void ShouldDisplayLikes(int likes, string expectedText)
2626
2727 label . Should ( ) . Be ( expectedText ) ;
2828 }
29+
30+ [ Fact ]
31+ public void ShouldInvokeEventWhenButtonClicked ( )
32+ {
33+ Services . AddScoped ( _ => new Mock < ILocalStorageService > ( ) . Object ) ;
34+ var blogPost = new BlogPostBuilder ( ) . Build ( ) ;
35+ var wasClicked = false ;
36+ var wasLike = false ;
37+ var cut = RenderComponent < Like > (
38+ p => p . Add ( l => l . BlogPost , blogPost )
39+ . Add ( l => l . OnBlogPostLiked , b =>
40+ {
41+ wasClicked = true ;
42+ wasLike = b ;
43+ } ) ) ;
44+
45+ cut . Find ( "button" ) . Click ( ) ;
46+
47+ wasClicked . Should ( ) . BeTrue ( ) ;
48+ wasLike . Should ( ) . BeTrue ( ) ;
49+ }
50+
51+ [ Fact ]
52+ public void ShouldSetLocalStorageVariableOnClick ( )
53+ {
54+ var localStorage = new Mock < ILocalStorageService > ( ) ;
55+ Services . AddScoped ( _ => localStorage . Object ) ;
56+ var blogPost = new BlogPostBuilder ( ) . Build ( ) ;
57+ var cut = RenderComponent < Like > (
58+ p => p . Add ( l => l . BlogPost , blogPost ) ) ;
59+
60+ cut . Find ( "button" ) . Click ( ) ;
61+
62+ localStorage . Verify ( l => l . SetItemAsync ( "hasLiked" , true , default ) , Times . Once ) ;
63+ }
64+
65+ [ Fact ]
66+ public void ShouldCheckLocalStorageOnInit ( )
67+ {
68+ var localStorage = new Mock < ILocalStorageService > ( ) ;
69+ localStorage . Setup ( l => l . ContainKeyAsync ( "hasLiked" , default ) ) . ReturnsAsync ( true ) ;
70+ localStorage . Setup ( l => l . GetItemAsync < bool > ( "hasLiked" , default ) ) . ReturnsAsync ( true ) ;
71+ Services . AddScoped ( _ => localStorage . Object ) ;
72+ var blogPost = new BlogPostBuilder ( ) . Build ( ) ;
73+ var wasLike = true ;
74+ var cut = RenderComponent < Like > (
75+ p => p . Add ( l => l . BlogPost , blogPost )
76+ . Add ( l => l . OnBlogPostLiked , b => wasLike = b ) ) ;
77+
78+ cut . Find ( "button" ) . Click ( ) ;
79+
80+ wasLike . Should ( ) . BeFalse ( ) ;
81+ }
82+
83+ [ Fact ]
84+ public void ShouldCheckStorageOnClickAgainAndDoNothingOnMismatch ( )
85+ {
86+ var localStorage = new Mock < ILocalStorageService > ( ) ;
87+ Services . AddScoped ( _ => localStorage . Object ) ;
88+ var blogPost = new BlogPostBuilder ( ) . Build ( ) ;
89+ var wasClicked = false ;
90+ var cut = RenderComponent < Like > (
91+ p => p . Add ( l => l . BlogPost , blogPost )
92+ . Add ( l => l . OnBlogPostLiked , _ => wasClicked = true ) ) ;
93+ localStorage . Setup ( l => l . ContainKeyAsync ( "hasLiked" , default ) ) . ReturnsAsync ( true ) ;
94+ localStorage . Setup ( l => l . GetItemAsync < bool > ( "hasLiked" , default ) ) . ReturnsAsync ( true ) ;
95+
96+ cut . Find ( "button" ) . Click ( ) ;
97+
98+ wasClicked . Should ( ) . BeFalse ( ) ;
99+ }
29100 }
30101}
0 commit comments