diff --git a/src/Core/Components/Search/FluentSearch.razor.css b/src/Core/Components/Search/FluentSearch.razor.css
new file mode 100644
index 0000000000..f12625492e
--- /dev/null
+++ b/src/Core/Components/Search/FluentSearch.razor.css
@@ -0,0 +1,4 @@
+fluent-search[readonly]::part(clear-button),
+fluent-search[disabled]::part(clear-button) {
+ pointer-events: none;
+}
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_AdditionalAttributes.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_AdditionalAttributes.verified.html
new file mode 100644
index 0000000000..8f0b4527a3
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_AdditionalAttributes.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Filled.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Filled.verified.html
new file mode 100644
index 0000000000..bf77e1e7e3
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Filled.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Outline.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Outline.verified.html
new file mode 100644
index 0000000000..aba6d27ff2
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_AppearanceAttribute-Outline.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_AutoFocusAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_AutoFocusAttribute.verified.html
new file mode 100644
index 0000000000..e057878b59
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_AutoFocusAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ChildContent.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ChildContent.verified.html
new file mode 100644
index 0000000000..97679751ef
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ChildContent.verified.html
@@ -0,0 +1,4 @@
+
+
+ Child content
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_DataListAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_DataListAttribute.verified.html
new file mode 100644
index 0000000000..84e78cd804
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_DataListAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_Default.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_Default.verified.html
new file mode 100644
index 0000000000..aba6d27ff2
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_Default.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_DisabledAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_DisabledAttribute.verified.html
new file mode 100644
index 0000000000..81abd05836
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_DisabledAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[empty].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[empty].verified.html
new file mode 100644
index 0000000000..4cb46fcfd5
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[empty].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[null].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[null].verified.html
new file mode 100644
index 0000000000..b869798d96
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[null].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[space].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[space].verified.html
new file mode 100644
index 0000000000..fc4ceca38e
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-[space].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-id-value.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-id-value.verified.html
new file mode 100644
index 0000000000..aba6d27ff2
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_IdAttribute-id-value.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_MaxLengthAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_MaxLengthAttribute.verified.html
new file mode 100644
index 0000000000..0387a3c931
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_MaxLengthAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_MinLengthAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_MinLengthAttribute.verified.html
new file mode 100644
index 0000000000..0ce3e2ec82
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_MinLengthAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_NameAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_NameAttribute.verified.html
new file mode 100644
index 0000000000..40289f32e0
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_NameAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_PatternAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_PatternAttribute.verified.html
new file mode 100644
index 0000000000..5a3a5646b3
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_PatternAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_PlaceholderAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_PlaceholderAttribute.verified.html
new file mode 100644
index 0000000000..f29d7da8bf
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_PlaceholderAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ReadOnlyAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ReadOnlyAttribute.verified.html
new file mode 100644
index 0000000000..30bcb1a7af
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ReadOnlyAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_RequiredAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_RequiredAttribute.verified.html
new file mode 100644
index 0000000000..104d87b054
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_RequiredAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_SizeAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_SizeAttribute.verified.html
new file mode 100644
index 0000000000..3869f9f5f8
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_SizeAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_SpellcheckAttribute.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_SpellcheckAttribute.verified.html
new file mode 100644
index 0000000000..1325848125
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_SpellcheckAttribute.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[empty].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[empty].verified.html
new file mode 100644
index 0000000000..60b0b76bb5
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[empty].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[null].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[null].verified.html
new file mode 100644
index 0000000000..aba6d27ff2
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[null].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[space].verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[space].verified.html
new file mode 100644
index 0000000000..2705c17f01
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-[space].verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-some-value.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-some-value.verified.html
new file mode 100644
index 0000000000..35a6644073
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_ValueAttribute-some-value.verified.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.FluentSearch_WithLabel.verified.html b/tests/Core/Search/FluentSearchTests.FluentSearch_WithLabel.verified.html
new file mode 100644
index 0000000000..3254a0598e
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.FluentSearch_WithLabel.verified.html
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/tests/Core/Search/FluentSearchTests.cs b/tests/Core/Search/FluentSearchTests.cs
new file mode 100644
index 0000000000..b3d8558ac8
--- /dev/null
+++ b/tests/Core/Search/FluentSearchTests.cs
@@ -0,0 +1,278 @@
+using Bunit;
+using Microsoft.Extensions.DependencyInjection;
+using Xunit;
+
+namespace Microsoft.FluentUI.AspNetCore.Components.Tests.Search;
+
+public class FluentSearchTests : TestContext
+{
+ public FluentSearchTests()
+ {
+ JSInterop.Mode = JSRuntimeMode.Loose;
+ Services.AddSingleton(LibraryConfiguration.ForUnitTests);
+ }
+
+
+ [Fact]
+ public void FluentSearch_Default()
+ {
+ //Arrange
+ var cut = RenderComponent();
+
+ //Act
+
+ //Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_WithLabel()
+ {
+ //Arrange
+ string label = "With a label";
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(s => s.Label, label);
+ });
+
+ //Act
+
+ //Assert
+ cut.Verify();
+ }
+
+ [Theory]
+ [InlineData(FluentInputAppearance.Outline)]
+ [InlineData(FluentInputAppearance.Filled)]
+ public void FluentSearch_AppearanceAttribute(FluentInputAppearance appearance)
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Appearance, appearance);
+ });
+
+ // Assert
+ cut.Verify(suffix: appearance.ToString());
+ }
+
+ [Fact]
+ public void FluentSearch_MaxLengthAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Maxlength, 10);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_MinLengthAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Minlength, 5);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_PatternAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Pattern, "[A-Za-z]{3}");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_SizeAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Size, 10);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_SpellcheckAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Spellcheck, true);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+
+ [Fact]
+ public void FluentSearch_DataListAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.DataList, "datalist-id");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_ChildContent()
+ {
+ // Arrange & Act
+
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.AddChildContent("Child content
");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Theory]
+ [InlineData("id-value")]
+ [InlineData(null)]
+ [InlineData("")]
+ [InlineData(" ")]
+ public void FluentSearch_IdAttribute(string id)
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Id, id);
+ });
+
+ // Assert
+ cut.Verify(suffix: id);
+ }
+
+ [Theory]
+ [InlineData("some-value")]
+ [InlineData(null)]
+ [InlineData("")]
+ [InlineData(" ")]
+ public void FluentSearch_ValueAttribute(string value)
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Value, value);
+ });
+
+ // Assert
+ cut.Verify(suffix: value);
+ }
+
+ [Fact]
+ public void FluentSearch_RequiredAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Required, true);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_DisabledAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Disabled, true);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_ReadOnlyAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.ReadOnly, true);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_AutoFocusAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Autofocus, true);
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_PlaceholderAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Placeholder, "Enter text here");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_NameAttribute()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.Add(p => p.Name, "name");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+ [Fact]
+ public void FluentSearch_AdditionalAttributes()
+ {
+ // Arrange & Act
+ var cut = RenderComponent(parameters =>
+ {
+ parameters.AddUnmatched("additional-attribute-name", "additional-attribute-value");
+ });
+
+ // Assert
+ cut.Verify();
+ }
+
+}
+
diff --git a/tests/Core/_ToDo/Search/FluentSearchTests.cs b/tests/Core/_ToDo/Search/FluentSearchTests.cs
deleted file mode 100644
index 912dd2f62d..0000000000
--- a/tests/Core/_ToDo/Search/FluentSearchTests.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Bunit;
-using Xunit;
-
-namespace Microsoft.FluentUI.AspNetCore.Components.Tests.Search;
-public class FluentSearchTests : TestBase
-{
- [Fact(Skip = "Need to figure out how to do this test")]
- public void FluentSearch_Default()
- {
- //Arrange
- var childContent = "render me";
- string dataList = default!;
- int? maxlength = default!;
- int? minlength = default!;
- string pattern = default!;
- int? size = default!;
- bool? spellcheck = default!;
- FluentInputAppearance appearance = default!;
- var cut = TestContext.RenderComponent(parameters => parameters
- .Add(p => p.DataList, dataList)
- .Add(p => p.Maxlength, maxlength)
- .Add(p => p.Minlength, minlength)
- .Add(p => p.Pattern, pattern)
- .Add(p => p.Size, size)
- .Add(p => p.Spellcheck, spellcheck)
- .Add(p => p.Appearance, appearance)
- .AddChildContent(childContent)
- );
- //Act
-
- //Assert
- cut.Verify();
- }
-}
-