Skip to content

Commit 4ea1b0d

Browse files
committed
test: ensure custom renderer bypasses standard renderers
1 parent 353bddc commit 4ea1b0d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

FormCraft.UnitTests/Rendering/FieldRendererServiceTests.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,40 @@ public void RenderField_Should_Try_Multiple_Renderers_Until_Compatible_Found()
161161
.MustHaveHappenedOnceExactly();
162162
}
163163

164+
[Fact]
165+
public void RenderField_Should_Use_Custom_Renderer_And_Bypass_Standard_Renderers()
166+
{
167+
// Arrange
168+
var model = new TestModel { Name = "Test" };
169+
var field = new FieldConfiguration<TestModel, string?>(x => x.Name);
170+
171+
var customRenderer = new FakeCustomRenderer();
172+
var services = new ServiceCollection();
173+
services.AddSingleton(customRenderer.GetType(), customRenderer);
174+
var serviceProvider = services.BuildServiceProvider();
175+
176+
field.CustomRendererType = customRenderer.GetType();
177+
178+
var standardRenderer = A.Fake<IFieldRenderer>();
179+
A.CallTo(() => standardRenderer.CanRender(A<Type>._, A<IFieldConfiguration<object, object>>._)).Returns(true);
180+
181+
var service = new FieldRendererService(new[] { standardRenderer }, serviceProvider);
182+
var onValueChanged = EventCallback.Factory.Create<object?>(this, _ => { });
183+
var onDependencyChanged = EventCallback.Factory.Create(this, () => { });
184+
185+
// Act
186+
var result = service.RenderField(model,
187+
new FieldConfigurationWrapper<TestModel, string?>(field),
188+
onValueChanged,
189+
onDependencyChanged);
190+
191+
// Assert
192+
result.ShouldNotBeNull();
193+
customRenderer.WasCalled.ShouldBeTrue();
194+
A.CallTo(() => standardRenderer.CanRender(A<Type>._, A<IFieldConfiguration<object, object>>._)).MustNotHaveHappened();
195+
A.CallTo(() => standardRenderer.Render(A<IFieldRenderContext<TestModel>>._)).MustNotHaveHappened();
196+
}
197+
164198
[Fact]
165199
public void RenderField_Should_Handle_Null_Current_Value()
166200
{
@@ -247,4 +281,15 @@ public class TestModel
247281
public string? Name { get; set; }
248282
public int Value { get; set; }
249283
}
284+
285+
private class FakeCustomRenderer : ICustomFieldRenderer<string>
286+
{
287+
public bool WasCalled { get; private set; }
288+
public Type ValueType => typeof(string);
289+
public RenderFragment Render(IFieldRenderContext context)
290+
{
291+
WasCalled = true;
292+
return builder => builder.AddContent(0, "Custom");
293+
}
294+
}
250295
}

0 commit comments

Comments
 (0)