aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/Services/UserDetailServiceTest.cs
blob: 9a869c8978e9267213f50b20fcfee116c2466883 (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
98
99
100
101
102
103
104
105
106
107
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System.Linq;
using System.Threading.Tasks;
using Timeline.Entities;
using Timeline.Services;
using Timeline.Tests.Helpers;
using Xunit;

namespace Timeline.Tests.Services
{
    public class UserDetailServiceTest : IDisposable
    {
        private readonly TestDatabase _testDatabase;

        private readonly UserDetailService _service;

        public UserDetailServiceTest()
        {
            _testDatabase = new TestDatabase();
            _service = new UserDetailService(_testDatabase.Context, NullLogger<UserDetailService>.Instance);
        }

        public void Dispose()
        {
            _testDatabase.Dispose();
        }

        [Theory]
        [InlineData(null, typeof(ArgumentNullException))]
        [InlineData("", typeof(UsernameBadFormatException))]
        [InlineData("a!a", typeof(UsernameBadFormatException))]
        [InlineData("usernotexist", typeof(UserNotExistException))]
        public async Task GetNickname_ShouldThrow(string username, Type exceptionType)
        {
            await _service.Awaiting(s => s.GetNickname(username)).Should().ThrowAsync(exceptionType);
        }

        [Fact]
        public async Task GetNickname_ShouldReturnUsername()
        {
            var result = await _service.GetNickname(MockUser.User.Username);
            result.Should().Be(MockUser.User.Username);
        }

        [Fact]
        public async Task GetNickname_ShouldReturnData()
        {
            const string nickname = "aaaaaa";
            {
                var context = _testDatabase.Context;
                var userId = (await context.Users.Where(u => u.Name == MockUser.User.Username).Select(u => new { u.Id }).SingleAsync()).Id;
                context.UserDetails.Add(new UserDetail
                {
                    Nickname = nickname,
                    UserId = userId
                });
                await context.SaveChangesAsync();
            }
            var result = await _service.GetNickname(MockUser.User.Username);
            result.Should().Be(nickname);
        }

        [Theory]
        [InlineData(null, typeof(ArgumentNullException))]
        [InlineData("", typeof(UsernameBadFormatException))]
        [InlineData("a!a", typeof(UsernameBadFormatException))]
        [InlineData("usernotexist", typeof(UserNotExistException))]
        public async Task SetNickname_ShouldThrow(string username, Type exceptionType)
        {
            await _service.Awaiting(s => s.SetNickname(username, null)).Should().ThrowAsync(exceptionType);
        }

        [Fact]
        public async Task SetNickname_ShouldThrow_ArgumentException()
        {
            await _service.Awaiting(s => s.SetNickname("uuu", new string('a', 50))).Should().ThrowAsync<ArgumentException>();
        }

        [Fact]
        public async Task SetNickname_ShouldWork()
        {
            var username = MockUser.User.Username;
            var user = await _testDatabase.Context.Users.Where(u => u.Name == username).Include(u => u.Detail).SingleAsync();

            var nickname1 = "nickname1";
            var nickname2 = "nickname2";

            await _service.SetNickname(username, null);
            user.Detail.Should().BeNull();

            await _service.SetNickname(username, nickname1);
            user.Detail.Should().NotBeNull();
            user.Detail.Nickname.Should().Be(nickname1);

            await _service.SetNickname(username, nickname2);
            user.Detail.Should().NotBeNull();
            user.Detail.Nickname.Should().Be(nickname2);

            await _service.SetNickname(username, null);
            user.Detail.Should().NotBeNull();
            user.Detail.Nickname.Should().BeNull();
        }
    }
}