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