Skip to content

Commit c464005

Browse files
authored
feat(blazorui): add missing tests of BitParams #11852 (#11853)
1 parent f458bc4 commit c464005

File tree

4 files changed

+169
-0
lines changed

4 files changed

+169
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Bunit;
5+
using Microsoft.AspNetCore.Components;
6+
using Microsoft.VisualStudio.TestTools.UnitTesting;
7+
8+
namespace Bit.BlazorUI.Tests.Utils.Params;
9+
10+
[TestClass]
11+
public class BitParamsTests : BunitTestContext
12+
{
13+
[TestMethod]
14+
public void ShouldCascadeParametersToChildren()
15+
{
16+
var parameters = new List<IBitComponentParams>
17+
{
18+
new FakeParamsA(),
19+
new FakeParamsB()
20+
};
21+
22+
var component = RenderComponent<BitParams>(builder =>
23+
{
24+
builder.Add(p => p.Parameters, parameters);
25+
builder.AddChildContent(childBuilder =>
26+
{
27+
childBuilder.OpenComponent<ParamsConsumer>(0);
28+
childBuilder.CloseComponent();
29+
});
30+
});
31+
32+
component.MarkupMatches("1-Hello");
33+
}
34+
35+
[TestMethod]
36+
public void ShouldProvideValuesWithNamesAndFixedFlag()
37+
{
38+
var param = new FakeParamsA();
39+
40+
var component = RenderComponent<BitParams>(builder =>
41+
{
42+
builder.Add(p => p.Parameters, [param]);
43+
builder.AddChildContent("<div>content</div>");
44+
});
45+
46+
var provider = component.FindComponent<BitCascadingValueProvider>().Instance;
47+
var value = provider.Values?.Single();
48+
49+
Assert.IsNotNull(value);
50+
Assert.AreEqual(param, value!.Value);
51+
Assert.AreEqual(param.Name, value.Name);
52+
Assert.IsTrue(value.IsFixed);
53+
}
54+
55+
[TestMethod]
56+
public void ShouldSkipNullParameters()
57+
{
58+
var component = RenderComponent<BitParams>(builder =>
59+
{
60+
builder.Add(p => p.Parameters, [null!, new FakeParamsB()]);
61+
builder.AddChildContent("<span>child</span>");
62+
});
63+
64+
var provider = component.FindComponent<BitCascadingValueProvider>().Instance;
65+
var values = provider.Values?.ToList();
66+
67+
Assert.IsNotNull(values);
68+
Assert.HasCount(1, values);
69+
Assert.AreEqual("B", values[0].Name);
70+
}
71+
72+
[TestMethod]
73+
public void ShouldRenderChildContentWhenParametersNull()
74+
{
75+
var component = RenderComponent<BitParams>(builder =>
76+
{
77+
builder.AddChildContent("<p>no-params</p>");
78+
});
79+
80+
component.MarkupMatches("<p>no-params</p>");
81+
}
82+
83+
[TestMethod]
84+
public void ShouldRenderChildContentWhenParametersEmpty()
85+
{
86+
var component = RenderComponent<BitParams>(builder =>
87+
{
88+
builder.Add(p => p.Parameters, []);
89+
builder.AddChildContent("<p>empty</p>");
90+
});
91+
92+
component.MarkupMatches("<p>empty</p>");
93+
}
94+
95+
[TestMethod]
96+
public void ShouldRenderEmptyWhenNoChildAndNoParameters()
97+
{
98+
var component = RenderComponent<BitParams>();
99+
100+
component.MarkupMatches(string.Empty);
101+
}
102+
103+
[TestMethod]
104+
public async Task ShouldIgnoreUnknownParametersAndNotThrow()
105+
{
106+
var component = RenderComponent<BitParams>();
107+
108+
var parameters = ParameterView.FromDictionary(new Dictionary<string, object?>
109+
{
110+
{ "Unknown", 1 },
111+
{ nameof(BitParams.Parameters), new[] { new FakeParamsA() } }
112+
});
113+
114+
await component.InvokeAsync(() => component.Instance.SetParametersAsync(parameters));
115+
116+
Assert.AreEqual(1, component.Instance.Parameters?.Count());
117+
}
118+
119+
[TestMethod]
120+
public void ShouldUpdateParametersOnRerender()
121+
{
122+
var first = new FakeParamsA();
123+
var second = new FakeParamsB();
124+
125+
var component = RenderComponent<BitParams>(builder =>
126+
{
127+
builder.Add(p => p.Parameters, [first]);
128+
builder.AddChildContent(childBuilder =>
129+
{
130+
childBuilder.OpenComponent<ParamsConsumer>(0);
131+
childBuilder.CloseComponent();
132+
});
133+
});
134+
135+
component.SetParametersAndRender(builder => builder.Add(p => p.Parameters, [second]));
136+
137+
component.MarkupMatches("-Hello");
138+
}
139+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Bit.BlazorUI.Tests.Utils.Params;
2+
3+
public sealed class FakeParamsA : IBitComponentParams
4+
{
5+
public string Name => "A";
6+
public int Value => 1;
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Bit.BlazorUI.Tests.Utils.Params;
2+
3+
public sealed class FakeParamsB : IBitComponentParams
4+
{
5+
public string Name => "B";
6+
public string Text => "Hello";
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Microsoft.AspNetCore.Components;
2+
using Microsoft.AspNetCore.Components.Rendering;
3+
4+
namespace Bit.BlazorUI.Tests.Utils.Params;
5+
6+
public sealed class ParamsConsumer : ComponentBase
7+
{
8+
[CascadingParameter(Name = "A")] public FakeParamsA? A { get; set; }
9+
10+
[CascadingParameter(Name = "B")] public FakeParamsB? B { get; set; }
11+
12+
protected override void BuildRenderTree(RenderTreeBuilder builder)
13+
{
14+
builder.AddContent(0, $"{A?.Value}-{B?.Text}");
15+
}
16+
}

0 commit comments

Comments
 (0)