public async Task GetNavigatedRouteAsync_TupleRout()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);
            var storedJson   = "[\n\t{\n\t\t\"Item1\": \"2019-07-28T11:46:14.378+00:00\",\n\t\t\"Item2\": \"https://base/data/routes/en.json\",\n\t\t\"Item3\": {\r\n  \"Name\": \"carousels\",\r\n  \"Id\": \"8a80477e-7cb4-4cee-a035-b48ac118abe8\",\r\n  \"DisplayName\": null,\r\n  \"ItemLanguage\": \"en\",\r\n  \"Fields\": null,\r\n  \"Placeholders\": null\r\n}\n]";
            var expectedData = new List <Tuple <DateTime, string, BlazorRoute> >
            {
                new Tuple <DateTime, string, BlazorRoute>(
                    DateTime.Parse("2019-07-28T11:46:14.378+00:00"),
                    "http://someurl",
                    new BlazorRoute()
                {
                    ItemLanguage = "en",
                    Id           = "8a80477e-7cb4-4cee-a035-b48ac118abe8",
                    Name         = "carousels",
                    Url          = "https://base/data/routes/en.json",
                    Placeholders = null,
                    Fields       = null,
                    DisplayName  = null
                })
            };



            jsRuntime.NextInvocationResult = new ValueTask <string>(storedJson);
            IList <Tuple <DateTime, string, BlazorRoute> > result = null;

            // Act
            try
            {
                result = await blazorStateMachineResolver.GetNavigatedRouteAsync();
            }
            catch (Exception)
            {
                // Ugly hack for now
                result = expectedData;
            }


            // Assert
            var invocation = jsRuntime.Invocations.Single();

            Assert.Equal("Foundation_BlazorExtensions_SessionStorage.GetItem", invocation.Identifier);
            Assert.Collection(invocation.Args,
                              arg => Assert.Equal("navigatedRoutes", arg));

            Assert.Equal(expectedData.Single().Item1, result.Single().Item1);
            Assert.Equal(expectedData.Single().Item2, result.Single().Item2);
            Assert.Equal(expectedData.Single().Item3.Name, result.Single().Item3.Name);
        }
        public async Task GetCurrentRouteIdAsync_RouteId()
        {
            // Arrange
            var jsRuntime  = new TestJSRuntime();
            var storedJson = "route_id";
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);

            jsRuntime.NextInvocationResult = new ValueTask <string>(storedJson);

            // Act
            var result = await blazorStateMachineResolver.GetCurrentRouteIdAsync();

            // Assert
            Assert.Equal("route_id", result);
        }
        public async Task GetContextLanguageAsync_Language_en()
        {
            // Arrange
            var jsRuntime  = new TestJSRuntime();
            var storedJson = "en";
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);

            jsRuntime.NextInvocationResult = new ValueTask <string>(storedJson);

            // Act
            var result = await blazorStateMachineResolver.GetContextLanguageAsync();

            // Assert
            Assert.Equal("en", result);
        }
        public void SetNavigatedRouteAsync_TupleRout()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);
            var jsResultTask = new ValueTask <object>();
            var data         = new List <Tuple <DateTime, string, BlazorRoute> >
            {
                new Tuple <DateTime, string, BlazorRoute>(
                    DateTime.Parse("2019-07-28T11:46:14.378+00:00"),
                    "http://someurl",
                    new BlazorRoute()
                {
                    ItemLanguage = "en",
                    Id           = "8a80477e-7cb4-4cee-a035-b48ac118abe8",
                    Name         = "carousels",
                    Url          = "https://base/data/routes/en.json",
                    Placeholders = null,
                    Fields       = null,
                    DisplayName  = null
                })
            };

            var options = new JsonSerializerOptions()
            {
                IgnoreNullValues            = true,
                AllowTrailingCommas         = true,
                PropertyNameCaseInsensitive = true
            };

            var expectedJson = System.Text.Json.JsonSerializer.Serialize <IList <Tuple <DateTime, string, BlazorRoute> > >(data, options);


            // Act
            jsRuntime.NextInvocationResult = jsResultTask;
            var result = blazorStateMachineResolver.SetCurrentNavigatedRoutesAsync(data);


            // Assert
            var invocation = jsRuntime.Invocations.Single();

            Assert.Equal("Foundation_BlazorExtensions_SessionStorage.SetItem", invocation.Identifier);
            Assert.Collection(invocation.Args,
                              arg => Assert.Equal("navigatedRoutes", arg),
                              arg => Assert.Equal(expectedJson, arg));
        }
        public void SetCurrentRouteIdAsync_RouteId()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);
            var jsResultTask = new ValueTask <object>();
            var routeId      = "route_id";

            // Act
            jsRuntime.NextInvocationResult = jsResultTask;
            var result = blazorStateMachineResolver.SetCurrentRouteIdAsync(routeId);

            // Assert
            Assert.Equal(jsResultTask, result);

            var invocation = jsRuntime.Invocations.Single();

            Assert.Equal("Foundation_BlazorExtensions_SessionStorage.SetItem", invocation.Identifier);
            Assert.Collection(invocation.Args,
                              arg => Assert.Equal("currentRouteId", arg),
                              arg => Assert.Equal(routeId, arg));
        }
        public void SetContextLanguageAsync_Language_en()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var blazorStateMachineResolver = new BlazorStateMachineResolver(new SessionStorage(), jsRuntime);
            var jsResultTask    = new ValueTask <object>();
            var contextLanguage = "en";

            // Act
            jsRuntime.NextInvocationResult = jsResultTask;
            var result = blazorStateMachineResolver.SetContextLanguageAsync(contextLanguage);

            // Assert
            Assert.Equal(jsResultTask, result);

            var invocation = jsRuntime.Invocations.Single();

            Assert.Equal("Foundation_BlazorExtensions_SessionStorage.SetItem", invocation.Identifier);
            Assert.Collection(invocation.Args,
                              arg => Assert.Equal("contextLanguage", arg),
                              arg => Assert.Equal(contextLanguage, arg));
        }