aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/UsernameValidatorUnitTest.cs
blob: 6a635ba176b13cb94c628039f503dd710e6c9404 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using FluentAssertions;
using Timeline.Models.Validation;
using Xunit;

namespace Timeline.Tests
{
    public class UsernameValidatorUnitTest : IClassFixture<UsernameValidator>
    {
        private readonly UsernameValidator _validator;

        public UsernameValidatorUnitTest(UsernameValidator validator)
        {
            _validator = validator;
        }

        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().Be(ValidationConstants.SuccessMessage);
        }

        [Fact]
        public void Null()
        {
            FailAndMessage(null).Should().ContainEquivalentOf("null");
        }

        [Fact]
        public void NotString()
        {
            var result = _validator.Validate(123, out var message);
            result.Should().BeFalse();
            message.Should().ContainEquivalentOf("type");
        }

        [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");
        }
    }
}