Skip to content

Commit 2c3d88c

Browse files
committed
feat (Tests): adds tests for drop element THR
1 parent da069bb commit 2c3d88c

4 files changed

+185
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
namespace Rhythm.Drop.Web.Tests.TagHelperRenderers.Elements;
2+
3+
using Rhythm.Drop.Models.Common.Attributes;
4+
using Rhythm.Drop.Models.Elements;
5+
using Rhythm.Drop.Web.Infrastructure.TagHelperRenderers.Elements;
6+
7+
[TestFixture]
8+
public class DefaultDropElementTagHelperRendererTests : DefaultDropElementTagHelperRendererTestsBase
9+
{
10+
[Test]
11+
public async Task RenderAsync_With_Returns_No_Output_Tag()
12+
{
13+
// arrange
14+
var tagHelperRenderer = CreateDefaultDropElementsTagHelperRenderer();
15+
var model = CreateRendererContext(new FakeElement());
16+
var context = CreateTagHelperContext(DefaultTagName);
17+
var output = CreateTagHelperOutput(DefaultTagName);
18+
19+
// act
20+
await tagHelperRenderer.RenderAsync(model, context, output);
21+
22+
// assert
23+
Assert.Multiple(() =>
24+
{
25+
Assert.That(output.TagName, Is.Not.EqualTo(DefaultTagName));
26+
Assert.That(output.Content.IsEmptyOrWhiteSpace, Is.False);
27+
});
28+
29+
}
30+
31+
[Test]
32+
public async Task RenderAsync_With_No_Element_Returns_No_Output()
33+
{
34+
// arrange
35+
var tagHelperRenderer = CreateDefaultDropElementsTagHelperRenderer();
36+
var model = CreateRendererContext(default);
37+
var context = CreateTagHelperContext(DefaultTagName);
38+
var output = CreateTagHelperOutput(DefaultTagName);
39+
40+
// act
41+
await tagHelperRenderer.RenderAsync(model, context, output);
42+
43+
// assert
44+
Assert.Multiple(() =>
45+
{
46+
Assert.That(output.TagName, Is.Not.EqualTo(DefaultTagName));
47+
Assert.That(output.Content.IsEmptyOrWhiteSpace, Is.True);
48+
});
49+
}
50+
51+
52+
private static DropElementTagHelperRendererContext CreateRendererContext(IElement? element)
53+
{
54+
var viewContext = CreateViewContext();
55+
56+
return new DropElementTagHelperRendererContext(element, DefaultTheme, 0, 1, ReadOnlyHtmlAttributeCollection.Empty(), viewContext, default);
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
namespace Rhythm.Drop.Web.Tests.TagHelperRenderers.Elements;
2+
3+
using Microsoft.AspNetCore.Html;
4+
using Microsoft.AspNetCore.Mvc.Rendering;
5+
using Moq;
6+
using Rhythm.Drop.Web.Factories.MetaData;
7+
using Rhythm.Drop.Web.Infrastructure.Factories.MetaData;
8+
using Rhythm.Drop.Web.Infrastructure.Helpers.Rendering;
9+
using Rhythm.Drop.Web.Infrastructure.MetaData;
10+
using Rhythm.Drop.Web.Infrastructure.TagHelperRenderers.Elements;
11+
using Rhythm.Drop.Web.TagHelperRenderers.Elements;
12+
using System.Threading.Tasks;
13+
14+
public abstract class DefaultDropElementTagHelperRendererTestsBase : TagHelperRendererTestsBase
15+
{
16+
protected const string DefaultTheme = "Default";
17+
18+
19+
20+
protected static IRenderingHelper CreateRenderingHelper()
21+
{
22+
return CreateRenderingHelper(new HtmlString("<div>Test</div>"));
23+
}
24+
25+
protected static IRenderingHelper CreateRenderingHelper(IHtmlContent htmlContent)
26+
{
27+
var mock = new Mock<IRenderingHelper>();
28+
mock.Setup(x => x.RenderAsync(It.IsAny<ElementMetaData>())).Returns(Task.FromResult(htmlContent));
29+
30+
return mock.Object;
31+
}
32+
33+
protected static IElementMetaDataFactory CreateElementMetaDataFactory()
34+
{
35+
return new DefaultElementMetaDataFactory();
36+
}
37+
38+
protected static IDropElementsTagHelperRenderer CreateDefaultDropElementsTagHelperRenderer()
39+
{
40+
var elementMetaDataFactory = CreateElementMetaDataFactory();
41+
var renderingHelper = CreateRenderingHelper();
42+
return new DefaultDropElementsTagHelperRenderer(elementMetaDataFactory, renderingHelper);
43+
}
44+
45+
protected static ViewContext CreateViewContext()
46+
{
47+
return Mock.Of<ViewContext>();
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
namespace Rhythm.Drop.Web.Tests.TagHelperRenderers.Elements;
2+
using Rhythm.Drop.Models.Elements;
3+
using Rhythm.Drop.Web.Infrastructure.MetaData;
4+
using Rhythm.Drop.Web.Infrastructure.TagHelperRenderers.Elements;
5+
using System.Threading.Tasks;
6+
7+
public class DefaultDropElementsTagHelperRendererTests : DefaultDropElementTagHelperRendererTestsBase
8+
{
9+
[Test]
10+
public async Task RenderAsync_With_Elements_And_No_TagName_Returns_Output_With_No_TagName()
11+
{
12+
// arrange
13+
var tagHelperRenderer = CreateDefaultDropElementsTagHelperRenderer();
14+
var model = CreateRendererContext([new FakeElement()]);
15+
var context = CreateTagHelperContext(DefaultTagName);
16+
var output = CreateTagHelperOutput(DefaultTagName);
17+
18+
// act
19+
await tagHelperRenderer.RenderAsync(model, context, output);
20+
21+
// assert
22+
Assert.That(output.TagName, Is.Default);
23+
Assert.That(output.TagName, Is.Not.EqualTo(DefaultTagName));
24+
}
25+
26+
[Test]
27+
public async Task RenderAsync_With_TagName_And_No_Elements_Returns_Output_With_No_TagName()
28+
{
29+
// arrange
30+
var tagHelperRenderer = CreateDefaultDropElementsTagHelperRenderer();
31+
var model = CreateRendererContext([]);
32+
var context = CreateTagHelperContext(DefaultTagName);
33+
var output = CreateTagHelperOutput(DefaultTagName);
34+
35+
// act
36+
await tagHelperRenderer.RenderAsync(model, context, output);
37+
38+
// assert
39+
Assert.That(output.TagName, Is.Default);
40+
Assert.That(output.TagName, Is.Not.EqualTo(DefaultTagName));
41+
}
42+
43+
[Test]
44+
public async Task RenderAsync_With_TagName_And_Elements_Returns_Output_With_Expected_TagName()
45+
{
46+
// arrange
47+
const string NewTagName = "section";
48+
var tagHelperRenderer = CreateDefaultDropElementsTagHelperRenderer();
49+
var model = CreateRendererContext([new FakeElement()], NewTagName);
50+
var context = CreateTagHelperContext(DefaultTagName);
51+
var output = CreateTagHelperOutput(DefaultTagName);
52+
53+
// act
54+
await tagHelperRenderer.RenderAsync(model, context, output);
55+
56+
// assert
57+
Assert.That(output.TagName, Is.EqualTo(NewTagName));
58+
}
59+
60+
private static DropElementsTagHelperRendererContext CreateRendererContext(IElement[] elements)
61+
{
62+
return CreateRendererContext(elements, default);
63+
}
64+
private static DropElementsTagHelperRendererContext CreateRendererContext(IElement[] elements, string? tagName)
65+
{
66+
var viewContext = CreateViewContext();
67+
68+
return new DropElementsTagHelperRendererContext(elements, DefaultTheme, tagName, viewContext, default);
69+
}
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Rhythm.Drop.Web.Tests.TagHelperRenderers;
2+
3+
using Rhythm.Drop.Models.Elements;
4+
5+
internal class FakeElement : IElement
6+
{
7+
public string ViewName => "Fake";
8+
}

0 commit comments

Comments
 (0)