Skip to content

Commit 63785dd

Browse files
committed
--amend
1 parent e48965c commit 63785dd

5 files changed

Lines changed: 50 additions & 69 deletions

File tree

TeachingRecordSystem/src/TeachingRecordSystem.SupportUi/Pages/Users/EditUser/Deactivate.cshtml.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ await dbContext.AddEventAndBroadcastAsync(new UserDeactivatedEvent
144144
});
145145

146146
await dbContext.SaveChangesAsync();
147-
TempData.SetFlashSuccess(message: $"{_user.Name}’s account has been deactivated.");
147+
TempData.SetFlashSuccess(message: $"{_user.Name}\u2019s account has been deactivated.");
148148

149149
return Redirect(linkGenerator.Users());
150150
}
@@ -164,6 +164,11 @@ public override async Task OnPageHandlerExecutionAsync(PageHandlerExecutingConte
164164

165165
public async Task<IActionResult> OnGetCancelAsync(Guid? evidenceFileId)
166166
{
167+
// If the user cancels after having uploaded a file but before submitting,
168+
// we want to delete the file to clean up after ourselves.
169+
// I've made it a GET rather than a POST as yes it does delete a file, but
170+
// the file isn't used by anything any more, and it's not the specific resource
171+
// logically corresponding to the URL that's being deleted (i.e. the user) - SS
167172
if (evidenceFileId.HasValue)
168173
{
169174
await fileService.DeleteFileAsync(evidenceFileId.Value);

TeachingRecordSystem/src/TeachingRecordSystem.SupportUi/Pages/Users/EditUser/Index.cshtml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ await dbContext.AddEventAndBroadcastAsync(new UserActivatedEvent
136136
});
137137

138138
await dbContext.SaveChangesAsync();
139-
TempData.SetFlashSuccess(message: $"{_user.Name}’s account has been reactivated.");
139+
TempData.SetFlashSuccess(message: $"{_user.Name}\u2019s account has been reactivated.");
140140

141141
return Redirect(linkGenerator.Users());
142142
}

TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.EndToEndTests/PageExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public static Task WaitForUrlPathAsync(this IPage page, string path) =>
99
{
1010
var asUri = new Uri(url);
1111
return asUri.LocalPath == path;
12-
}, new PageWaitForURLOptions { WaitUntil = WaitUntilState.DOMContentLoaded });
12+
}, new PageWaitForURLOptions { WaitUntil = WaitUntilState.Commit });
1313

1414
public static async Task GoToHomePageAsync(this IPage page)
1515
{

TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/HostFixture.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,6 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
6464
services.AddSingleton<TrsDataSyncHelper>();
6565
services.AddSingleton<IAuditRepository, TestableAuditRepository>();
6666
services.AddTestScoped<IFileService>(tss => tss.BlobStorageFileServiceMock.Object);
67-
//services.AddSingleton(GetMockFileService());
68-
69-
//IFileService GetMockFileService()
70-
//{
71-
// var fileService = new Mock<IFileService>();
72-
// fileService
73-
// .Setup(s => s.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null))
74-
// .ReturnsAsync(Guid.NewGuid());
75-
// fileService
76-
// .Setup(s => s.GetFileUrlAsync(It.IsAny<Guid>(), It.IsAny<TimeSpan>()))
77-
// .ReturnsAsync("https://fake.blob.core.windows.net/fake");
78-
// return fileService.Object;
79-
//}
8067
});
8168
}
8269

TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/PageTests/Users/EditUser/DeactivateTests.cs

Lines changed: 42 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -373,34 +373,6 @@ public async Task Post_UploadEvidenceSetToYes_ButEvidenceFileIsInvalidType_Rende
373373
Assert.Equal(StatusCodes.Status400BadRequest, (int)response.StatusCode);
374374
await AssertEx.HtmlResponseHasErrorAsync(response, "EvidenceFile", "The selected file must be a BMP, CSV, DOC, DOCX, EML, JPEG, JPG, MBOX, MSG, ODS, ODT, PDF, PNG, TIF, TXT, XLS or XLSX");
375375
}
376-
// data-testid="uploaded-evidence-link"
377-
//[Fact]
378-
//public async Task Post_UploadEvidenceSetToYes_EvidenceFileIsSelected_UploadsFile()
379-
//{
380-
// // Arrange
381-
// var user = await TestData.CreateUserAsync(role: UserRoles.AccessManager);
382-
// SetCurrentUser(user);
383-
384-
// var existingUser = await TestData.CreateUserAsync();
385-
386-
// var request = new HttpRequestMessage(HttpMethod.Post, GetRequestPath(existingUser.UserId))
387-
// {
388-
// Content = new MultipartFormDataContentBuilder
389-
// {
390-
// { "HasAdditionalReason", false },
391-
// { "HasMoreInformation", false },
392-
// { "UploadEvidence", true },
393-
// { "EvidenceFile", CreateEvidenceFileBinaryContent(), "validfile.png" },
394-
// }
395-
// };
396-
397-
// // Act
398-
// var response = await HttpClient.SendAsync(request);
399-
400-
// // Assert
401-
// Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
402-
// FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null));
403-
//}
404376

