Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions Detection/tests/Mocks/MockTagHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Copyright (c) 2014-2024 Sarin Na Wangkanai, All Rights Reserved.Apache License, Version 2.0

using System.Text.Encodings.Web;

using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace Wangkanai.Detection.Mocks;

public static class MockTagHelper
{
internal static TagHelperContext Context
=> new(
new TagHelperAttributeList(),
new Dictionary<object, object>(),
Guid.NewGuid().ToString("N"));

internal static TagHelperOutput Output(string content)
=> new(
"div",
new TagHelperAttributeList(),
(result, encoder) => GetChildContentAsync(content));

internal static Task<TagHelperContent> GetChildContentAsync(string inner)
=> GetChildContentAsync(ContentBuilder(inner));

internal static Task<TagHelperContent> GetChildContentAsync(IHtmlContent inner)
{
var content = new DefaultTagHelperContent();
var helperContent = content.SetHtmlContent(inner);
return Task.FromResult<TagHelperContent>(helperContent);
}

internal static IHtmlContent ContentBuilder(string inner)
{
var content = new DefaultTagHelperContent();
return content.SetContent(inner);
}

internal static IHtmlContent ContentChrome()
{
var chrome = "<p>Chrome</p>";
return ContentBuilder(chrome);
}
}
101 changes: 50 additions & 51 deletions Detection/tests/TagHelpers/BrowserTagHelperTests.cs
Original file line number Diff line number Diff line change
@@ -1,41 +1,16 @@
// Copyright (c) 2014-2024 Sarin Na Wangkanai, All Rights Reserved.Apache License, Version 2.0

using System.Text.Encodings.Web;

using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Razor.TagHelpers;

using Wangkanai.Detection.Mocks;

namespace Wangkanai.Detection.Tests.TagHelpers;
namespace Wangkanai.Detection.TagHelpers;

public class BrowserTagHelperTests
{
private static readonly TagHelperContext Context = new(
new TagHelperAttributeList(),
new Dictionary<object, object>(),
Guid.NewGuid().ToString("N"));

private static readonly TagHelperOutput OutputEmpty = new(
"div",
new TagHelperAttributeList(),
(result, encoder) => {
var tagHelperContent = new DefaultTagHelperContent();
tagHelperContent.SetHtmlContent(string.Empty);
return Task.FromResult<TagHelperContent>(tagHelperContent);
});

private static readonly TagHelperOutput OutputChrome = new(
"div",
new TagHelperAttributeList(),
(result, encoder) => {
var defaultContent= new DefaultTagHelperContent();
var content = "<p>Chrome</p>";
var helperContent = defaultContent.SetHtmlContent(content);
return Task.FromResult(helperContent);
});

private const string Agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19";
private const string Tag = "<p>Chrome</p>";

[Fact]
public void ResolverIsNull()
Expand All @@ -48,125 +23,149 @@ public void ProcessContextIsNull()
{
var resolver = MockService.BrowserService("test");
var tagHelper = new BrowserTagHelper(resolver);
Assert.Throws<ArgumentNullException>(() => tagHelper.Process(null!, OutputEmpty));
var output = MockTagHelper.Output(string.Empty);
Assert.Throws<ArgumentNullException>(() => tagHelper.Process(null!, output));
}

[Fact]
public void ProcessOutputIsNull()
{
var resolver = MockService.BrowserService("test");
var tagHelper = new BrowserTagHelper(resolver);
Assert.Throws<ArgumentNullException>(() => tagHelper.Process(Context, null!));
var context = MockTagHelper.Context;
Assert.Throws<ArgumentNullException>(() => tagHelper.Process(context, null!));
}

[Fact]
public void ProcessIncludeIsNull()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(string.Empty);
var context = MockTagHelper.Context;
tagHelper.Include = null;
tagHelper.Process(Context, OutputEmpty);
Assert.Null(OutputEmpty.TagName);
tagHelper.Process(context, output);
Assert.Null(output.TagName);
}

[Fact]
public void ProcessIncludeIsEmpty()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(string.Empty);
var context = MockTagHelper.Context;
tagHelper.Include = string.Empty;
tagHelper.Process(Context, OutputEmpty);
Assert.Null(OutputEmpty.TagName);
tagHelper.Process(context, output);
Assert.Null(output.TagName);
}

[Fact]
public void ProcessIncludeIsWhiteSpace()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(string.Empty);
var context = MockTagHelper.Context;
tagHelper.Include = " ";
tagHelper.Process(Context, OutputEmpty);
Assert.Null(OutputEmpty.TagName);
tagHelper.Process(context, output);
Assert.Null(output.TagName);
}

[Fact]
public void ProcessIncludeIsNotMatch()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(string.Empty);
var context = MockTagHelper.Context;
tagHelper.Include = "test";
tagHelper.Process(Context, OutputEmpty);
Assert.Null(OutputEmpty.TagName);
tagHelper.Process(context, output);
Assert.Null(output.TagName);
}

[Fact]
public void ProcessIncludeIsMatch()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Include = "chrome";
tagHelper.Process(Context, OutputChrome);
Assert.Equal("<p>Chrome</p>", OutputChrome.Content.GetContent());
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessExcludeIsNull()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Exclude = null;
tagHelper.Process(Context, OutputChrome);
Assert.Equal("<p>Chrome</p>", OutputChrome.Content.GetContent());
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessExcludeIsEmpty()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Exclude = string.Empty;
tagHelper.Process(Context, OutputChrome);
Assert.Equal("<p>Chrome</p>", OutputChrome.Content.GetContent());
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessExcludeIsWhiteSpace()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Exclude = " ";
tagHelper.Process(Context, OutputChrome);
Assert.Equal("<p>Chrome</p>", OutputChrome.Content.GetContent());
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessExcludeIsNotMatch()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Exclude = "test";
tagHelper.Process(Context, OutputChrome);
Assert.Equal("<p>Chrome</p>", OutputChrome.Content.GetContent());
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessExcludeIsMatch()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Exclude = "chrome";
tagHelper.Process(Context, OutputChrome);
Assert.Null(OutputChrome.TagName);
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}

[Fact]
public void ProcessIncludeAndExcludeIsMatch()
{
var resolver = MockService.BrowserService(Agent);
var tagHelper = new BrowserTagHelper(resolver);
var output = MockTagHelper.Output(Tag);
var context = MockTagHelper.Context;
tagHelper.Include = "chrome";
tagHelper.Exclude = "chrome";
tagHelper.Process(Context, OutputChrome);
Assert.Null(OutputChrome.TagName);
tagHelper.Process(context, output);
Assert.Equal(Tag, output.Content.GetContent());
}
}
1 change: 1 addition & 0 deletions Detection/tests/Wangkanai.Detection.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

<PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
<RootNamespace>Wangkanai.Detection</RootNamespace>
</PropertyGroup>

<ItemGroup>
Expand Down