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.ViewModels;
using BTCPayServer.Tests.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Xunit;
@ -180,7 +181,10 @@ namespace BTCPayServer.Tests
private async Task CanUploadRemoveFiles(ServerController controller)
{
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"));
var fileId = uploadFormFileResult.RouteValues["fileId"].ToString();
Assert.Equal("Files", uploadFormFileResult.ActionName);

View file

@ -148,25 +148,48 @@ namespace BTCPayServer.Controllers
[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>();
foreach (IFormFile file in files)
{
if (!file.FileName.IsValidFileName())
{
this.TempData.SetStatusMessageModel(new StatusMessageModel()
{
Message = "Invalid file name",
Severity = StatusMessageModel.StatusSeverity.Error
});
invalidFileNameCount++;
continue;
}
var newFile = await _FileService.AddFile(file, GetUserId());
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)
{
return RedirectToAction(nameof(Files), new

View file

@ -92,9 +92,9 @@ else
@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>
<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>
</form>
}