1+ using BlazorLocalTime ;
2+ using Bunit ;
3+ using Microsoft . Extensions . DependencyInjection ;
4+ using Microsoft . Extensions . Logging ;
5+ using Microsoft . JSInterop ;
6+ using Shouldly ;
7+
8+ namespace BlazorLocalTimeTest ;
9+
10+ public class BlazorLocalTimeProviderCodeTest : TestContext
11+ {
12+ public BlazorLocalTimeProviderCodeTest ( )
13+ {
14+ Services . AddBlazorLocalTimeService ( ) ;
15+ Services . AddLogging ( ) ;
16+ }
17+
18+ [ Fact ]
19+ public void BlazorLocalTimeProvider_SetsTimeZoneSuccessfully ( )
20+ {
21+ TestInitializer . JavaScriptInitializer ( JSInterop ) ;
22+
23+ var component = RenderComponent < BlazorLocalTimeProvider > ( ) ;
24+ var localTimeService = Services . GetRequiredService < ILocalTimeService > ( ) ;
25+
26+ localTimeService . IsTimeZoneInfoAvailable . ShouldBeTrue ( ) ;
27+ localTimeService . IsSuccessLoadBrowserTimeZone ? . ShouldBeTrue ( ) ;
28+ localTimeService . GetBrowserTimeZone ( ) . Id . ShouldBe ( "Asia/Tokyo" ) ;
29+ }
30+
31+ [ Fact ]
32+ public void BlazorLocalTimeProvider_HandlesJSDisconnectedException ( )
33+ {
34+ var module = JSInterop . SetupModule ( BlazorLocalTimeProvider . JsPath ) ;
35+ module . Setup < string > ( "getBrowserTimeZone" ) . SetException ( new JSDisconnectedException ( "Test disconnection" ) ) ;
36+
37+ var component = RenderComponent < BlazorLocalTimeProvider > ( ) ;
38+ var localTimeService = Services . GetRequiredService < ILocalTimeService > ( ) ;
39+
40+ localTimeService . IsTimeZoneInfoAvailable . ShouldBeFalse ( ) ;
41+ localTimeService . IsSuccessLoadBrowserTimeZone ? . ShouldBeFalse ( ) ;
42+ }
43+
44+ [ Fact ]
45+ public void BlazorLocalTimeProvider_HandlesJSException ( )
46+ {
47+ var module = JSInterop . SetupModule ( BlazorLocalTimeProvider . JsPath ) ;
48+ module . Setup < string > ( "getBrowserTimeZone" ) . SetException ( new JSException ( "Browser API not supported" ) ) ;
49+
50+ var component = RenderComponent < BlazorLocalTimeProvider > ( ) ;
51+ var localTimeService = Services . GetRequiredService < ILocalTimeService > ( ) ;
52+
53+ localTimeService . IsTimeZoneInfoAvailable . ShouldBeFalse ( ) ;
54+ localTimeService . IsSuccessLoadBrowserTimeZone ? . ShouldBeFalse ( ) ;
55+ }
56+
57+ [ Fact ]
58+ public void BlazorLocalTimeProvider_InitialStateIsNull ( )
59+ {
60+ // Don't setup JS interop to simulate initial state
61+ var localTimeService = Services . GetRequiredService < ILocalTimeService > ( ) ;
62+
63+ localTimeService . IsSuccessLoadBrowserTimeZone . ShouldBeNull ( ) ;
64+ localTimeService . IsTimeZoneInfoAvailable . ShouldBeFalse ( ) ;
65+ }
66+ }
0 commit comments