From 181b53e270ff7c0558edec75b8b255d487e796c3 Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Fri, 25 Oct 2019 23:03:36 +0800 Subject: Add user detail service. --- Timeline.Tests/Services/UserDetailServiceTest.cs | 108 +++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Timeline.Tests/Services/UserDetailServiceTest.cs (limited to 'Timeline.Tests/Services/UserDetailServiceTest.cs') diff --git a/Timeline.Tests/Services/UserDetailServiceTest.cs b/Timeline.Tests/Services/UserDetailServiceTest.cs new file mode 100644 index 00000000..c7037c6e --- /dev/null +++ b/Timeline.Tests/Services/UserDetailServiceTest.cs @@ -0,0 +1,108 @@ +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 Timeline.Tests.Mock.Data; +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.DatabaseContext, NullLogger.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.DatabaseContext; + 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(); + } + + [Fact] + public async Task SetNickname_ShouldWork() + { + var username = MockUser.User.Username; + var user = await _testDatabase.DatabaseContext.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(); + } + } +} -- cgit v1.2.3