| | | 1 | | using Microsoft.Extensions.FileProviders; |
| | | 2 | | using Moq; |
| | | 3 | | |
| | | 4 | | namespace TestUtilities; |
| | | 5 | | |
| | | 6 | | /// <summary> |
| | | 7 | | /// Helper methods for creating mock IFileProvider instances for testing |
| | | 8 | | /// </summary> |
| | | 9 | | public static class MockFileProviderHelpers |
| | | 10 | | { |
| | | 11 | | /// <summary> |
| | | 12 | | /// Creates a mock IFileProvider with the specified file contents |
| | | 13 | | /// </summary> |
| | | 14 | | /// <param name="fileContents">Dictionary mapping file paths to their contents</param> |
| | | 15 | | /// <returns>A configured mock IFileProvider</returns> |
| | | 16 | | public static Mock<IFileProvider> CreateMockFileProvider(Dictionary<string, string> fileContents) |
| | | 17 | | { |
| | 1 | 18 | | var mockFileProvider = new Mock<IFileProvider>(); |
| | | 19 | | |
| | | 20 | | // Setup GetFileInfo for each file |
| | 1 | 21 | | foreach (var (path, content) in fileContents) |
| | | 22 | | { |
| | 1 | 23 | | var mockFileInfo = CreateMockFileInfo(content, path); |
| | 1 | 24 | | mockFileProvider.Setup(fp => fp.GetFileInfo(path)).Returns(mockFileInfo.Object); |
| | | 25 | | } |
| | | 26 | | |
| | | 27 | | // Setup non-existent files to return NotFoundFileInfo |
| | 1 | 28 | | mockFileProvider.Setup(fp => fp.GetFileInfo(It.Is<string>(p => !fileContents.ContainsKey(p)))) |
| | 1 | 29 | | .Returns<string>(name => new NotFoundFileInfo(name)); |
| | | 30 | | |
| | 1 | 31 | | return mockFileProvider; |
| | | 32 | | } |
| | | 33 | | |
| | | 34 | | /// <summary> |
| | | 35 | | /// Creates a mock IFileInfo that returns the specified content |
| | | 36 | | /// </summary> |
| | | 37 | | /// <param name="content">The file content to return when the file is read</param> |
| | | 38 | | /// <param name="path">The path to use for PhysicalPath</param> |
| | | 39 | | /// <returns>A configured mock IFileInfo</returns> |
| | | 40 | | public static Mock<IFileInfo> CreateMockFileInfo(string content, string path) |
| | | 41 | | { |
| | 1 | 42 | | var mockFileInfo = new Mock<IFileInfo>(); |
| | 1 | 43 | | mockFileInfo.Setup(fi => fi.Exists).Returns(true); |
| | 1 | 44 | | mockFileInfo.Setup(fi => fi.PhysicalPath).Returns(path); |
| | 1 | 45 | | mockFileInfo.Setup(fi => fi.Name).Returns(Path.GetFileName(path)); |
| | 1 | 46 | | mockFileInfo.Setup(fi => fi.CreateReadStream()).Returns(() => |
| | 1 | 47 | | { |
| | 1 | 48 | | var bytes = System.Text.Encoding.UTF8.GetBytes(content); |
| | 1 | 49 | | return new MemoryStream(bytes); |
| | 1 | 50 | | }); |
| | | 51 | | |
| | 1 | 52 | | return mockFileInfo; |
| | | 53 | | } |
| | | 54 | | } |