diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/AuthClient.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/AuthClient.cs index f925f3464..d65c19773 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/AuthClient.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/AuthClient.cs @@ -5,12 +5,13 @@ namespace Masa.Contrib.BasicAbility.Auth; public class AuthClient : IAuthClient { - public AuthClient(ICallerProvider callerProvider) + public AuthClient(ICallerProvider callerProvider, IMultiEnvironmentUserContext userContext) { - UserService = new UserService(callerProvider); + UserService = new UserService(callerProvider, userContext); SubjectService = new SubjectService(callerProvider); TeamService = new TeamService(callerProvider); - PermissionService = new PermissionService(callerProvider); + ProjectService = new ProjectService(callerProvider, userContext); + PermissionService = new PermissionService(callerProvider, userContext); } public IUserService UserService { get; } @@ -20,5 +21,7 @@ public AuthClient(ICallerProvider callerProvider) public ITeamService TeamService { get; } public IPermissionService PermissionService { get; } + + public IProjectService ProjectService { get; } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/EnvironmentProvider.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/EnvironmentProvider.cs index a9db17500..794133c33 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/EnvironmentProvider.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/EnvironmentProvider.cs @@ -5,8 +5,15 @@ namespace Masa.Contrib.BasicAbility.Auth; public class EnvironmentProvider : IEnvironmentProvider { + readonly IMultiEnvironmentUserContext _multiEnvironmentUserContext; + + public EnvironmentProvider(IMultiEnvironmentUserContext multiEnvironmentUserContext) + { + _multiEnvironmentUserContext = multiEnvironmentUserContext; + } + public string GetEnvironment() { - return "development"; + return _multiEnvironmentUserContext.Environment ?? ""; } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Masa.Contrib.BasicAbility.Auth.csproj b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Masa.Contrib.BasicAbility.Auth.csproj index 8b8c42b2c..68cab7db7 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Masa.Contrib.BasicAbility.Auth.csproj +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Masa.Contrib.BasicAbility.Auth.csproj @@ -15,6 +15,7 @@ + diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/PermissionService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/PermissionService.cs index f0c755338..55936034e 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/PermissionService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/PermissionService.cs @@ -6,30 +6,70 @@ namespace Masa.Contrib.BasicAbility.Auth.Service; public class PermissionService : IPermissionService { readonly ICallerProvider _callerProvider; + readonly IUserContext _userContext; - const string PARTY = "api/permission/"; + const string PART = "api/permission/"; - public PermissionService(ICallerProvider callerProvider) + public PermissionService(ICallerProvider callerProvider, IUserContext userContext) { _callerProvider = callerProvider; + _userContext = userContext; } //todo remove userId param - public async Task AuthorizedAsync(string appId, string code, Guid userId) + public async Task AuthorizedAsync(string appId, string code) { - var requestUri = $"{PARTY}authorized?appId={appId}&code={code}&userId={userId}"; + var userId = _userContext.GetUserId(); + var requestUri = $"{PART}authorized?appId={appId}&code={code}&userId={userId}"; return await _callerProvider.GetAsync(requestUri); } - public async Task> GetMenusAsync(string appId, Guid userId) + public async Task> GetMenusAsync(string appId) { - var requestUri = $"{PARTY}menus?appId={appId}&userId={userId}"; + var userId = _userContext.GetUserId(); + var requestUri = $"{PART}menus?appId={appId}&userId={userId}"; return await _callerProvider.GetAsync>(requestUri, default) ?? new(); } - public async Task> GetElementPermissionsAsync(string appId, Guid userId) + public async Task> GetElementPermissionsAsync(string appId) { - var requestUri = $"{PARTY}element-permissions?appId={appId}&userId={userId}"; + var userId = _userContext.GetUserId(); + var requestUri = $"{PART}element-permissions?appId={appId}&userId={userId}"; return await _callerProvider.GetAsync>(requestUri, default) ?? new(); } + + public async Task AddFavoriteMenuAsync(Guid menuId) + { + try + { + var userId = _userContext.GetUserId(); + await _callerProvider.PutAsync($"{PART}addFavoriteMenu?permissionId={menuId}&userId={userId}", null); + return true; + } + catch + { + return false; + } + } + + public async Task RemoveFavoriteMenuAsync(Guid menuId) + { + try + { + var userId = _userContext.GetUserId(); + await _callerProvider.PutAsync($"{PART}removeFavoriteMenu?permissionId={menuId}&userId={userId}", null); + return true; + } + catch + { + return false; + } + } + + public async Task> GetFavoriteMenuListAsync() + { + var userId = _userContext.GetUserId(); + var requestUri = $"{PART}menu-favorite-list?userId={userId}"; + return await _callerProvider.GetAsync>(requestUri, default) ?? new(); + } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/ProjectService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/ProjectService.cs new file mode 100644 index 000000000..ef4d19778 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/ProjectService.cs @@ -0,0 +1,26 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Auth.Service; + +public class ProjectService : IProjectService +{ + readonly ICallerProvider _callerProvider; + readonly IMultiEnvironmentUserContext _multiEnvironmentUserContext; + + const string PARTY = "api/project/"; + + public ProjectService(ICallerProvider callerProvider, IMultiEnvironmentUserContext multiEnvironmentUserContext) + { + _callerProvider = callerProvider; + _multiEnvironmentUserContext = multiEnvironmentUserContext; + } + + public async Task> GetGlobalNavigations() + { + var userId = _multiEnvironmentUserContext.GetUserId(); + var environment = _multiEnvironmentUserContext.Environment ?? ""; + var requestUri = $"{PARTY}navigations?userId={userId}&environment={environment}"; + return await _callerProvider.GetAsync>(requestUri) ?? new(); + } +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/UserService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/UserService.cs index e538218d7..675073728 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/UserService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/Service/UserService.cs @@ -6,10 +6,12 @@ namespace Masa.Contrib.BasicAbility.Auth.Service; public class UserService : IUserService { readonly ICallerProvider _callerProvider; + readonly IUserContext _userContext; - public UserService(ICallerProvider callerProvider) + public UserService(ICallerProvider callerProvider, IUserContext userContext) { _callerProvider = callerProvider; + _userContext = userContext; } public async Task AddAsync(AddUserModel user) @@ -47,5 +49,19 @@ public async Task FindByAccountAsync(string account) var requestUri = $"api/user/findByAccount"; return await _callerProvider.GetAsync(requestUri, new { account = account }) ?? new(); } + + public async Task VisitedAsync(string url) + { + var userId = _userContext.GetUserId(); + var requestUri = $"api/user/visit"; + await _callerProvider.PostAsync(requestUri, new { UserId = userId, Url = url }, true); + } + + public async Task> GetUserVisitedListAsync() + { + var userId = _userContext.GetUserId(); + var requestUri = $"api/user/visitedList"; + return (await _callerProvider.GetAsync>(requestUri, new { userId = userId })) ?? new(); + } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/ServiceCollectionExtensions.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/ServiceCollectionExtensions.cs index c72e4be5b..96d36313f 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/ServiceCollectionExtensions.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/ServiceCollectionExtensions.cs @@ -8,7 +8,8 @@ public static class ServiceCollectionExtensions public static IServiceCollection AddAuthClient(this IServiceCollection services, string authServiceBaseAddress) { ArgumentNullException.ThrowIfNull(authServiceBaseAddress, nameof(authServiceBaseAddress)); - +#warning modify + services.AddSingleton(); return services.AddAuthClient(callerOptions => { callerOptions.UseHttpClient(builder => @@ -23,15 +24,21 @@ public static IServiceCollection AddAuthClient(this IServiceCollection services, { ArgumentNullException.ThrowIfNull(callerOptions, nameof(callerOptions)); + if (!services.Any(service => service.ServiceType == typeof(IMultiEnvironmentUserContext))) + { + throw new Exception("Please add IMultiEnvironmentUserContext first."); + } + services.AddHttpContextAccessor(); services.AddScoped(); - services.AddSingleton(); + services.AddScoped(); services.AddCaller(callerOptions); services.AddScoped(serviceProvider => { + var userContext = serviceProvider.GetRequiredService(); var callProvider = serviceProvider.GetRequiredService().CreateClient(DEFAULT_CLIENT_NAME); - var authClient = new AuthClient(callProvider); + var authClient = new AuthClient(callProvider, userContext); return authClient; }); diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/_Imports.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/_Imports.cs index bf9e27577..777189e42 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/_Imports.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Auth/_Imports.cs @@ -4,6 +4,7 @@ global using Masa.BuildingBlocks.BasicAbility.Auth; global using Masa.BuildingBlocks.BasicAbility.Auth.Model; global using Masa.BuildingBlocks.BasicAbility.Auth.Service; +global using Masa.BuildingBlocks.Identity.IdentityModel; global using Masa.Contrib.BasicAbility.Auth; global using Masa.Contrib.BasicAbility.Auth.Service; global using Masa.Utils.Caller.Core; diff --git a/src/BuildingBlocks/MASA.BuildingBlocks b/src/BuildingBlocks/MASA.BuildingBlocks index 244cc211a..68ac2eb80 160000 --- a/src/BuildingBlocks/MASA.BuildingBlocks +++ b/src/BuildingBlocks/MASA.BuildingBlocks @@ -1 +1 @@ -Subproject commit 244cc211aa5ae2c203144c2a442fa6febcb8667f +Subproject commit 68ac2eb802fb0dc934896c57f66d69fdd1b35256 diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/AuthClientTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/AuthClientTest.cs index 195a5d238..5fe6bc532 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/AuthClientTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/AuthClientTest.cs @@ -1,3 +1,8 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using Masa.BuildingBlocks.Identity.IdentityModel; + namespace Masa.Contrib.BasicAbility.Auth.Tests; [TestClass] @@ -7,12 +12,21 @@ public class AuthClientTest public void TestAddAuthClient() { var services = new ServiceCollection(); + services.AddMasaIdentityModel(IdentityType.MultiEnvironment); services.AddAuthClient("https://localhost:18102"); var authClient = services.BuildServiceProvider().GetRequiredService(); Assert.IsNotNull(authClient); } + [TestMethod] + public void TestAddAuthClientNoAddMasaIdentity() + { + var services = new ServiceCollection(); + Assert.ThrowsException(() => services.AddAuthClient("https://localhost:18102"), + "Please add IMultiEnvironmentUserContext first."); + } + [TestMethod] public void TestAddAuthClientShouldThrowArgumentNullException() { @@ -24,7 +38,6 @@ public void TestAddAuthClientShouldThrowArgumentNullException() public void TestAddAuthClientShouldThrowArgumentNullException2() { var services = new ServiceCollection(); - Assert.ThrowsException(() => services.AddAuthClient(callerOptions: null!)); } } diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/BaseAuthTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/BaseAuthTest.cs index a78c0d33d..75abebce7 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/BaseAuthTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/BaseAuthTest.cs @@ -1,6 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.BuildingBlocks.Identity.IdentityModel; + namespace Masa.Contrib.BasicAbility.Auth.Tests { public class BaseAuthTest @@ -9,6 +11,7 @@ public class BaseAuthTest public void Initialize() { IServiceCollection service = new ServiceCollection(); + service.AddMasaIdentityModel(IdentityType.MultiEnvironment); service.AddAuthClient("https://localhost:18102"); var authClient = service.BuildServiceProvider().GetRequiredService(); } diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/Masa.Contrib.BasicAbility.Auth.Tests.csproj b/test/Masa.Contrib.BasicAbility.Auth.Tests/Masa.Contrib.BasicAbility.Auth.Tests.csproj index d97c6425c..f304b81af 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/Masa.Contrib.BasicAbility.Auth.Tests.csproj +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/Masa.Contrib.BasicAbility.Auth.Tests.csproj @@ -18,6 +18,7 @@ + diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/PermissionServiceTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/PermissionServiceTest.cs index 99e425748..bcc7ada75 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/PermissionServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/PermissionServiceTest.cs @@ -1,49 +1,110 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.BuildingBlocks.Identity.IdentityModel; +using Masa.Contrib.BasicAbility.Auth.Service; + namespace Masa.Contrib.BasicAbility.Auth.Tests; [TestClass] public class PermissionServiceTest : BaseAuthTest { [TestMethod] - [DataRow("app1", "A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1")] - public async Task TestGetMenusAsync(string appId, string userId) + [DataRow("app1")] + public async Task TestGetMenusAsync(string appId) { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); var data = new List(); var requestUri = $"api/permission/menus?appId={appId}&userId={userId}"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.PermissionService.GetMenusAsync(appId, Guid.Parse(userId)); - callerProvider.Verify(provider => provider.GetAsync>(It.IsAny(), default), Times.Once); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.GetMenusAsync(appId); + userContext.Verify(user => user.GetUserId(), Times.Once); Assert.IsTrue(result is not null); } [TestMethod] - [DataRow("app1", "code", "A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1")] - public async Task TestAuthorizedAsync(string appId, string code, string userId) + [DataRow("app1", "code")] + public async Task TestAuthorizedAsync(string appId, string code) { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); var data = false; var requestUri = $"api/permission/authorized?code={code}&userId={userId}"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync(requestUri, default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.PermissionService.AuthorizedAsync(appId, code, Guid.Parse(userId)); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.AuthorizedAsync(appId, code); callerProvider.Verify(provider => provider.GetAsync(It.IsAny(), default), Times.Once); } [TestMethod] - [DataRow("app1", "A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1")] - public async Task TestGetElementPermissionsAsync(string appId, string userId) + [DataRow("app1")] + public async Task TestGetElementPermissionsAsync(string appId) { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); var data = new List(); var requestUri = $"api/permission/element-permissions?appId={appId}&userId={userId}"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.PermissionService.GetElementPermissionsAsync(appId, Guid.Parse(userId)); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.GetElementPermissionsAsync(appId); callerProvider.Verify(provider => provider.GetAsync>(It.IsAny(), default), Times.Once); Assert.IsTrue(result is not null); } + + [TestMethod] + [DataRow("225082D3-CC88-48D2-3C27-08DA3ED8F4B7")] + public async Task TestGetFavoriteMenuListAsync(string menuId) + { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var data = new List(); + var requestUri = $"api/permission/menu-favorite-list?userId={userId}"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.GetAsync>(requestUri, default)).ReturnsAsync(data).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.GetFavoriteMenuListAsync(); + callerProvider.Verify(provider => provider.GetAsync>(requestUri, default), Times.Once); + Assert.IsTrue(result is not null); + } + + [TestMethod] + [DataRow("225082D3-CC88-48D2-3C27-08DA3ED8F4B7")] + public async Task TestAddFavoriteMenuAsync(string menuId) + { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var requestUri = $"api/permission/addFavoriteMenu?permissionId={Guid.Parse(menuId)}&userId={userId}"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, null, true, default)).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.AddFavoriteMenuAsync(Guid.Parse(menuId)); + callerProvider.Verify(provider => provider.PutAsync(requestUri, null, true, default), Times.Once); + Assert.IsTrue(result); + } + + [TestMethod] + [DataRow("225082D3-CC88-48D2-3C27-08DA3ED8F4B7")] + public async Task TestRemoveFavoriteMenuAsync(string menuId) + { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var requestUri = $"api/permission/removeFavoriteMenu?permissionId={Guid.Parse(menuId)}&userId={userId}"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, null, true, default)).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var permissionService = new PermissionService(callerProvider.Object, userContext.Object); + var result = await permissionService.RemoveFavoriteMenuAsync(Guid.Parse(menuId)); + callerProvider.Verify(provider => provider.PutAsync(requestUri, null, true, default), Times.Once); + Assert.IsTrue(result); + } } diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/ProjectServiceTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/ProjectServiceTest.cs new file mode 100644 index 000000000..1e416327a --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/ProjectServiceTest.cs @@ -0,0 +1,31 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using Masa.BuildingBlocks.Identity.IdentityModel; +using Masa.Contrib.BasicAbility.Auth.Service; + +namespace Masa.Contrib.BasicAbility.Auth.Tests; + +[TestClass] +public class ProjectServiceTest : BaseAuthTest +{ + [TestMethod] + public async Task TestGetGlobalNavigationsAsync() + { + var data = new List() + { + new ProjectModel() + }; + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var requestUri = $"api/project/navigations?userId={userId}&environment=development"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.GetAsync>(requestUri, default)).ReturnsAsync(data).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + userContext.SetupGet(user => user.Environment).Returns("development"); + var projectService = new Mock(callerProvider.Object, userContext.Object); + var result = await projectService.Object.GetGlobalNavigations(); + callerProvider.Verify(provider => provider.GetAsync>(requestUri, default), Times.Once); + Assert.IsTrue(result.Count == 1); + } +} diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/SubjectServiceTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/SubjectServiceTest.cs index 6e050d080..f2a1bcaf5 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/SubjectServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/SubjectServiceTest.cs @@ -1,6 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Contrib.BasicAbility.Auth.Service; + namespace Masa.Contrib.BasicAbility.Auth.Tests; [TestClass] @@ -17,8 +19,8 @@ public async Task TestGetListAsync() var requestUri = $"api/subject/list"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.SubjectService.GetListAsync(filter); + var subjectService = new Mock(callerProvider.Object); + var result = await subjectService.Object.GetListAsync(filter); callerProvider.Verify(provider => provider.GetAsync>(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result.Count == 1); } diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/TeamServiceTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/TeamServiceTest.cs index 72bd858e7..c6411c7c4 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/TeamServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/TeamServiceTest.cs @@ -1,6 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Contrib.BasicAbility.Auth.Service; + namespace Masa.Contrib.BasicAbility.Auth.Tests; [TestClass] @@ -14,8 +16,8 @@ public async Task TestGetDetailAsync() var requestUri = $"api/team/detail"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.TeamService.GetDetailAsync(teamId); + var teamService = new Mock(callerProvider.Object); + var result = await teamService.Object.GetDetailAsync(teamId); callerProvider.Verify(provider => provider.GetAsync(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result is not null); } @@ -27,8 +29,8 @@ public async Task TestGetListAsync() var requestUri = $"api/team/list"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.TeamService.GetListAsync(); + var teamService = new Mock(callerProvider.Object); + var result = await teamService.Object.GetListAsync(); callerProvider.Verify(provider => provider.GetAsync>(requestUri, default), Times.Once); Assert.IsTrue(result is not null); } diff --git a/test/Masa.Contrib.BasicAbility.Auth.Tests/UserServiceTest.cs b/test/Masa.Contrib.BasicAbility.Auth.Tests/UserServiceTest.cs index 6be9c3309..7ca753cb0 100644 --- a/test/Masa.Contrib.BasicAbility.Auth.Tests/UserServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Auth.Tests/UserServiceTest.cs @@ -1,6 +1,9 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.BuildingBlocks.Identity.IdentityModel; +using Masa.Contrib.BasicAbility.Auth.Service; + namespace Masa.Contrib.BasicAbility.Auth.Tests; [TestClass] @@ -14,8 +17,9 @@ public async Task TestAddAsync() var requestUri = $"api/user/addExternal"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, addUser, default)).ReturnsAsync(user).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.AddAsync(addUser); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.AddAsync(addUser); callerProvider.Verify(provider => provider.PostAsync(requestUri, addUser, default), Times.Once); Assert.IsTrue(result is not null); } @@ -31,8 +35,9 @@ public async Task TestGetListByDepartmentAsync() var requestUri = $"api/staff/getListByDepartment"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.GetListByDepartmentAsync(departmentId); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.GetListByDepartmentAsync(departmentId); callerProvider.Verify(provider => provider.GetAsync>(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result.Count == 1); } @@ -48,8 +53,9 @@ public async Task TestGetListByTeamAsync() var requestUri = $"api/staff/getListByTeam"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.GetListByTeamAsync(teamId); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.GetListByTeamAsync(teamId); callerProvider.Verify(provider => provider.GetAsync>(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result.Count == 1); } @@ -65,8 +71,9 @@ public async Task TestGetListByRoleAsync() var requestUri = $"api/staff/getListByRole"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync>(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.GetListByRoleAsync(roleId); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.GetListByRoleAsync(roleId); callerProvider.Verify(provider => provider.GetAsync>(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result.Count == 1); } @@ -80,8 +87,9 @@ public async Task TestValidateCredentialsByAccountAsync(string account, string p var requestUri = $"api/user/validateByAccount"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.ValidateCredentialsByAccountAsync(account, password); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.ValidateCredentialsByAccountAsync(account, password); callerProvider.Verify(provider => provider.PostAsync(requestUri, It.IsAny(), default), Times.Once); } @@ -93,10 +101,42 @@ public async Task TestFindByAccountAsync(string account) var requestUri = $"api/user/findByAccount"; var callerProvider = new Mock(); callerProvider.Setup(provider => provider.GetAsync(requestUri, It.IsAny(), default)).ReturnsAsync(data).Verifiable(); - var authClient = new AuthClient(callerProvider.Object); - var result = await authClient.UserService.FindByAccountAsync(account); + var userContext = new Mock(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.FindByAccountAsync(account); callerProvider.Verify(provider => provider.GetAsync(requestUri, It.IsAny(), default), Times.Once); Assert.IsTrue(result is not null); } + + [TestMethod] + [DataRow("https://www.baidu.com/")] + public async Task TestVisitedAsync(string url) + { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var requestUri = $"api/user/visit"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, new { UserId = userId, Url = url }, true, default)).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var userService = new UserService(callerProvider.Object, userContext.Object); + await userService.VisitedAsync(url); + callerProvider.Verify(provider => provider.PostAsync(requestUri, It.IsAny(), true, default), Times.Once); + } + + [TestMethod] + public async Task TestGetUserVisitedListAsync() + { + var userId = Guid.Parse("A9C8E0DD-1E9C-474D-8FE7-8BA9672D53D1"); + var data = new List(); + var requestUri = $"api/user/visitedList"; + var callerProvider = new Mock(); + callerProvider.Setup(provider => provider.GetAsync>(requestUri, new { userId = userId }, default)).ReturnsAsync(data).Verifiable(); + var userContext = new Mock(); + userContext.Setup(user => user.GetUserId()).Returns(userId).Verifiable(); + var userService = new UserService(callerProvider.Object, userContext.Object); + var result = await userService.GetUserVisitedListAsync(); + callerProvider.Verify(provider => provider.GetAsync>(requestUri, It.IsAny(), default), Times.Once); + Assert.IsTrue(result is not null); + } }