From 09b07992d4316899ee6878585622c0762588a82a Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Mon, 12 Aug 2019 16:14:57 +0800 Subject: Add username validator. --- Timeline.Tests/UsernameValidatorUnitTest.cs | 86 +++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Timeline.Tests/UsernameValidatorUnitTest.cs (limited to 'Timeline.Tests/UsernameValidatorUnitTest.cs') diff --git a/Timeline.Tests/UsernameValidatorUnitTest.cs b/Timeline.Tests/UsernameValidatorUnitTest.cs new file mode 100644 index 00000000..97d56195 --- /dev/null +++ b/Timeline.Tests/UsernameValidatorUnitTest.cs @@ -0,0 +1,86 @@ +using FluentAssertions; +using System; +using Timeline.Services; +using Xunit; + +namespace Timeline.Tests +{ + public class UsernameValidatorUnitTest : IClassFixture + { + private readonly UsernameValidator _validator; + + public UsernameValidatorUnitTest(UsernameValidator validator) + { + _validator = validator; + } + + [Fact] + public void NullShouldThrow() + { + _validator.Invoking(v => v.Validate(null, out string message)).Should().Throw(); + } + + + private string FailAndMessage(string username) + { + var result = _validator.Validate(username, out var message); + result.Should().BeFalse(); + return message; + } + + private void Succeed(string username) + { + _validator.Validate(username, out var message).Should().BeTrue(); + message.Should().BeNull(); + } + + [Fact] + public void Empty() + { + FailAndMessage("").Should().ContainEquivalentOf("empty"); + } + + [Fact] + public void WhiteSpace() + { + FailAndMessage(" ").Should().ContainEquivalentOf("whitespace"); + FailAndMessage("\t").Should().ContainEquivalentOf("whitespace"); + FailAndMessage("\n").Should().ContainEquivalentOf("whitespace"); + + FailAndMessage("a b").Should().ContainEquivalentOf("whitespace"); + FailAndMessage("a\tb").Should().ContainEquivalentOf("whitespace"); + FailAndMessage("a\nb").Should().ContainEquivalentOf("whitespace"); + } + + [Fact] + public void BadCharactor() + { + FailAndMessage("!").Should().ContainEquivalentOf("regex"); + FailAndMessage("!abc").Should().ContainEquivalentOf("regex"); + FailAndMessage("ab!c").Should().ContainEquivalentOf("regex"); + } + + [Fact] + public void BadBegin() + { + FailAndMessage("-").Should().ContainEquivalentOf("regex"); + FailAndMessage("-abc").Should().ContainEquivalentOf("regex"); + } + + [Fact] + public void TooLong() + { + FailAndMessage(new string('a', 40)).Should().ContainEquivalentOf("long"); + } + + [Fact] + public void Success() + { + Succeed("abc"); + Succeed("_abc"); + Succeed("a-bc"); + Succeed("a-b-c"); + Succeed("a-b_c"); + } + } +} -- cgit v1.2.3