diff --git a/SAMA.Tests.Unit/Web/Pages/Workspaces/EditModelTests.cs b/SAMA.Tests.Unit/Web/Pages/Workspaces/EditModelTests.cs index 7819fd0..f41a781 100644 --- a/SAMA.Tests.Unit/Web/Pages/Workspaces/EditModelTests.cs +++ b/SAMA.Tests.Unit/Web/Pages/Workspaces/EditModelTests.cs @@ -2,8 +2,8 @@ using Microsoft.AspNetCore.Mvc.RazorPages; using NSubstitute; using SAMA.Data; +using SAMA.Data.Entities; using SAMA.Tests.Unit.TestUtilities; -using SAMA.Web.Models; using SAMA.Web.Pages.Workspaces; using SAMA.Web.Services; using SAMA.Web.Services.Commands; @@ -31,19 +31,19 @@ public void Setup() } [TestMethod] - public async Task OnGetAsyncShouldReturnNotFoundWhenIdIsNull() + public async Task OnGetAsyncShouldRedirectWhenIdIsNull() { var result = await _pageModel.OnGetAsync(null); - Assert.IsInstanceOfType(result); + Assert.IsInstanceOfType(result); } [TestMethod] public async Task OnGetAsyncShouldReturnNotFoundWhenWorkspaceDoesNotExist() { var workspaceId = Guid.NewGuid(); - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(null)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(null)); var result = await _pageModel.OnGetAsync(workspaceId); @@ -54,21 +54,16 @@ public async Task OnGetAsyncShouldReturnNotFoundWhenWorkspaceDoesNotExist() public async Task OnGetAsyncShouldReturnPageWhenWorkspaceExists() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Test Workspace", Description = "Test Description", - IsPublic = true, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = true }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); var result = await _pageModel.OnGetAsync(workspaceId); @@ -79,21 +74,16 @@ public async Task OnGetAsyncShouldReturnPageWhenWorkspaceExists() public async Task OnGetAsyncShouldPopulateInputFromWorkspace() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Edit Workspace", Description = "Edit Description", - IsPublic = false, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = false }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); await _pageModel.OnGetAsync(workspaceId); @@ -107,25 +97,20 @@ public async Task OnGetAsyncShouldPopulateInputFromWorkspace() public async Task OnGetAsyncShouldSetViewDataForLayout() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Layout Workspace", Description = null, - IsPublic = true, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = true }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); await _pageModel.OnGetAsync(workspaceId); - Assert.AreEqual(workspaceId.ToString(), _pageModel.ViewData["WorkspaceId"]); + Assert.AreEqual(workspaceId.ToString("D"), _pageModel.ViewData["WorkspaceId"]); Assert.AreEqual("Layout Workspace", _pageModel.ViewData["WorkspaceName"]); Assert.AreEqual("Settings", _pageModel.ViewData["ActiveTab"]); } @@ -134,20 +119,15 @@ public async Task OnGetAsyncShouldSetViewDataForLayout() public async Task OnPostAsyncShouldReturnPageWhenModelStateIsInvalid() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Test Workspace", - IsPublic = false, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = false }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); _pageModel.Input = new EditModel.InputModel { Id = workspaceId }; _pageModel.ModelState.AddModelError("Input.Name", "Name is required"); @@ -277,20 +257,15 @@ public async Task OnPostAsyncShouldReturnBadRequestWhenUpdateFails() public async Task OnPostAsyncShouldNotCallUpdateWorkspaceAsyncWhenModelStateIsInvalid() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Test Workspace", - IsPublic = false, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = false }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); _pageModel.Input = new EditModel.InputModel { Id = workspaceId }; _pageModel.ModelState.AddModelError("Input.Name", "Name is required"); @@ -311,27 +286,22 @@ await _mockWorkspaceCommand.DidNotReceive().UpdateWorkspaceAsync( public async Task OnPostAsyncShouldRepopulateViewDataWhenValidationFails() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "Test Workspace", - IsPublic = false, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = false }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); _pageModel.Input = new EditModel.InputModel { Id = workspaceId }; _pageModel.ModelState.AddModelError("Input.Name", "Name is required"); await _pageModel.OnPostAsync(); - Assert.AreEqual(workspaceId.ToString(), _pageModel.ViewData["WorkspaceId"]); + Assert.AreEqual(workspaceId.ToString("D"), _pageModel.ViewData["WorkspaceId"]); Assert.AreEqual("Test Workspace", _pageModel.ViewData["WorkspaceName"]); Assert.AreEqual("Settings", _pageModel.ViewData["ActiveTab"]); } @@ -405,21 +375,16 @@ await _mockWorkspaceCommand.Received(1).UpdateWorkspaceAsync( public async Task OnGetAsyncShouldHandleWorkspaceWithoutDescription() { var workspaceId = Guid.NewGuid(); - var workspace = new WorkspaceDetailsViewModel + var workspace = new Workspace { Id = workspaceId, Name = "No Description", Description = null, - IsPublic = true, - CreatedAt = DateTimeOffset.UtcNow, - UpdatedAt = DateTimeOffset.UtcNow, - CheckCount = 0, - NotificationChannelCount = 0, - UserCount = 0 + IsPublic = true }; - _mockWorkspaceQuery.GetWorkspaceDetailsAsync(workspaceId, Arg.Any()) - .Returns(Task.FromResult(workspace)); + _mockWorkspaceQuery.GetWorkspaceByIdAsync(workspaceId) + .Returns(Task.FromResult(workspace)); await _pageModel.OnGetAsync(workspaceId); diff --git a/SAMA.Web/Pages/Admin/Settings.cshtml b/SAMA.Web/Pages/Admin/Settings.cshtml index 656db12..90036c2 100644 --- a/SAMA.Web/Pages/Admin/Settings.cshtml +++ b/SAMA.Web/Pages/Admin/Settings.cshtml @@ -1,10 +1,10 @@ @page @model SAMA.Web.Pages.Admin.SettingsModel @{ - ViewData["Title"] = "System Settings"; + ViewData["Title"] = "System Options"; } - +
diff --git a/SAMA.Web/Pages/Admin/Users/Edit.cshtml b/SAMA.Web/Pages/Admin/Users/Edit.cshtml index 83ef9d6..87fca60 100644 --- a/SAMA.Web/Pages/Admin/Users/Edit.cshtml +++ b/SAMA.Web/Pages/Admin/Users/Edit.cshtml @@ -40,7 +40,7 @@ Administrator - Full system access
- Admins can manage all workspaces, users, and system settings + Admins can manage all workspaces, users, and system options
diff --git a/SAMA.Web/Pages/Shared/WorkspacePageModel.cs b/SAMA.Web/Pages/Shared/WorkspacePageModel.cs index 6b66cf3..d60d8ed 100644 --- a/SAMA.Web/Pages/Shared/WorkspacePageModel.cs +++ b/SAMA.Web/Pages/Shared/WorkspacePageModel.cs @@ -53,9 +53,9 @@ public WorkspacePageModel(WorkspaceQueryService workspaceQueryService) WorkspaceName = workspace.Name; var userId = User.GetUserId(); - var canEdit = userId.HasValue && HttpContext.RequestServices + var canEdit = userId.HasValue && await HttpContext.RequestServices .GetRequiredService() - .CanEditWorkspace(userId.Value, workspace.Id).Result; + .CanEditWorkspace(userId.Value, workspace.Id); ViewData["WorkspaceId"] = workspace.Id.ToString("D"); ViewData["WorkspaceName"] = workspace.Name; diff --git a/SAMA.Web/Pages/Shared/_Layout.cshtml b/SAMA.Web/Pages/Shared/_Layout.cshtml index e85da64..c359414 100644 --- a/SAMA.Web/Pages/Shared/_Layout.cshtml +++ b/SAMA.Web/Pages/Shared/_Layout.cshtml @@ -39,7 +39,7 @@ Users }