Skip to content

Commit e3cc91b

Browse files
authored
Update 6.1.2 & Docs: Fix Broken Api Page and Show Parameters Default Values (#68)
* Docs Api Page Fix Initialize * Some Render Tests
1 parent b33cae0 commit e3cc91b

21 files changed

+1191
-47
lines changed

CodeBeam.MudExtensions.UnitTest/CodeBeam.MudExtensions.UnitTest.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<PackageReference Include="CodecovUploader" Version="0.3.2" />
1414
<PackageReference Include="FluentAssertions" Version="6.8.0" />
1515
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
16+
<PackageReference Include="Moq" Version="4.18.2" />
1617
<PackageReference Include="NUnit" Version="3.13.3" />
1718
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
1819
<PackageReference Include="NUnit.Analyzers" Version="3.3.0" />
@@ -21,6 +22,7 @@
2122

2223
<ItemGroup>
2324
<ProjectReference Include="..\CodeBeam.MudExtensions\CodeBeam.MudExtensions.csproj" />
25+
<ProjectReference Include="..\ComponentViewer.Docs\ComponentViewer.Docs.csproj" />
2426
</ItemGroup>
2527

2628
</Project>

CodeBeam.MudExtensions.UnitTest/Components/BunitTest.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
using System;
66
using System.Threading.Tasks;
7+
using Bunit;
8+
using CodeBeam.MudExtensions.UnitTests.Mocks;
9+
using Microsoft.Extensions.DependencyInjection;
10+
using MudBlazor;
11+
using MudBlazor.Services;
712
using NUnit.Framework;
813

914
namespace CodeBeam.MudExtensions.UnitTests.Components
@@ -16,6 +21,11 @@ public abstract class BunitTest
1621
public virtual void Setup()
1722
{
1823
Context = new();
24+
Context.JSInterop.Mode = JSRuntimeMode.Loose;
25+
Context.Services.AddTransient<IScrollManager, MockScrollManager>();
26+
Context.Services.AddTransient<IKeyInterceptorFactory, MockKeyInterceptorServiceFactory>();
27+
Context.Services.AddSingleton<IMudPopoverService, MockPopoverService>();
28+
Context.Services.AddSingleton<ISnackbar, SnackbarService>();
1929
//Context.AddTestServices();
2030
}
2131

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Bunit;
7+
using CodeBeam.MudExtensions.UnitTests.Components;
8+
using ComponentViewer.Docs.Pages.Components;
9+
using ComponentViewer.Docs.Pages.Examples;
10+
using FluentAssertions;
11+
using MudBlazor;
12+
using MudExtensions;
13+
14+
namespace CodeBeam.MudExtensions.UnitTest.Components
15+
{
16+
[TestFixture]
17+
public class RenderExampleTests : BunitTest
18+
{
19+
[Test]
20+
public void AnimateExampleRenderTest()
21+
{
22+
var comp = Context.RenderComponent<AnimateExample1>();
23+
comp.Markup.Should().NotBeNullOrEmpty();
24+
}
25+
26+
[Test]
27+
public void AnimateExample2RenderTest()
28+
{
29+
var comp = Context.RenderComponent<AnimateExample2>();
30+
comp.Markup.Should().NotBeNullOrEmpty();
31+
}
32+
33+
[Test]
34+
public void DateWheelPickerExampleRenderTest()
35+
{
36+
var comp = Context.RenderComponent<DateWheelPickerExample1>();
37+
comp.Markup.Should().NotBeNullOrEmpty();
38+
}
39+
}
40+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Bunit;
7+
using CodeBeam.MudExtensions.UnitTests.Components;
8+
using ComponentViewer.Docs.Pages.Components;
9+
using FluentAssertions;
10+
using MudBlazor;
11+
using MudExtensions;
12+
13+
namespace CodeBeam.MudExtensions.UnitTest.Components
14+
{
15+
[TestFixture]
16+
public class RenderTests : BunitTest
17+
{
18+
[Test]
19+
public void ApiPageRenderTest()
20+
{
21+
var comp = Context.RenderComponent<ApiPage>();
22+
comp.Markup.Should().NotBeNullOrEmpty();
23+
}
24+
25+
[Test]
26+
public void AnimatePageRenderTest()
27+
{
28+
var comp = Context.RenderComponent<AnimatePage>();
29+
comp.Markup.Should().NotBeNullOrEmpty();
30+
}
31+
32+
[Test]
33+
public void WheelDatePickerPageRenderTest()
34+
{
35+
var comp = Context.RenderComponent<DateWheelPickerPage>();
36+
comp.Markup.Should().NotBeNullOrEmpty();
37+
}
38+
39+
[Test]
40+
public void SpeedDialPageRenderTest()
41+
{
42+
var comp = Context.RenderComponent<SpeedDialPage>();
43+
comp.Markup.Should().NotBeNullOrEmpty();
44+
}
45+
46+
[Test]
47+
public void StepperPageRenderTest()
48+
{
49+
var comp = Context.RenderComponent<StepperPage>();
50+
comp.Markup.Should().NotBeNullOrEmpty();
51+
}
52+
}
53+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using MudBlazor;
4+
using MudBlazor.Services;
5+
6+
namespace CodeBeam.MudExtensions.UnitTests.Mocks
7+
{
8+
#pragma warning disable CS1998 // Justification - Implementing IResizeListenerService
9+
public class MockBreakpointService : IBreakpointService
10+
{
11+
private int _width, _height;
12+
13+
internal void ApplyScreenSize(int width, int height)
14+
{
15+
_width = width;
16+
_height = height;
17+
18+
OnResized?.Invoke(this, new BrowserWindowSize()
19+
{
20+
Width = _width,
21+
Height = _height
22+
});
23+
OnBreakpointChanged?.Invoke(this, GetBreakpointInternal());
24+
}
25+
26+
#nullable enable
27+
#pragma warning disable CS0414 // justification implementing interface
28+
public event EventHandler<BrowserWindowSize>? OnResized;
29+
public event EventHandler<Breakpoint>? OnBreakpointChanged;
30+
#pragma warning restore CS0414
31+
#nullable disable
32+
public async ValueTask<BrowserWindowSize> GetBrowserWindowSize()
33+
{
34+
return new BrowserWindowSize()
35+
{
36+
Width = _width,
37+
Height = _height
38+
};
39+
}
40+
41+
public async Task<bool> IsMediaSize(Breakpoint breakpoint)
42+
{
43+
if (breakpoint == Breakpoint.None)
44+
return false;
45+
46+
return IsMediaSize(breakpoint, await GetBreakpoint());
47+
}
48+
49+
public bool IsMediaSize(Breakpoint breakpoint, Breakpoint reference)
50+
{
51+
if (breakpoint == Breakpoint.None)
52+
return false;
53+
54+
return breakpoint switch
55+
{
56+
Breakpoint.Xs => reference == Breakpoint.Xs,
57+
Breakpoint.Sm => reference == Breakpoint.Sm,
58+
Breakpoint.Md => reference == Breakpoint.Md,
59+
Breakpoint.Lg => reference == Breakpoint.Lg,
60+
Breakpoint.Xl => reference == Breakpoint.Xl,
61+
// * and down
62+
Breakpoint.SmAndDown => reference <= Breakpoint.Sm,
63+
Breakpoint.MdAndDown => reference <= Breakpoint.Md,
64+
Breakpoint.LgAndDown => reference <= Breakpoint.Lg,
65+
// * and up
66+
Breakpoint.SmAndUp => reference >= Breakpoint.Sm,
67+
Breakpoint.MdAndUp => reference >= Breakpoint.Md,
68+
Breakpoint.LgAndUp => reference >= Breakpoint.Lg,
69+
_ => false,
70+
};
71+
}
72+
73+
public async Task<Breakpoint> GetBreakpoint() => GetBreakpointInternal();
74+
75+
public Task<BreakpointServiceSubscribeResult> Subscribe(Action<Breakpoint> callback) => Task.FromResult(new BreakpointServiceSubscribeResult(Guid.NewGuid(),Breakpoint.Sm));
76+
public Task<BreakpointServiceSubscribeResult> Subscribe(Action<Breakpoint> callback, ResizeOptions options) => Task.FromResult(new BreakpointServiceSubscribeResult(Guid.NewGuid(), Breakpoint.Sm));
77+
public Task<bool> Unsubscribe(Guid subscriptionId) => Task.FromResult(true);
78+
79+
private Breakpoint GetBreakpointInternal()
80+
{
81+
if (_width >= ResizeListenerService.BreakpointDefinitions[Breakpoint.Xl])
82+
return Breakpoint.Xl;
83+
else if (_width >= ResizeListenerService.BreakpointDefinitions[Breakpoint.Lg])
84+
return Breakpoint.Lg;
85+
else if (_width >= ResizeListenerService.BreakpointDefinitions[Breakpoint.Md])
86+
return Breakpoint.Md;
87+
else if (_width >= ResizeListenerService.BreakpointDefinitions[Breakpoint.Sm])
88+
return Breakpoint.Sm;
89+
else
90+
return Breakpoint.Xs;
91+
}
92+
93+
public ValueTask DisposeAsync()
94+
{
95+
OnResized = null;
96+
OnBreakpointChanged = null;
97+
return ValueTask.CompletedTask;
98+
}
99+
}
100+
#pragma warning restore CS1998
101+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Threading.Tasks;
2+
using MudBlazor;
3+
using MudBlazor.Services;
4+
5+
namespace CodeBeam.MudExtensions.UnitTests.Mocks
6+
{
7+
public class MockBrowserWindowSizeProvider : IBrowserWindowSizeProvider
8+
{
9+
public ValueTask<BrowserWindowSize> GetBrowserWindowSize()
10+
{
11+
return new ValueTask<BrowserWindowSize>(new BrowserWindowSize());
12+
}
13+
}
14+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright (c) MudBlazor 2021
2+
// MudBlazor licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Threading.Tasks;
8+
using Microsoft.AspNetCore.Components.Web;
9+
using MudBlazor;
10+
11+
namespace CodeBeam.MudExtensions.UnitTests.Mocks
12+
{
13+
public class MockEventListenerFactory : IEventListenerFactory
14+
{
15+
private readonly MockEventListener _listener;
16+
17+
public MockEventListenerFactory(MockEventListener listener)
18+
{
19+
_listener = listener;
20+
}
21+
22+
public MockEventListenerFactory()
23+
{
24+
25+
}
26+
27+
public IEventListener Create() => _listener ?? new MockEventListener();
28+
}
29+
30+
public class MockEventListener : IEventListener
31+
{
32+
public Dictionary<Guid, Func<object, Task>> Callbacks { get; private set; } = new();
33+
34+
public Dictionary<Guid, string> ElementIdMapper { get; private set; } = new();
35+
36+
public ValueTask DisposeAsync()
37+
{
38+
Callbacks.Clear();
39+
ElementIdMapper.Clear();
40+
return ValueTask.CompletedTask;
41+
}
42+
43+
public Task<Guid> Subscribe<T>(string eventName, string elementId, string projection, int throttleInterval, Func<object, Task> callback)
44+
{
45+
var id = Guid.NewGuid();
46+
ElementIdMapper.Add(id, elementId);
47+
Callbacks.Add(id, callback);
48+
return Task.FromResult(id);
49+
}
50+
51+
public Task<Guid> SubscribeGlobal<T>(string eventName, int throotleInterval, Func<object, Task> callback)
52+
{
53+
var id = Guid.NewGuid();
54+
ElementIdMapper.Add(id, "document");
55+
Callbacks.Add(id, callback);
56+
return Task.FromResult(id);
57+
}
58+
59+
public Task<bool> Unsubscribe(Guid key)
60+
{
61+
var result = Callbacks.ContainsKey(key);
62+
if (result == true)
63+
{
64+
Callbacks.Remove(key);
65+
ElementIdMapper.Remove(key);
66+
}
67+
68+
return Task.FromResult(result);
69+
}
70+
71+
internal void FireEvent(MouseEventArgs args)
72+
{
73+
foreach (var item in Callbacks.Values)
74+
{
75+
item.Invoke(args);
76+
}
77+
}
78+
}
79+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Threading.Tasks;
2+
using MudBlazor;
3+
4+
namespace CodeBeam.MudExtensions.UnitTests.Mocks
5+
{
6+
/// <summary>
7+
/// Mock for scroll listener
8+
/// </summary>
9+
public class MockJsApiServices : IJsApiService
10+
{
11+
public ValueTask CopyToClipboardAsync(string text) => ValueTask.CompletedTask;
12+
13+
public ValueTask Open(string link, string target) => ValueTask.CompletedTask;
14+
15+
public ValueTask OpenInNewTabAsync(string url) => ValueTask.CompletedTask;
16+
}
17+
}

0 commit comments

Comments
 (0)