405377
[Fact]
406378
public async Task Post_UploadEvidenceSetToYes_AndEvidenceFileIsSelected_ButOtherFieldsInvalid_ShowsUploadedFile()
@@ -426,22 +398,19 @@ public async Task Post_UploadEvidenceSetToYes_AndEvidenceFileIsSelected_ButOther
426398

427399
// Assert
428400
Assert.Equal(StatusCodes.Status400BadRequest, (int)response.StatusCode);
429-
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null));
430-
Guid evidenceFileId = await Assert.IsType<Task<Guid>>(FileServiceMock.Invocations.FirstOrDefault(i => i.Method.Name == "UploadFileAsync")?.ReturnValue);
431-
var expectedFileUrl = $"{TestScopedServices.FakeBlobStorageFileUrlBase}{evidenceFileId}";
432401
var html = await AssertEx.HtmlResponseAsync(response, 400);
433402

403+
var evidenceFileId = AssertFileWasUploadedAsync();
404+
var expectedFileUrl = $"{TestScopedServices.FakeBlobStorageFileUrlBase}{evidenceFileId}";
405+
434406
var link = Assert.IsAssignableFrom<IHtmlAnchorElement>(html.GetElementByTestId("uploaded-evidence-file-link"));
435407
Assert.Equal("validfile.png (1.2 KB)", link.TextContent);
436408
Assert.Equal(expectedFileUrl, link.Href);
437409

438-
string GetHiddenInputValue(string name) =>
439-
Assert.IsAssignableFrom<IHtmlInputElement>(html.QuerySelector($@"input[type=""hidden""][name=""{name}""]")).Value;
440-
441-
Assert.Equal(evidenceFileId.ToString(), GetHiddenInputValue("EvidenceFileId"));
442-
Assert.Equal("validfile.png", GetHiddenInputValue("EvidenceFileName"));
443-
Assert.Equal("1.2 KB", GetHiddenInputValue("EvidenceFileSizeDescription"));
444-
Assert.Equal(expectedFileUrl, GetHiddenInputValue("UploadedEvidenceFileUrl"));
410+
Assert.Equal(evidenceFileId.ToString(), GetHiddenInputValue(html, "EvidenceFileId"));
411+
Assert.Equal("validfile.png", GetHiddenInputValue(html, "EvidenceFileName"));
412+
Assert.Equal("1.2 KB", GetHiddenInputValue(html, "EvidenceFileSizeDescription"));
413+
Assert.Equal(expectedFileUrl, GetHiddenInputValue(html, "UploadedEvidenceFileUrl"));
445414
}
446415

447416
[Fact]
@@ -472,21 +441,18 @@ public async Task Post_UploadEvidenceSetToYes_AndEvidenceFilePreviouslyUploaded_
472441

473442
// Assert
474443
Assert.Equal(StatusCodes.Status400BadRequest, (int)response.StatusCode);
444+
var html = await AssertEx.HtmlResponseAsync(response, 400);
475445

476446
var expectedFileUrl = $"{TestScopedServices.FakeBlobStorageFileUrlBase}{evidenceFileId}";
477-
var html = await AssertEx.HtmlResponseAsync(response, 400);
478447

479448
var link = Assert.IsAssignableFrom<IHtmlAnchorElement>(html.GetElementByTestId("uploaded-evidence-file-link"));
480449
Assert.Equal("testfile.jpg (3 KB)", link.TextContent);
481450
Assert.Equal("http://test.com/file", link.Href);
482451

483-
string GetHiddenInputValue(string name) =>
484-
Assert.IsAssignableFrom<IHtmlInputElement>(html.QuerySelector($@"input[type=""hidden""][name=""{name}""]")).Value;
485-
486-
Assert.Equal(evidenceFileId.ToString(), GetHiddenInputValue("EvidenceFileId"));
487-
Assert.Equal("testfile.jpg", GetHiddenInputValue("EvidenceFileName"));
488-
Assert.Equal("3 KB", GetHiddenInputValue("EvidenceFileSizeDescription"));
489-
Assert.Equal("http://test.com/file", GetHiddenInputValue("UploadedEvidenceFileUrl"));
452+
Assert.Equal(evidenceFileId.ToString(), GetHiddenInputValue(html, "EvidenceFileId"));
453+
Assert.Equal("testfile.jpg", GetHiddenInputValue(html, "EvidenceFileName"));
454+
Assert.Equal("3 KB", GetHiddenInputValue(html, "EvidenceFileSizeDescription"));
455+
Assert.Equal("http://test.com/file", GetHiddenInputValue(html, "UploadedEvidenceFileUrl"));
490456
}
491457

