aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/UserDetailValidatorTest.cs
blob: 9b112946a90bd67e31ed033e7035393a0290a520 (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
93
94
95
96
97
using FluentAssertions;
using System.Collections.Generic;
using Timeline.Models.Validation;
using Xunit;

namespace Timeline.Tests
{
    public static class UserDetailValidatorsTest
    {
        private static void SucceedWith<TValidator>(object value) where TValidator : class, IValidator, new()
        {
            var result = new TValidator().Validate(value, out var message);
            result.Should().BeTrue();
            message.Should().Equals(ValidationConstants.SuccessMessage);
        }

        private static void FailWith<TValidator>(object value, params string[] messageContains) where TValidator : class, IValidator, new()
        {
            var result = new TValidator().Validate(value, out var message);
            result.Should().BeFalse();

            foreach (var m in messageContains)
            {
                message.Should().ContainEquivalentOf(m);
            }
        }

        public class QQ
        {
            [Theory]
            [InlineData(null)]
            [InlineData("")]
            [InlineData("12345678")]
            public void Success(object qq)
            {
                SucceedWith<UserDetailValidators.QQValidator>(qq);
            }

            [Theory]
            [InlineData(123, "type")]
            [InlineData("123", "short")]
            [InlineData("111111111111111111111111111111111111", "long")]
            [InlineData("aaaaaaaa", "digit")]
            public void Fail(object qq, string messageContains)
            {
                FailWith<UserDetailValidators.QQValidator>(qq, messageContains);
            }
        }

        public class EMail
        {
            [Theory]
            [InlineData(null)]
            [InlineData("")]
            [InlineData("aaa@aaa.net")]
            public void Success(object email)
            {
                SucceedWith<UserDetailValidators.EMailValidator>(email);
            }

            public static IEnumerable<object[]> FailTestData()
            {
                yield return new object[] { 123, "type" };
                yield return new object[] { new string('a', 100), "long" };
                yield return new object[] { "aaaaaaaa", "format" };
            }

            [Theory]
            [MemberData(nameof(FailTestData))]
            public void Fail(object email, string messageContains)
            {
                FailWith<UserDetailValidators.EMailValidator>(email, messageContains);
            }
        }

        public class PhoneNumber
        {
            [Theory]
            [InlineData(null)]
            [InlineData("")]
            [InlineData("12345678910")]
            public void Success(object phoneNumber)
            {
                SucceedWith<UserDetailValidators.PhoneNumberValidator>(phoneNumber);
            }

            [Theory]
            [InlineData(123, "type")]
            [InlineData("111111111111111111111111111111111111", "long")]
            [InlineData("aaaaaaaa", "digit")]
            public void Fail(object phoneNumber, string messageContains)
            {
                FailWith<UserDetailValidators.PhoneNumberValidator>(phoneNumber, messageContains);
            }
        }
    }
}