Skip to content

Commit 1d06e11

Browse files
fix matching of filemimetype
1 parent f95b060 commit 1d06e11

3 files changed

Lines changed: 108 additions & 3 deletions

File tree

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
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+
}

AudioCuesheetEditor/Model/IO/FileMimeTypes.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ namespace AudioCuesheetEditor.Model.IO
1818
public static class FileMimeTypes
1919
{
2020
public const string Text = "text/plain";
21-
public const string Projectfile = "text/*";
22-
public const string Cuesheet = "text/*";
21+
public const string Projectfile = "application/x-ace";
22+
public const string Cuesheet = "application/x-cue";
2323
public const string CDTextfile = "text/*";
2424
}
2525
}

AudioCuesheetEditor/Services/IO/FileInputManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public Boolean CheckFileMimeType(IBrowserFile file, String mimeType, String file
5656
{
5757
fileMimeTypeMatches = file.ContentType.Equals(mimeType, StringComparison.CurrentCultureIgnoreCase);
5858
}
59-
else
59+
if (fileMimeTypeMatches == false)
6060
{
6161
//Try to find by file extension
6262
var extension = Path.GetExtension(file.Name);

0 commit comments

Comments
 (0)