1+ // Licensed to the .NET Foundation under one or more agreements.
2+ // The .NET Foundation licenses this file to you under the MIT license.
3+
4+ using System . Globalization ;
5+ using Microsoft . AspNetCore . Components . Endpoints . FormMapping ;
6+ using Microsoft . AspNetCore . Components . Forms ;
7+ using Microsoft . AspNetCore . Http ;
8+ using Microsoft . Extensions . Primitives ;
9+ using Moq ;
10+
11+ namespace Microsoft . AspNetCore . Components . Endpoints . Tests . FormMapping ;
12+
13+ public class BrowserFileFromFormFileTests
14+ {
15+ [ Fact ]
16+ public void Name_ReturnsFormFileFileName_NotFormFileName ( )
17+ {
18+ // Arrange
19+ const string expectedFileName = "document.pdf" ;
20+ const string formFieldName = "fileInput" ;
21+
22+ var mockFormFile = new Mock < IFormFile > ( ) ;
23+ mockFormFile . Setup ( x => x . FileName ) . Returns ( expectedFileName ) ;
24+ mockFormFile . Setup ( x => x . Name ) . Returns ( formFieldName ) ;
25+
26+ var browserFile = new BrowserFileFromFormFile ( mockFormFile . Object ) ;
27+
28+ // Act
29+ var actualName = browserFile . Name ;
30+
31+ // Assert
32+ Assert . Equal ( expectedFileName , actualName ) ;
33+ Assert . NotEqual ( formFieldName , actualName ) ;
34+ }
35+
36+ [ Fact ]
37+ public void TryRead_IBrowserFile_ReturnsCorrectFileName ( )
38+ {
39+ // Arrange
40+ const string prefixName = "fileInput" ;
41+ const string expectedFileName = "upload.txt" ;
42+ var culture = CultureInfo . GetCultureInfo ( "en-US" ) ;
43+
44+ var mockFormFile = new Mock < IFormFile > ( ) ;
45+ mockFormFile . Setup ( x => x . FileName ) . Returns ( expectedFileName ) ;
46+ mockFormFile . Setup ( x => x . Name ) . Returns ( prefixName ) ;
47+
48+ var formFileCollection = new Mock < IFormFileCollection > ( ) ;
49+ formFileCollection . Setup ( x => x . GetFile ( prefixName ) ) . Returns ( mockFormFile . Object ) ;
50+
51+ var buffer = prefixName . ToCharArray ( ) . AsMemory ( ) ;
52+ var reader = new FormDataReader ( new Dictionary < FormKey , StringValues > ( ) , culture , buffer , formFileCollection . Object ) ;
53+ reader . PushPrefix ( prefixName ) ;
54+
55+ var converter = new FileConverter < IBrowserFile > ( ) ;
56+
57+ // Act
58+ var result = converter . TryRead ( ref reader , typeof ( IBrowserFile ) , default ! , out var browserFile , out var found ) ;
59+
60+ // Assert
61+ Assert . True ( result ) ;
62+ Assert . True ( found ) ;
63+ Assert . NotNull ( browserFile ) ;
64+ Assert . Equal ( expectedFileName , browserFile . Name ) ;
65+ }
66+
67+ [ Fact ]
68+ public void TryRead_IBrowserFileList_ReturnsCorrectFileNames ( )
69+ {
70+ // Arrange
71+ const string prefixName = "fileInputs" ;
72+ const string expectedFileName1 = "file1.txt" ;
73+ const string expectedFileName2 = "file2.jpg" ;
74+ var culture = CultureInfo . GetCultureInfo ( "en-US" ) ;
75+
76+ var mockFormFile1 = new Mock < IFormFile > ( ) ;
77+ mockFormFile1 . Setup ( x => x . FileName ) . Returns ( expectedFileName1 ) ;
78+ mockFormFile1 . Setup ( x => x . Name ) . Returns ( prefixName ) ;
79+
80+ var mockFormFile2 = new Mock < IFormFile > ( ) ;
81+ mockFormFile2 . Setup ( x => x . FileName ) . Returns ( expectedFileName2 ) ;
82+ mockFormFile2 . Setup ( x => x . Name ) . Returns ( prefixName ) ;
83+
84+ var formFiles = new List < IFormFile > { mockFormFile1 . Object , mockFormFile2 . Object } ;
85+ var formFileCollection = new Mock < IFormFileCollection > ( ) ;
86+ formFileCollection . Setup ( x => x . GetFiles ( prefixName ) ) . Returns ( formFiles ) ;
87+
88+ var buffer = prefixName . ToCharArray ( ) . AsMemory ( ) ;
89+ var reader = new FormDataReader ( new Dictionary < FormKey , StringValues > ( ) , culture , buffer , formFileCollection . Object ) ;
90+ reader . PushPrefix ( prefixName ) ;
91+
92+ var converter = new FileConverter < IReadOnlyList < IBrowserFile > > ( ) ;
93+
94+ // Act
95+ var result = converter . TryRead ( ref reader , typeof ( IReadOnlyList < IBrowserFile > ) , default ! , out var browserFiles , out var found ) ;
96+
97+ // Assert
98+ Assert . True ( result ) ;
99+ Assert . True ( found ) ;
100+ Assert . NotNull ( browserFiles ) ;
101+ Assert . Equal ( 2 , browserFiles . Count ) ;
102+ Assert . Equal ( expectedFileName1 , browserFiles [ 0 ] . Name ) ;
103+ Assert . Equal ( expectedFileName2 , browserFiles [ 1 ] . Name ) ;
104+ }
105+ }
0 commit comments