From b81a66ff49f5d9305108e92a009449ee5994862e Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 12 Nov 2020 20:03:31 +0800 Subject: test: Write tests for user permission service. --- .../Services/UserPermissionServiceTest.cs | 118 +++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs (limited to 'BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs') diff --git a/BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs b/BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs new file mode 100644 index 00000000..cea11b34 --- /dev/null +++ b/BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs @@ -0,0 +1,118 @@ +using FluentAssertions; +using System; +using System.Threading.Tasks; +using Timeline.Services; +using Timeline.Services.Exceptions; +using Xunit; + +namespace Timeline.Tests.Services +{ + public class UserPermissionServiceTest : DatabaseBasedTest + { + private UserPermissionService _service; + + public UserPermissionServiceTest() + { + + } + + protected override void OnDatabaseCreated() + { + _service = new UserPermissionService(Database); + } + + [Fact] + public async Task GetPermissionsOfRootUserShouldReturnAll() + { + var permission = await _service.GetPermissionsOfUserAsync(1); + permission.Should().BeEquivalentTo(Enum.GetValues()); + } + + [Fact] + public async Task GetPermissionsOfNonRootUserShouldReturnNone() + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEmpty(); + } + + [Fact] + public async Task GetPermissionsOfInexistentUserShouldThrow() + { + await _service.Awaiting(s => s.GetPermissionsOfUserAsync(10)).Should().ThrowAsync(); + } + + [Fact] + public async Task GetPermissionsOfInexistentUserShouldNotThrowIfNotCheck() + { + await _service.Awaiting(s => s.GetPermissionsOfUserAsync(10, false)).Should().NotThrowAsync(); + } + + [Fact] + public async Task ModifyPermissionOnRootUserShouldHaveNoEffect() + { + await _service.AddPermissionToUserAsync(1, UserPermission.AllTimelineManagement); + { + var permission = await _service.GetPermissionsOfUserAsync(1); + permission.Should().BeEquivalentTo(Enum.GetValues()); + } + await _service.RemovePermissionFromUserAsync(1, UserPermission.AllTimelineManagement); + { + var permission = await _service.GetPermissionsOfUserAsync(1); + permission.Should().BeEquivalentTo(Enum.GetValues()); + } + } + + [Fact] + public async Task ModifyPermissionOnNonRootUserShouldWork() + { + await _service.AddPermissionToUserAsync(2, UserPermission.AllTimelineManagement); + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEquivalentTo(UserPermission.AllTimelineManagement); + } + await _service.AddPermissionToUserAsync(2, UserPermission.HighlightTimelineManangement); + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEquivalentTo(UserPermission.AllTimelineManagement, UserPermission.HighlightTimelineManangement); + } + + // Add duplicate permission should work. + await _service.AddPermissionToUserAsync(2, UserPermission.HighlightTimelineManangement); + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEquivalentTo(UserPermission.AllTimelineManagement, UserPermission.HighlightTimelineManangement); + } + + await _service.RemovePermissionFromUserAsync(2, UserPermission.HighlightTimelineManangement); + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEquivalentTo(UserPermission.AllTimelineManagement); + } + + // Remove non-owned permission should work. + await _service.RemovePermissionFromUserAsync(2, UserPermission.HighlightTimelineManangement); + { + var permission = await _service.GetPermissionsOfUserAsync(2); + permission.Should().BeEquivalentTo(UserPermission.AllTimelineManagement); + } + } + + [Fact] + public async Task AddPermissionToInexistentUserShouldThrown() + { + await _service.Awaiting(s => s.AddPermissionToUserAsync(10, UserPermission.HighlightTimelineManangement)).Should().ThrowAsync(); + } + + [Fact] + public async Task RemovePermissionFromInexistentUserShouldThrown() + { + await _service.Awaiting(s => s.RemovePermissionFromUserAsync(10, UserPermission.HighlightTimelineManangement)).Should().ThrowAsync(); + } + + [Fact] + public async Task RemovePermissionFromInexistentUserShouldNotThrownIfNotCheck() + { + await _service.Awaiting(s => s.RemovePermissionFromUserAsync(10, UserPermission.HighlightTimelineManangement, false)).Should().NotThrowAsync(); + } + } +} -- cgit v1.2.3