1+ using System ;
2+ using System . IO ;
3+ using System . Threading . Tasks ;
4+ using FluentAssertions ;
5+ using ManagedCode . Storage . AspNetExtensions ;
6+ using ManagedCode . Storage . AspNetExtensions . Helpers ;
7+ using ManagedCode . Storage . AspNetExtensions . Options ;
8+ using ManagedCode . Storage . Core ;
9+ using ManagedCode . Storage . Core . Models ;
10+ using ManagedCode . Storage . FileSystem . Extensions ;
11+ using Microsoft . Extensions . DependencyInjection ;
12+ using Xunit ;
13+
14+ namespace ManagedCode . Storage . Tests . AspNetExtensions ;
15+
16+ public class StorageExtensionsTests
17+ {
18+ public IStorage Storage { get ; }
19+ public ServiceProvider ServiceProvider { get ; }
20+
21+ public StorageExtensionsTests ( )
22+ {
23+ ServiceProvider = ConfigureServices ( ) ;
24+ Storage = ServiceProvider . GetService < IStorage > ( ) ! ;
25+ }
26+
27+ public static ServiceProvider ConfigureServices ( )
28+ {
29+ var services = new ServiceCollection ( ) ;
30+
31+ services . AddFileSystemStorageAsDefault ( opt =>
32+ {
33+ opt . CommonPath = Path . Combine ( Environment . CurrentDirectory , "managed-code-bucket" ) ;
34+ opt . Path = "managed-code-bucket" ;
35+ } ) ;
36+
37+ return services . BuildServiceProvider ( ) ;
38+ }
39+
40+ [ Fact ]
41+ public async Task UploadToStorageAsync_SmallFile ( )
42+ {
43+ // Arrange
44+ const int size = 200 * 1024 ; // 200 KB
45+ var fileName = FileHelper . GenerateRandomFileName ( "txt" ) ;
46+ var formFile = FileHelper . GenerateFormFile ( fileName , size ) ;
47+
48+ // Act
49+ await Storage . UploadToStorageAsync ( formFile ) ;
50+ var localFile = await Storage . DownloadAsync ( fileName ) ;
51+
52+ // Assert
53+ localFile . FileInfo . Length . Should ( ) . Be ( formFile . Length ) ;
54+ localFile . FileName . Should ( ) . Be ( formFile . FileName ) ;
55+
56+ await Storage . DeleteAsync ( fileName ) ;
57+ }
58+
59+ [ Fact ]
60+ public async Task UploadToStorageAsync_LargeFile ( )
61+ {
62+ // Arrange
63+ const int size = 50 * 1024 * 1024 ; // 50 MB
64+ var fileName = FileHelper . GenerateRandomFileName ( "txt" ) ;
65+ var formFile = FileHelper . GenerateFormFile ( fileName , size ) ;
66+
67+ // Act
68+ await Storage . UploadToStorageAsync ( formFile ) ;
69+ var localFile = await Storage . DownloadAsync ( fileName ) ;
70+
71+ // Assert
72+ localFile . FileInfo . Length . Should ( ) . Be ( formFile . Length ) ;
73+ localFile . FileName . Should ( ) . Be ( formFile . FileName ) ;
74+
75+ await Storage . DeleteAsync ( fileName ) ;
76+ }
77+
78+ [ Fact ]
79+ public async Task UploadToStorageAsync_WithRandomName ( )
80+ {
81+ // Arrange
82+ const int size = 200 * 1024 ; // 200 KB
83+ var fileName = FileHelper . GenerateRandomFileName ( "txt" ) ;
84+ var formFile = FileHelper . GenerateFormFile ( fileName , size ) ;
85+
86+ // Act
87+ var newFileName = await Storage . UploadToStorageAsync ( formFile , new UploadToStorageOptions { UseRandomName = true } ) ;
88+ var localFile = await Storage . DownloadAsync ( newFileName ) ;
89+
90+ // Assert
91+ localFile . FileInfo . Length . Should ( ) . Be ( formFile . Length ) ;
92+ localFile . FileName . Should ( ) . Be ( newFileName ) ;
93+ localFile . FileName . Should ( ) . NotBe ( formFile . FileName ) ;
94+
95+ await Storage . DeleteAsync ( fileName ) ;
96+ }
97+
98+ [ Fact ]
99+ public async Task DownloadAsFileResult_WithFileName ( )
100+ {
101+ // Arrange
102+ const int size = 200 * 1024 ; // 200 KB
103+ var fileName = FileHelper . GenerateRandomFileName ( "txt" ) ;
104+ var localFile = FileHelper . GenerateLocalFile ( fileName , size ) ;
105+
106+ // Act
107+ await Storage . UploadFileAsync ( fileName , localFile . FilePath ) ;
108+ var fileResult = await Storage . DownloadAsFileResult ( fileName ) ;
109+
110+ // Assert
111+ fileResult . ContentType . Should ( ) . Be ( MimeHelper . GetMimeType ( localFile . FileInfo . Extension ) ) ;
112+ fileResult . FileDownloadName . Should ( ) . Be ( localFile . FileName ) ;
113+
114+ await Storage . DeleteAsync ( fileName ) ;
115+ }
116+
117+ [ Fact ]
118+ public async Task DownloadAsFileResult_WithBlobMetadata ( )
119+ {
120+ // Arrange
121+ const int size = 200 * 1024 ; // 200 KB
122+ var fileName = FileHelper . GenerateRandomFileName ( "txt" ) ;
123+ var localFile = FileHelper . GenerateLocalFile ( fileName , size ) ;
124+
125+ BlobMetadata blobMetadata = new ( ) { Name = fileName } ;
126+
127+ // Act
128+ await Storage . UploadFileAsync ( blobMetadata , localFile . FilePath ) ;
129+ var fileResult = await Storage . DownloadAsFileResult ( blobMetadata ) ;
130+
131+ // Assert
132+ fileResult . ContentType . Should ( ) . Be ( MimeHelper . GetMimeType ( localFile . FileInfo . Extension ) ) ;
133+ fileResult . FileDownloadName . Should ( ) . Be ( localFile . FileName ) ;
134+
135+ await Storage . DeleteAsync ( fileName ) ;
136+ }
137+ }
0 commit comments