Updated status message when adding files and related test

This commit is contained in:
cypherbeerus 2021-07-21 13:51:22 +05:30 committed by Andrew Camilleri
parent 590ca4ef56
commit a7f6bcf36c
3 changed files with 38 additions and 11 deletions

View file

@ -10,6 +10,7 @@ using BTCPayServer.Storage.Services.Providers.AzureBlobStorage.Configuration;
using BTCPayServer.Storage.Services.Providers.FileSystemStorage.Configuration; using BTCPayServer.Storage.Services.Providers.FileSystemStorage.Configuration;
using BTCPayServer.Storage.ViewModels; using BTCPayServer.Storage.ViewModels;
using BTCPayServer.Tests.Logging; using BTCPayServer.Tests.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Xunit; using Xunit;
@ -180,7 +181,10 @@ namespace BTCPayServer.Tests
private async Task CanUploadRemoveFiles(ServerController controller) private async Task CanUploadRemoveFiles(ServerController controller)
{ {
var fileContent = "content"; var fileContent = "content";
var uploadFormFileResult = Assert.IsType<RedirectToActionResult>(await controller.CreateFile(TestUtils.GetFormFile("uploadtestfile.txt", fileContent))); List<IFormFile> fileList = new List<IFormFile>();
fileList.Add(TestUtils.GetFormFile("uploadtestfile1.txt", fileContent));
var uploadFormFileResult = Assert.IsType<RedirectToActionResult>(await controller.CreateFiles(fileList));
Assert.True(uploadFormFileResult.RouteValues.ContainsKey("fileId")); Assert.True(uploadFormFileResult.RouteValues.ContainsKey("fileId"));
var fileId = uploadFormFileResult.RouteValues["fileId"].ToString(); var fileId = uploadFormFileResult.RouteValues["fileId"].ToString();
Assert.Equal("Files", uploadFormFileResult.ActionName); Assert.Equal("Files", uploadFormFileResult.ActionName);

View file

@ -148,25 +148,48 @@ namespace BTCPayServer.Controllers
[HttpPost("server/files/upload")] [HttpPost("server/files/upload")]
public async Task<IActionResult> CreateFile(List<IFormFile> files) public async Task<IActionResult> CreateFiles(List<IFormFile> files)
{ {
if (files.Count > 0) if (files != null && files.Count > 0)
{ {
int invalidFileNameCount = 0;
List<string> fileIds = new List<string>(); List<string> fileIds = new List<string>();
foreach (IFormFile file in files) foreach (IFormFile file in files)
{ {
if (!file.FileName.IsValidFileName()) if (!file.FileName.IsValidFileName())
{ {
this.TempData.SetStatusMessageModel(new StatusMessageModel() invalidFileNameCount++;
{
Message = "Invalid file name",
Severity = StatusMessageModel.StatusSeverity.Error
});
continue; continue;
} }
var newFile = await _FileService.AddFile(file, GetUserId()); var newFile = await _FileService.AddFile(file, GetUserId());
fileIds.Add(newFile.Id); fileIds.Add(newFile.Id);
} }
StatusMessageModel.StatusSeverity statusMessageSeverity;
string statusMessage;
if (invalidFileNameCount == 0)
{
statusMessage = "Files Added Successfully";
statusMessageSeverity = StatusMessageModel.StatusSeverity.Success;
}
else if (invalidFileNameCount > 0 && invalidFileNameCount < files.Count)
{
statusMessage = $"{files.Count - invalidFileNameCount} files were added. {invalidFileNameCount} files had invalid names";
statusMessageSeverity = StatusMessageModel.StatusSeverity.Error;
}
else
{
statusMessage = $"Files could not be added due to invalid names";
statusMessageSeverity = StatusMessageModel.StatusSeverity.Error;
}
this.TempData.SetStatusMessageModel(new StatusMessageModel()
{
Message = statusMessage,
Severity = statusMessageSeverity
});
if (fileIds.Count == 1) if (fileIds.Count == 1)
{ {
return RedirectToAction(nameof(Files), new return RedirectToAction(nameof(Files), new

View file

@ -92,9 +92,9 @@ else
@if (Model.StorageConfigured) @if (Model.StorageConfigured)
{ {
<form asp-action="CreateFile" method="post" enctype="multipart/form-data"> <form asp-action="CreateFiles" method="post" enctype="multipart/form-data">
<h4 class="mt-5 mb-3">Upload Files</h4> <h4 class="mt-5 mb-3">Upload Files</h4>
<input multiple type="file" class="form-control mb-3" name="files" id="file" required> <input multiple type="file" class="form-control mb-3" name="files" id="files" required>
<button class="btn btn-primary" role="button"><span class="fa fa-plus"></span> Upload files</button> <button class="btn btn-primary" role="button"><span class="fa fa-plus"></span> Upload files</button>
</form> </form>
} }