aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/UsernameValidatorUnitTest.cs
blob: e0f4633fc5e44248f41a6274e97e9af6cbf79f7d (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
using FluentAssertions;
using Timeline.Models.Validation;
using Timeline.Tests.Helpers;
using Xunit;

namespace Timeline.Tests
{
    [UseCulture("en")]
    public class UsernameValidatorUnitTest : IClassFixture<UsernameValidator>
    {
        private readonly UsernameValidator _validator;

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

        private string FailAndMessage(string username)
        {
            var (result, message) = _validator.Validate(username);
            result.Should().BeFalse();
            return message;
        }

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

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

        [Fact]
        public void Empty()
        {
            FailAndMessage("").Should().ContainEquivalentOf("empty");
        }

        [Theory]
        [InlineData("!")]
        [InlineData("!abc")]
        [InlineData("ab c")]
        public void BadCharactor(string value)
        {
            FailAndMessage(value).Should().ContainEquivalentOf("invalid")
                .And.ContainEquivalentOf("character");
        }

        [Fact]
        public void TooLong()
        {
            FailAndMessage(new string('a', 40)).Should().ContainEquivalentOf("long");
        }

        [Theory]
        [InlineData("abc")]
        [InlineData("-abc")]
        [InlineData("_abc")]
        [InlineData("abc-")]
        [InlineData("abc_")]
        [InlineData("a-bc")]
        [InlineData("a-b-c")]
        [InlineData("a-b_c")]
        public void Success(string value)
        {

            var (result, _) = _validator.Validate(value);
            result.Should().BeTrue();
        }
    }
}