From 2c6b812382e04956793d90ba4148dd4aa7da3b70 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. --- .../Timeline.Tests/Services/DatabaseBasedTest.cs | 12 ++- .../Services/UserPermissionServiceTest.cs | 118 +++++++++++++++++++++ .../Timeline.Tests/Services/UserPermissionTest.cs | 28 ----- 3 files changed, 125 insertions(+), 33 deletions(-) create mode 100644 BackEnd/Timeline.Tests/Services/UserPermissionServiceTest.cs delete mode 100644 BackEnd/Timeline.Tests/Services/UserPermissionTest.cs (limited to 'BackEnd/Timeline.Tests/Services') diff --git a/BackEnd/Timeline.Tests/Services/DatabaseBasedTest.cs b/BackEnd/Timeline.Tests/Services/DatabaseBasedTest.cs index 838787e9..7c97158c 100644 --- a/BackEnd/Timeline.Tests/Services/DatabaseBasedTest.cs +++ b/BackEnd/Timeline.Tests/Services/DatabaseBasedTest.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Threading.Tasks; using Timeline.Entities; using Timeline.Tests.Helpers; using Xunit; @@ -10,9 +7,14 @@ namespace Timeline.Tests.Services { public abstract class DatabaseBasedTest : IAsyncLifetime { - protected TestDatabase TestDatabase { get; } = new TestDatabase(); + protected TestDatabase TestDatabase { get; } protected DatabaseContext Database { get; private set; } + protected DatabaseBasedTest(bool databaseCreateUsers = true) + { + TestDatabase = new TestDatabase(databaseCreateUsers); + } + public async Task InitializeAsync() { await TestDatabase.InitializeAsync(); 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(); + } + } +} diff --git a/BackEnd/Timeline.Tests/Services/UserPermissionTest.cs b/BackEnd/Timeline.Tests/Services/UserPermissionTest.cs deleted file mode 100644 index 4bcbc633..00000000 --- a/BackEnd/Timeline.Tests/Services/UserPermissionTest.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -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 UserPermissionTest : DatabaseBasedTest - { - private UserPermissionService _service; - - public UserPermissionTest() - { - - } - - protected override void OnDatabaseCreated() - { - _service = new UserPermissionService(Database); - } - - - } -} -- cgit v1.2.3