492458
[Fact]
@@ -516,7 +482,7 @@ public async Task Post_UploadEvidenceSetToYes_AndEvidenceFilePreviouslyUploaded_
516482
// Assert
517483
Assert.Equal(StatusCodes.Status400BadRequest, (int)response.StatusCode);
518484

519-
FileServiceMock.Verify(mock => mock.DeleteFileAsync(evidenceFileId));
485+
AssertFileWasDeleted(evidenceFileId);
520486
}
521487

522488
[Fact]
@@ -545,7 +511,7 @@ public async Task Post_UploadEvidenceSetToNo_ButEvidenceFilePreviouslyUploaded_A
545511
// Assert
546512
Assert.Equal(StatusCodes.Status400BadRequest, (int)response.StatusCode);
547513

548-
FileServiceMock.Verify(mock => mock.DeleteFileAsync(evidenceFileId));
514+
AssertFileWasDeleted(evidenceFileId);
549515
}
550516

551517
[Fact]
@@ -618,7 +584,7 @@ public async Task GetCancel_EvidenceFilePreviouslyUploaded_DeletesPreviouslyUplo
618584
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
619585
Assert.StartsWith($"/users/{existingUser.UserId}", response.Headers.Location?.OriginalString);
620586

621-
FileServiceMock.Verify(mock => mock.DeleteFileAsync(evidenceFileId));
587+
AssertFileWasDeleted(evidenceFileId);
622588
}
623589

624590
[Fact]
@@ -698,8 +664,7 @@ public async Task Post_ValidRequest_WithAdditionalReasonMoreInformationAndEviden
698664
Assert.NotNull(updatedUser);
699665
Assert.False(updatedUser.Active);
700666

701-
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null));
702-
Guid evidenceFileId = await Assert.IsType<Task<Guid>>(FileServiceMock.Invocations.FirstOrDefault(i => i.Method.Name == "UploadFileAsync")?.ReturnValue);
667+
var evidenceFileId = await AssertFileWasUploadedAsync();
703668

704669
EventPublisher.AssertEventsSaved(e =>
705670
{
@@ -747,7 +712,7 @@ public async Task Post_ValidRequest_WithPreviouslyUploadedEvidenceFile_Deactivat
747712
Assert.NotNull(updatedUser);
748713
Assert.False(updatedUser.Active);
749714

750-
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null), Times.Never);
715+
AssertFileWasNotUploaded();
751716

752717
EventPublisher.AssertEventsSaved(e =>
753718
{
@@ -797,7 +762,7 @@ public async Task Post_ValidRequest_WithAdditionalInfo_ButAdditionalInfoRadioBut
797762
Assert.NotNull(updatedUser);
798763
Assert.False(updatedUser.Active);
799764

800-
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null), Times.Never);
765+
AssertFileWasNotUploaded();
801766

802767
EventPublisher.AssertEventsSaved(e =>
803768
{
@@ -814,5 +779,29 @@ public async Task Post_ValidRequest_WithAdditionalInfo_ButAdditionalInfoRadioBut
814779
AssertEx.HtmlDocumentHasFlashSuccess(redirectDoc, expectedMessage: $"{existingUser.Name}’s account has been deactivated.");
815780
}
816781

782+
private async Task<Guid> AssertFileWasUploadedAsync()
783+
{
784+
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null));
785+
return await Assert.IsType<Task<Guid>>(FileServiceMock.Invocations.FirstOrDefault(i => i.Method.Name == "UploadFileAsync")?.ReturnValue);
786+
}
787+
788+
private void AssertFileWasNotUploaded()
789+
{
790+
FileServiceMock.Verify(mock => mock.UploadFileAsync(It.IsAny<Stream>(), It.IsAny<string?>(), null), Times.Never);
791+
}
792+
793+
private void AssertFileWasDeleted(Guid fileId)
794+
{
795+
FileServiceMock.Verify(mock => mock.DeleteFileAsync(fileId));
796+
}
797+
798+
private string GetHiddenInputValue(IHtmlDocument html, string name)
799+
{
800+
var element = html.QuerySelector($@"input[type=""hidden""][name=""{name}""]");
801+
var input = Assert.IsAssignableFrom<IHtmlInputElement>(element);
802+
803+
return input.Value;
804+
}
805+
817806
private static string GetRequestPath(Guid userId) => $"/users/{userId}/deactivate";
818807
}

0 commit comments

Comments
 (0)