mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-17 00:46:54 +01:00
* [265] Add file upload to allow mocking of file operations * [265] Fix failing test * Update code + add tests * LocalFileSystemHandlerTests * 1.0.13 * Fixed the file post to create the mapping folder if none exists to begin with, otherwise the file upload fails with 404 (can't find the folder to upload to). * fix tests * add more tests for LocalFileSystemHandler * Added the head method for files to check if a file exists without returning it as a body. * Add a test and fix the response message (head requires no body). * Fix newline * Fix newline. * Fix the number of mapping tests * Update tests and update client-interface-api * Cleanup "MappingConverter.cs"
114 lines
4.1 KiB
C#
114 lines
4.1 KiB
C#
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using WireMock.Matchers;
|
|
using WireMock.Util;
|
|
|
|
namespace WireMock.Server
|
|
{
|
|
public partial class FluentMockServer
|
|
{
|
|
private readonly RegexMatcher _adminFilesFilenamePathMatcher = new RegexMatcher(MatchBehaviour.AcceptOnMatch, @"^\/__admin\/files\/.*$");
|
|
private static readonly Encoding[] FileBodyIsString = { Encoding.UTF8, Encoding.ASCII };
|
|
|
|
#region Files/{filename}
|
|
private ResponseMessage FilePost(RequestMessage requestMessage)
|
|
{
|
|
string filename = GetFileNameFromRequestMessage(requestMessage);
|
|
|
|
string mappingFolder = _fileSystemHandler.GetMappingFolder();
|
|
if (!_fileSystemHandler.FolderExists(mappingFolder))
|
|
{
|
|
_fileSystemHandler.CreateFolder(mappingFolder);
|
|
}
|
|
|
|
_fileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
|
|
|
|
return ResponseMessageBuilder.Create("File created");
|
|
}
|
|
|
|
private ResponseMessage FilePut(RequestMessage requestMessage)
|
|
{
|
|
string filename = GetFileNameFromRequestMessage(requestMessage);
|
|
|
|
if (!_fileSystemHandler.FileExists(filename))
|
|
{
|
|
_logger.Info("The file '{0}' does not exist, updating file will be skipped.", filename);
|
|
return ResponseMessageBuilder.Create("File is not found", 404);
|
|
}
|
|
|
|
_fileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
|
|
|
|
return ResponseMessageBuilder.Create("File updated");
|
|
}
|
|
|
|
private ResponseMessage FileGet(RequestMessage requestMessage)
|
|
{
|
|
string filename = GetFileNameFromRequestMessage(requestMessage);
|
|
|
|
if (!_fileSystemHandler.FileExists(filename))
|
|
{
|
|
_logger.Info("The file '{0}' does not exist.", filename);
|
|
return ResponseMessageBuilder.Create("File is not found", 404);
|
|
}
|
|
|
|
byte[] bytes = _fileSystemHandler.ReadFile(filename);
|
|
var response = new ResponseMessage
|
|
{
|
|
StatusCode = 200,
|
|
BodyData = new BodyData
|
|
{
|
|
BodyAsBytes = bytes,
|
|
DetectedBodyType = BodyType.Bytes,
|
|
DetectedBodyTypeFromContentType = BodyType.None
|
|
}
|
|
};
|
|
|
|
if (BytesEncodingUtils.TryGetEncoding(bytes, out Encoding encoding) && FileBodyIsString.Select(x => x.Equals(encoding)).Any())
|
|
{
|
|
response.BodyData.DetectedBodyType = BodyType.String;
|
|
response.BodyData.BodyAsString = encoding.GetString(bytes);
|
|
}
|
|
|
|
return response;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks if file exists.
|
|
/// Note: Response is returned with no body as a head request doesn't accept a body, only the status code.
|
|
/// </summary>
|
|
/// <param name="requestMessage">The request message.</param>
|
|
private ResponseMessage FileHead(RequestMessage requestMessage)
|
|
{
|
|
string filename = GetFileNameFromRequestMessage(requestMessage);
|
|
|
|
if (!_fileSystemHandler.FileExists(filename))
|
|
{
|
|
_logger.Info("The file '{0}' does not exist.", filename);
|
|
return ResponseMessageBuilder.Create(404);
|
|
}
|
|
|
|
return ResponseMessageBuilder.Create(204);
|
|
}
|
|
|
|
private ResponseMessage FileDelete(RequestMessage requestMessage)
|
|
{
|
|
string filename = GetFileNameFromRequestMessage(requestMessage);
|
|
|
|
if (!_fileSystemHandler.FileExists(filename))
|
|
{
|
|
_logger.Info("The file '{0}' does not exist.", filename);
|
|
return ResponseMessageBuilder.Create("File is not deleted", 404);
|
|
}
|
|
|
|
_fileSystemHandler.DeleteFile(filename);
|
|
return ResponseMessageBuilder.Create("File deleted.");
|
|
}
|
|
|
|
private string GetFileNameFromRequestMessage(RequestMessage requestMessage)
|
|
{
|
|
return Path.GetFileName(requestMessage.Path.Substring(AdminFiles.Length + 1));
|
|
}
|
|
#endregion
|
|
}
|
|
} |