Skip to content

Commit f49aadf

Browse files
Todd Schaveyclaude
andcommitted
fix(tests): add ValueExpression parameter to form component tests
Form components now inherit from FlowbiteInputBase<TValue> which requires ValueExpression for FieldIdentifier creation. Updated all bUnit tests to provide this parameter alongside Value/ValueChanged. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent ff19752 commit f49aadf

File tree

3 files changed

+70
-7
lines changed

3 files changed

+70
-7
lines changed

src/Flowbite.Tests/Components/Forms/SelectTests.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ public class SelectTests : FlowbiteTestContext
1616
public void Select_RendersWithOptions()
1717
{
1818
// Arrange & Act
19+
string? value = "";
1920
var cut = RenderComponent<Select>(parameters => parameters
21+
.Add(p => p.Value, value)
22+
.Add(p => p.ValueExpression, () => value)
2023
.Add(p => p.ChildContent, (RenderFragment)(builder =>
2124
{
2225
builder.OpenElement(0, "option");
@@ -46,10 +49,11 @@ public void Select_RendersWithOptions()
4649
public void Select_BindsSelectedValue()
4750
{
4851
// Arrange
49-
var selectedValue = "";
52+
string? selectedValue = "";
5053
var cut = RenderComponent<Select>(parameters => parameters
5154
.Add(p => p.Value, selectedValue)
5255
.Add(p => p.ValueChanged, newValue => selectedValue = newValue)
56+
.Add(p => p.ValueExpression, () => selectedValue)
5357
.Add(p => p.ChildContent, (RenderFragment)(builder =>
5458
{
5559
builder.OpenElement(0, "option");
@@ -76,7 +80,10 @@ public void Select_BindsSelectedValue()
7680
public void Select_AppliesCustomClass()
7781
{
7882
// Arrange & Act
83+
string? value = "";
7984
var cut = RenderComponent<Select>(parameters => parameters
85+
.Add(p => p.Value, value)
86+
.Add(p => p.ValueExpression, () => value)
8087
.Add(p => p.Class, "my-custom-select"));
8188

8289
// Assert
@@ -90,7 +97,10 @@ public void Select_AppliesCustomClass()
9097
public void Select_SupportsDisabledState()
9198
{
9299
// Arrange & Act
100+
string? value = "";
93101
var cut = RenderComponent<Select>(parameters => parameters
102+
.Add(p => p.Value, value)
103+
.Add(p => p.ValueExpression, () => value)
94104
.Add(p => p.Disabled, true));
95105

96106
// Assert
@@ -105,7 +115,10 @@ public void Select_SupportsDisabledState()
105115
public void Select_RendersHelperText()
106116
{
107117
// Arrange & Act
118+
string? value = "";
108119
var cut = RenderComponent<Select>(parameters => parameters
120+
.Add(p => p.Value, value)
121+
.Add(p => p.ValueExpression, () => value)
109122
.Add(p => p.HelperText, "Select your preferred option"));
110123

111124
// Assert
@@ -119,7 +132,10 @@ public void Select_RendersHelperText()
119132
public void Select_SupportsIdAttribute()
120133
{
121134
// Arrange & Act
135+
string? value = "";
122136
var cut = RenderComponent<Select>(parameters => parameters
137+
.Add(p => p.Value, value)
138+
.Add(p => p.ValueExpression, () => value)
123139
.Add(p => p.Id, "country-select"));
124140

125141
// Assert

src/Flowbite.Tests/Components/Forms/TextAreaTests.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ public class TextAreaTests : FlowbiteTestContext
1515
public void TextArea_RendersWithDefaultAttributes()
1616
{
1717
// Arrange & Act
18-
var cut = RenderComponent<Textarea>();
18+
string? value = "";
19+
var cut = RenderComponent<Textarea>(parameters => parameters
20+
.Add(p => p.Value, value)
21+
.Add(p => p.ValueExpression, () => value));
1922

2023
// Assert
2124
var textarea = cut.Find("textarea");
@@ -31,8 +34,10 @@ public void TextArea_RendersWithDefaultAttributes()
3134
public void TextArea_BindsValueCorrectly()
3235
{
3336
// Arrange & Act - Test that initial value is rendered
37+
string? value = "initial content";
3438
var cut = RenderComponent<Textarea>(parameters => parameters
35-
.Add(p => p.Value, "initial content"));
39+
.Add(p => p.Value, value)
40+
.Add(p => p.ValueExpression, () => value));
3641

3742
// Assert - The textarea should have the value attribute set via @bind
3843
// In Blazor with @bind, the value is rendered as both the 'value' attribute and inner content
@@ -41,7 +46,8 @@ public void TextArea_BindsValueCorrectly()
4146

4247
// Re-render with new value to verify binding updates
4348
cut.SetParametersAndRender(parameters => parameters
44-
.Add(p => p.Value, "updated content"));
49+
.Add(p => p.Value, "updated content")
50+
.Add(p => p.ValueExpression, () => value));
4551

4652
textarea = cut.Find("textarea");
4753
textarea.GetAttribute("value").Should().Be("updated content");
@@ -54,7 +60,10 @@ public void TextArea_BindsValueCorrectly()
5460
public void TextArea_AppliesCustomClass()
5561
{
5662
// Arrange & Act
63+
string? value = "";
5764
var cut = RenderComponent<Textarea>(parameters => parameters
65+
.Add(p => p.Value, value)
66+
.Add(p => p.ValueExpression, () => value)
5867
.Add(p => p.Class, "my-custom-class"));
5968

6069
// Assert
@@ -68,7 +77,10 @@ public void TextArea_AppliesCustomClass()
6877
public void TextArea_SupportsRows()
6978
{
7079
// Arrange & Act
80+
string? value = "";
7181
var cut = RenderComponent<Textarea>(parameters => parameters
82+
.Add(p => p.Value, value)
83+
.Add(p => p.ValueExpression, () => value)
7284
.Add(p => p.Rows, 10));
7385

7486
// Assert
@@ -83,7 +95,10 @@ public void TextArea_SupportsRows()
8395
public void TextArea_SupportsPlaceholder()
8496
{
8597
// Arrange & Act
98+
string? value = "";
8699
var cut = RenderComponent<Textarea>(parameters => parameters
100+
.Add(p => p.Value, value)
101+
.Add(p => p.ValueExpression, () => value)
87102
.Add(p => p.Placeholder, "Enter your message"));
88103

89104
// Assert
@@ -98,7 +113,10 @@ public void TextArea_SupportsPlaceholder()
98113
public void TextArea_SupportsDisabledState()
99114
{
100115
// Arrange & Act
116+
string? value = "";
101117
var cut = RenderComponent<Textarea>(parameters => parameters
118+
.Add(p => p.Value, value)
119+
.Add(p => p.ValueExpression, () => value)
102120
.Add(p => p.Disabled, true));
103121

104122
// Assert
@@ -113,7 +131,10 @@ public void TextArea_SupportsDisabledState()
113131
public void TextArea_RendersHelperText()
114132
{
115133
// Arrange & Act
134+
string? value = "";
116135
var cut = RenderComponent<Textarea>(parameters => parameters
136+
.Add(p => p.Value, value)
137+
.Add(p => p.ValueExpression, () => value)
117138
.Add(p => p.HelperText, "Maximum 500 characters"));
118139

119140
// Assert
@@ -127,7 +148,10 @@ public void TextArea_RendersHelperText()
127148
public void TextArea_SupportsRequiredAttribute()
128149
{
129150
// Arrange & Act
151+
string? value = "";
130152
var cut = RenderComponent<Textarea>(parameters => parameters
153+
.Add(p => p.Value, value)
154+
.Add(p => p.ValueExpression, () => value)
131155
.Add(p => p.Required, true));
132156

133157
// Assert

src/Flowbite.Tests/Components/Forms/TextInputTests.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ public class TextInputTests : FlowbiteTestContext
1515
public void TextInput_RendersWithDefaultAttributes()
1616
{
1717
// Arrange & Act
18-
var cut = RenderComponent<TextInput<string>>();
18+
var value = "";
19+
var cut = RenderComponent<TextInput<string>>(parameters => parameters
20+
.Add(p => p.Value, value)
21+
.Add(p => p.ValueExpression, () => value));
1922

2023
// Assert
2124
var input = cut.Find("input");
@@ -34,7 +37,8 @@ public void TextInput_BindsValueCorrectly()
3437
var boundValue = "";
3538
var cut = RenderComponent<TextInput<string>>(parameters => parameters
3639
.Add(p => p.Value, boundValue)
37-
.Add(p => p.ValueChanged, newValue => boundValue = newValue));
40+
.Add(p => p.ValueChanged, newValue => boundValue = newValue)
41+
.Add(p => p.ValueExpression, () => boundValue));
3842

3943
// Act
4044
cut.Find("input").Change("test value");
@@ -50,7 +54,10 @@ public void TextInput_BindsValueCorrectly()
5054
public void TextInput_AppliesCustomClass()
5155
{
5256
// Arrange & Act
57+
var value = "";
5358
var cut = RenderComponent<TextInput<string>>(parameters => parameters
59+
.Add(p => p.Value, value)
60+
.Add(p => p.ValueExpression, () => value)
5461
.Add(p => p.Class, "my-custom-class"));
5562

5663
// Assert
@@ -66,7 +73,10 @@ public void TextInput_AppliesCustomClass()
6673
public void TextInput_SupportsPlaceholder()
6774
{
6875
// Arrange & Act
76+
var value = "";
6977
var cut = RenderComponent<TextInput<string>>(parameters => parameters
78+
.Add(p => p.Value, value)
79+
.Add(p => p.ValueExpression, () => value)
7080
.Add(p => p.Placeholder, "Enter your name"));
7181

7282
// Assert
@@ -81,7 +91,10 @@ public void TextInput_SupportsPlaceholder()
8191
public void TextInput_SupportsDisabledState()
8292
{
8393
// Arrange & Act
94+
var value = "";
8495
var cut = RenderComponent<TextInput<string>>(parameters => parameters
96+
.Add(p => p.Value, value)
97+
.Add(p => p.ValueExpression, () => value)
8598
.Add(p => p.Disabled, true));
8699

87100
// Assert
@@ -96,7 +109,10 @@ public void TextInput_SupportsDisabledState()
96109
public void TextInput_SupportsTypeChange()
97110
{
98111
// Arrange & Act
112+
var value = "";
99113
var cut = RenderComponent<TextInput<string>>(parameters => parameters
114+
.Add(p => p.Value, value)
115+
.Add(p => p.ValueExpression, () => value)
100116
.Add(p => p.Type, "password"));
101117

102118
// Assert
@@ -111,7 +127,10 @@ public void TextInput_SupportsTypeChange()
111127
public void TextInput_SupportsRequiredAttribute()
112128
{
113129
// Arrange & Act
130+
var value = "";
114131
var cut = RenderComponent<TextInput<string>>(parameters => parameters
132+
.Add(p => p.Value, value)
133+
.Add(p => p.ValueExpression, () => value)
115134
.Add(p => p.Required, true));
116135

117136
// Assert
@@ -126,7 +145,10 @@ public void TextInput_SupportsRequiredAttribute()
126145
public void TextInput_RendersHelperText()
127146
{
128147
// Arrange & Act
148+
var value = "";
129149
var cut = RenderComponent<TextInput<string>>(parameters => parameters
150+
.Add(p => p.Value, value)
151+
.Add(p => p.ValueExpression, () => value)
130152
.Add(p => p.HelperText, "This field is required"));
131153

132154
// Assert
@@ -143,7 +165,8 @@ public void TextInput_WithIntValue_BindsCorrectly()
143165
var boundValue = 0;
144166
var cut = RenderComponent<TextInput<int>>(parameters => parameters
145167
.Add(p => p.Value, boundValue)
146-
.Add(p => p.ValueChanged, newValue => boundValue = newValue));
168+
.Add(p => p.ValueChanged, newValue => boundValue = newValue)
169+
.Add(p => p.ValueExpression, () => boundValue));
147170

148171
// Act
149172
cut.Find("input").Change("42");

0 commit comments

Comments
 (0)