1+ //This file is part of AudioCuesheetEditor.
2+
3+ //AudioCuesheetEditor is free software: you can redistribute it and/or modify
4+ //it under the terms of the GNU General Public License as published by
5+ //the Free Software Foundation, either version 3 of the License, or
6+ //(at your option) any later version.
7+
8+ //AudioCuesheetEditor is distributed in the hope that it will be useful,
9+ //but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ //GNU General Public License for more details.
12+
13+ //You should have received a copy of the GNU General Public License
14+ //along with Foobar. If not, see
15+ //<http: //www.gnu.org/licenses />.
16+ using AudioCuesheetEditor . Services . IO ;
17+ using Microsoft . AspNetCore . Components . Forms ;
18+ using Microsoft . Extensions . Logging ;
19+ using Microsoft . JSInterop ;
20+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
21+ using Moq ;
22+ using System . Net . Http ;
23+
24+ namespace AudioCuesheetEditor . Tests . Services . IO
25+ {
26+ [ TestClass ( ) ]
27+ public class FileInputManagerTests
28+ {
29+ [ TestMethod ( ) ]
30+ public void CheckFileMimeType_ReturnsTrue_WhenContentTypeDoesNotMatchButExtension ( )
31+ {
32+ // Arrange
33+ var jsRuntimeMock = new Mock < IJSRuntime > ( ) ;
34+ var httpClientMock = new Mock < HttpClient > ( ) ;
35+ var loggerMock = new Mock < ILogger < FileInputManager > > ( ) ;
36+ var file = CreateBrowserFile ( "test.mp3" , "audio/wav" ) ;
37+ var manager = new FileInputManager ( jsRuntimeMock . Object , httpClientMock . Object , loggerMock . Object ) ;
38+
39+ // Act
40+ var result = manager . CheckFileMimeType ( file , "audio/mpeg" , ".mp3" ) ;
41+
42+ // Assert
43+ Assert . IsTrue ( result ) ;
44+ }
45+
46+ [ TestMethod ( ) ]
47+ public void CheckFileMimeType_ReturnsTrue_WhenContentTypeDoesMatchButNotExtension ( )
48+ {
49+ // Arrange
50+ var jsRuntimeMock = new Mock < IJSRuntime > ( ) ;
51+ var httpClientMock = new Mock < HttpClient > ( ) ;
52+ var loggerMock = new Mock < ILogger < FileInputManager > > ( ) ;
53+ var file = CreateBrowserFile ( "test.mpeg" , "audio/mpeg" ) ;
54+ var manager = new FileInputManager ( jsRuntimeMock . Object , httpClientMock . Object , loggerMock . Object ) ;
55+
56+ // Act
57+ var result = manager . CheckFileMimeType ( file , "audio/mpeg" , ".mp3" ) ;
58+
59+ // Assert
60+ Assert . IsTrue ( result ) ;
61+ }
62+
63+ [ TestMethod ( ) ]
64+ public void CheckFileMimeType_ReturnsFalse_WhenExtensionDoesNotMatchAndContentTypeIsEmpty ( )
65+ {
66+ // Arrange
67+ var jsRuntimeMock = new Mock < IJSRuntime > ( ) ;
68+ var httpClientMock = new Mock < HttpClient > ( ) ;
69+ var loggerMock = new Mock < ILogger < FileInputManager > > ( ) ;
70+ var file = CreateBrowserFile ( "test.flac" , string . Empty ) ;
71+ var manager = new FileInputManager ( jsRuntimeMock . Object , httpClientMock . Object , loggerMock . Object ) ;
72+
73+ // Act
74+ var result = manager . CheckFileMimeType ( file , "audio/flac" , ".mp3" ) ;
75+
76+ // Assert
77+ Assert . IsFalse ( result ) ;
78+ }
79+
80+ [ TestMethod ( ) ]
81+ public void CheckFileMimeType_ReturnsTrue_WhenContentTypeAndExtensionMatch ( )
82+ {
83+ // Arrange
84+ var jsRuntimeMock = new Mock < IJSRuntime > ( ) ;
85+ var httpClientMock = new Mock < HttpClient > ( ) ;
86+ var loggerMock = new Mock < ILogger < FileInputManager > > ( ) ;
87+ var file = CreateBrowserFile ( "test.wav" , "audio/wave" ) ;
88+ var manager = new FileInputManager ( jsRuntimeMock . Object , httpClientMock . Object , loggerMock . Object ) ;
89+
90+ // Act
91+ var result = manager . CheckFileMimeType ( file , "audio/wave" , ".wav" ) ;
92+
93+ // Assert
94+ Assert . IsTrue ( result ) ;
95+ }
96+
97+ private static IBrowserFile CreateBrowserFile ( string name , string contentType )
98+ {
99+ var fileMock = new Mock < IBrowserFile > ( ) ;
100+ fileMock . Setup ( f => f . Name ) . Returns ( name ) ;
101+ fileMock . Setup ( f => f . ContentType ) . Returns ( contentType ) ;
102+ return fileMock . Object ;
103+ }
104+ }
105+ }
0 commit comments