diff --git a/Dockerfile b/Dockerfile index d3a9b3b..eab6ebe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,7 @@ EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build WORKDIR /src COPY ["WotBlitzStatisticsPro.GraphQl/WotBlitzStatisticsPro.GraphQl.csproj", "WotBlitzStatisticsPro.GraphQl/"] +COPY ["WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj", "WotBlitzStatisticsPro.Blazor/"] COPY ["WotBlitzStatisticsPro.Logic/WotBlitzStatisticsPro.Logic.csproj", "WotBlitzStatisticsPro.Logic/"] COPY ["WotBlitzStatisticsPro.DataAccess/WotBlitzStatisticsPro.DataAccess.csproj", "WotBlitzStatisticsPro.DataAccess/"] COPY ["WotBlitzStatisticsPro.Common/WotBlitzStatisticsPro.Common.csproj", "WotBlitzStatisticsPro.Common/"] diff --git a/WotBlitzStatisticsPro.Blazor.Tests/MainLayoutTest.cs b/WotBlitzStatisticsPro.Blazor.Tests/MainLayoutTest.cs new file mode 100644 index 0000000..b607e23 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor.Tests/MainLayoutTest.cs @@ -0,0 +1,69 @@ +using System.Threading; +using Bunit; +using FluentAssertions; +using MediatR; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using NUnit.Framework; +using Radzen; +using WotBlitzStatisticsPro.Blazor.Messages; +using WotBlitzStatisticsPro.Blazor.Services; +using WotBlitzStatisticsPro.Blazor.Shared; + +namespace WotBlitzStatisticsPro.Blazor.Tests +{ + public class MainLayoutTest: TestContextWrapper + { + private readonly Mock _mediatorMock = new(); + private readonly Mock _searchServiceMock = new(); + private IRenderedComponent _component; + + [SetUp] + public void Setup() + { + TestContext = new Bunit.TestContext(); + TestContext.Services.AddSingleton(_mediatorMock.Object); + + TestContext.Services.AddSingleton(); + TestContext.Services.AddSingleton(_searchServiceMock.Object); + TestContext.Services.AddLocalization(); + + _component = TestContext.RenderComponent(); + } + + [Test] + public void ShouldFireMediatorEventEachTimeWhenLanguageChanged() + { + // ===================================== + // Hint for css lookup + /* +By.css('.classname') // get by class name +By.css('input[type=radio]') // get input by type radio +By.css('.parent .child') // get child who has a parent + */ + + // Take a look at the component text + // var html = _component.Markup; + + // ===================================== + + // All 3 languages in a RadzenSplitButton + var elements = _component.FindAll(".rz-menuitem"); + + elements.Should().NotBeNull(); + elements.Count.Should().Be(3); + + string[] expectedLanguages = {"en-US", "ru-RU", "de-DE"}; + for (int i = 0; i < 3; i++) + { + elements[i].Click(); + _mediatorMock.Verify(m => m.Publish( + It.Is(m => m.CultureName == expectedLanguages[0]), + It.IsAny()), Times.Once); + } + } + + [TearDown] + public void TearDown() => TestContext?.Dispose(); + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor.Tests/WotBlitzStatisticsPro.Blazor.Tests.csproj b/WotBlitzStatisticsPro.Blazor.Tests/WotBlitzStatisticsPro.Blazor.Tests.csproj new file mode 100644 index 0000000..d04da22 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor.Tests/WotBlitzStatisticsPro.Blazor.Tests.csproj @@ -0,0 +1,24 @@ + + + + net5.0 + + false + + + + + + + + + + + + + + + + + + diff --git a/WotBlitzStatisticsPro.sln b/WotBlitzStatisticsPro.sln index 8dc30d6..9368ca3 100644 --- a/WotBlitzStatisticsPro.sln +++ b/WotBlitzStatisticsPro.sln @@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.Tests EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.Blazor", "WotBlitzStatisticsPro.Blazor\WotBlitzStatisticsPro.Blazor.csproj", "{3A27736F-B5DD-4310-A013-2BB65C975104}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatisticsPro.Blazor.Tests", "WotBlitzStatisticsPro.Blazor.Tests\WotBlitzStatisticsPro.Blazor.Tests.csproj", "{7969D13E-2148-4608-8500-2DA22947A39C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -53,6 +55,10 @@ Global {3A27736F-B5DD-4310-A013-2BB65C975104}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A27736F-B5DD-4310-A013-2BB65C975104}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A27736F-B5DD-4310-A013-2BB65C975104}.Release|Any CPU.Build.0 = Release|Any CPU + {7969D13E-2148-4608-8500-2DA22947A39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7969D13E-2148-4608-8500-2DA22947A39C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7969D13E-2148-4608-8500-2DA22947A39C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7969D13E-2148-4608-8500-2DA22947A39C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE