Skip to content

Commit

Permalink
Merge pull request #382 from TimeWarpEngineering/Cramer/2024-02-22/Tests
Browse files Browse the repository at this point in the history
Cramer/2024 02 22/tests
  • Loading branch information
StevenTCramer authored Feb 26, 2024
2 parents fa1bc73 + 1fe14b0 commit 4468e65
Show file tree
Hide file tree
Showing 27 changed files with 215 additions and 169 deletions.
24 changes: 1 addition & 23 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -307,26 +307,4 @@ __pycache__/
*.binlog
/Documentation/Blazor-State/
*.bkp
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/_Imports_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_NavMenu_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Base_Components_ResetButton_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Color_Components_InputColor_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Color_Pages_CustomInputExamplePage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Counter_Components_Counter_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Counter_Components_CustomInput_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Counter_Pages_CounterPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_EventStream_Components_EventStream_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Features_Purple_Components_PurpleCounter_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_ChangeRoutePage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_ChildCountersPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_CloneTest_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_CloneTestPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_EventStreamPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_GoBackPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_JavaScriptInteropPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_PurpleAndBluePage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_ResetStorePage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_Services_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_ServicesPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_ThrowExceptionPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Pages_WeatherForecastsPage_razor.g.cs
/Tests/Test.App/Test.App.Client/Generated/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/*
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<Authors>Steven T. Cramer</Authors>
<Product>Blazor State</Product>
<PackageVersion>11.0.0-beta.6+8.0.101</PackageVersion>
<PackageVersion>11.0.0-beta.7+8.0.101</PackageVersion>
<PackageProjectUrl>https://timewarpengineering.github.io/blazor-state/</PackageProjectUrl>
<PackageTags>TimeWarp-State; TimeWarpState; BlazorState; Blazor; State; Blazor-State; MediatR; Mediator; Pipeline; Redux; Flux</PackageTags>
<PackageIcon>Logo.png</PackageIcon>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
namespace Sample.Client.Features.Counter;

using BlazorState;
using MediatR;

[UsedImplicitly]
public partial class CounterState
{
public static class IncrementCount
{
public class Action : IAction
{
public int Amount { get; set; }
public int Amount { get; init; }
}

public class Handler : ActionHandler<Action>
[UsedImplicitly]
public class Handler
(
IStore store
) : ActionHandler<Action>(store)
{
public Handler(IStore aStore) : base(aStore) { }

CounterState CounterState => Store.GetState<CounterState>();

public override Task Handle(Action aAction, CancellationToken aCancellationToken)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
namespace Sample.Client.Features.Counter;

using BlazorState;

public partial class CounterState : State<CounterState>
{
public int Count { get; private set; }
public override void Initialize() => Count = 3;
}
namespace Sample.Client.Features.Counter;

public partial class CounterState : State<CounterState>
{
public int Count { get; private set; }
public override void Initialize() => Count = 3;
}
2 changes: 2 additions & 0 deletions Samples/01-StateActionsHandlers/Sample/Client/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
global using BlazorState;
global using JetBrains.Annotations;
51 changes: 25 additions & 26 deletions Samples/01-StateActionsHandlers/Sample/Client/Program.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
using BlazorState;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Sample.Client;
using System.Reflection;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

builder.Services.AddBlazorState
(
options =>
{
options.UseReduxDevTools();
options.Assemblies =
new Assembly[]
{
typeof(Program).GetTypeInfo().Assembly,
};
}
);

await builder.Build().RunAsync();
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Sample.Client;
using System.Reflection;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

builder.Services.AddBlazorState
(
options =>
{
options.UseReduxDevTools();
options.Assemblies =
new Assembly[]
{
typeof(Program).GetTypeInfo().Assembly,
};
}
);

await builder.Build().RunAsync();
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,14 @@ internal class GoBackHandler
NavigationManager NavigationManager
) : ActionHandler<GoBack.Action>(store)
{

private RouteState RouteState => Store.GetState<RouteState>();

public override Task Handle(GoBack.Action aAction, CancellationToken aCancellationToken)
public override Task Handle(GoBack.Action action, CancellationToken cancellationToken)
{
if (RouteState.History.Count != 0)
{
RouteState.GoingBack = true;
NavigationManager.NavigateTo(RouteState.HistoryStack.Pop());
}
if (RouteState.IsHistoryEmpty) return Task.CompletedTask;

RouteState.GoingBack = true;
NavigationManager.NavigateTo(RouteState.HistoryStack.Pop());
return Task.CompletedTask;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace BlazorState.Features.Routing;

public partial class RouteState : State<RouteState>
public partial class RouteState
{
public override RouteState Hydrate(IDictionary<string, object> keyValuePairs) => new()
{
Expand Down
3 changes: 2 additions & 1 deletion Source/BlazorState/Features/Routing/State/RouteState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ public partial class RouteState : State<RouteState>
{
private readonly Stack<string> HistoryStack = new();
private bool GoingBack;
public bool IsHistoryEmpty => HistoryStack.Count == 0;

/// <summary>
/// The collection of routes that have been navigated to
/// </summary>
/// <remarks>Is public so will be serialized and visible in DevTools</remarks>
/// <remarks>Is public so will be serialized and visible in DevTools and maybe UX wants to display the stack.</remarks>
// ReSharper disable once MemberCanBePrivate.Global
public IReadOnlyCollection<string> History => HistoryStack;

Expand Down
31 changes: 0 additions & 31 deletions Tests/Client.Integration.Tests/.editorconfig

This file was deleted.

31 changes: 19 additions & 12 deletions Tests/Test.App/Test.App.Client/Components/NavMenu.razor
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid" title=@RenderModeDisplayString>
<a class="navbar-brand" href="">Test.App.Server</a>
<button class="btn btn-primary" data-qa="GoBack" @onclick=GoBack style="width: 40px; height: 40px;">
<button disabled=@RouteState.IsHistoryEmpty data-qa="GoBack" @onclick=GoBack style="width: 40px; height: 40px;">
<TimeWarp.HeroIcons.Mini.Solid.ArrowLeftIcon class="icon-size"/>
</button>
</div>
Expand Down Expand Up @@ -116,19 +116,26 @@
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>@CloneTestPage.Title
</NavLink>
</div>
</nav>

<div class="nav-item px-3">
<NavLink class="nav-link" href=@ClonablePage.Route>
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>@ClonablePage.Title
</NavLink>
</div>


<div class="nav-item px-3">
<NavLink class="nav-link" href=@CustomInputExamplePage.Route>
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> @CustomInputExamplePage.Title
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href=@CustomInputExamplePage.Route>
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> @CustomInputExamplePage.Title
</NavLink>
</div>

<div class="nav-item px-3">
<NavLink class="nav-link" href=@ServicesPage.Route>
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> @ServicesPage.Title
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href=@ServicesPage.Route>
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> @ServicesPage.Title
</NavLink>
</div>
</nav>
</div>

@code
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
namespace Test.App.Client.Features.Base.Components;

using CloneTest;

/// <summary>
/// Makes access to the State a little easier and by inheriting from
/// BlazorStateDevToolsComponent it allows for ReduxDevTools operation.
Expand All @@ -11,12 +13,15 @@ namespace Test.App.Client.Features.Base.Components;
/// </remarks>
public abstract class BaseComponent : BlazorStateDevToolsComponent
{
internal RouteState RouteState => GetState<RouteState>();
protected ApplicationState ApplicationState => GetState<ApplicationState>();
internal BlueState BlueState => GetState<BlueState>();
internal CounterState CounterState => GetState<CounterState>();
internal CloneableState CloneableState => GetState<CloneableState>();
internal EventStreamState EventStreamState => GetState<EventStreamState>();
internal WeatherForecastsState WeatherForecastsState => GetState<WeatherForecastsState>();
internal PurpleState PurpleState => GetState<PurpleState>();
internal RouteState RouteState => GetState<RouteState>();
internal ThemeState ThemeState => GetState<ThemeState>();
internal WeatherForecastsState WeatherForecastsState => GetState<WeatherForecastsState>();

// ReSharper disable once UnusedMember.Global - Can be used by inheriting classes not in this library.
protected Task Send(IRequest aRequest) => Mediator.Send(aRequest);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Test.App.Client.Features.CloneTest;

internal partial class CloneTestState
internal partial class CloneableState
{
internal class CloneTestAction : IAction;
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
namespace Test.App.Client.Features.CloneTest;

[UsedImplicitly]
internal partial class CloneTestState
internal partial class CloneableState
{
[UsedImplicitly]
internal class CloneTestHandler
(
IStore store
) : BaseActionHandler<CloneTestAction>(store)
{
public override Task<Unit> Handle
private CloneableState CloneableState => Store.GetState<CloneableState>();

public override Task Handle
(
CloneTestAction aCloneTestAction,
CancellationToken aCancellationToken
) => Unit.Task;
)
{
// Note: This is a test to verify that the state is cloned.
// It is not an example of any real-world usage.
if ( CloneableState.Count != 42) throw new Exception("Count is not 42 it seems I have failed to clone the state");
CloneableState.Count++;
return Task.CompletedTask;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
namespace Test.App.Client.Features.CloneTest;

internal partial class CloneTestState
internal partial class CloneableState
{
public override CloneTestState Hydrate(IDictionary<string, object> keyValuePairs)
public override CloneableState Hydrate(IDictionary<string, object> keyValuePairs)
{
var counterState = new CloneTestState
var counterState = new CloneableState
{
Count = Convert.ToInt32(keyValuePairs[CamelCase.MemberNameToCamelCase(nameof(Count))].ToString()),
Guid =
Expand All @@ -21,10 +21,10 @@ public override CloneTestState Hydrate(IDictionary<string, object> keyValuePairs
/// <summary>
/// Use in Tests ONLY, to initialize the State
/// </summary>
/// <param name="aCount"></param>
[UsedImplicitly] public void Initialize(int aCount)
/// <param name="count"></param>
[UsedImplicitly] public void Initialize(int count)
{
ThrowIfNotTestAssembly(Assembly.GetCallingAssembly());
Count = aCount;
Count = count;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace Test.App.Client.Features.CloneTest;

internal partial class CloneableState : State<CloneableState>, ICloneable
{
public int Count { get; private set; }

/// <summary>
/// Set the Initial State
/// </summary>
public override void Initialize() => Count = 3;

/// <summary>
///
/// </summary>
/// <remarks>We are trying to prove ICloneable is used when available instead of AnyClone.</remarks>
/// <returns>New CloneableState object where Count is always 42</returns>
public object Clone() => new CloneableState { Count = 42 };
}
Loading

0 comments on commit 4468e65

Please sign in to comment.