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 UserDetailEntity
{
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();
}
}
}
|