diff --git a/AudioCuesheetEditor.End2EndTests/AudioCuesheetEditor.End2EndTests.csproj b/AudioCuesheetEditor.End2EndTests/AudioCuesheetEditor.End2EndTests.csproj
index 80fde05c..27b76684 100644
--- a/AudioCuesheetEditor.End2EndTests/AudioCuesheetEditor.End2EndTests.csproj
+++ b/AudioCuesheetEditor.End2EndTests/AudioCuesheetEditor.End2EndTests.csproj
@@ -23,10 +23,6 @@
-
-
-
-
PreserveNewest
diff --git a/AudioCuesheetEditor.End2EndTests/MSTestSettings.cs b/AudioCuesheetEditor.End2EndTests/MSTestSettings.cs
new file mode 100644
index 00000000..aaf278c8
--- /dev/null
+++ b/AudioCuesheetEditor.End2EndTests/MSTestSettings.cs
@@ -0,0 +1 @@
+[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]
diff --git a/AudioCuesheetEditor.End2EndTests/Models/DetailView.cs b/AudioCuesheetEditor.End2EndTests/Models/DetailView.cs
index 59d57bb6..cd02b511 100644
--- a/AudioCuesheetEditor.End2EndTests/Models/DetailView.cs
+++ b/AudioCuesheetEditor.End2EndTests/Models/DetailView.cs
@@ -48,18 +48,22 @@ internal async Task EditTrackAsync(string? artist = null, string? title = null)
{
await _page.Locator("td:nth-child(3)").ClickAsync();
await _page.Locator("td:nth-child(3)").Last.GetByRole(AriaRole.Textbox).FillAsync(artist);
+ // Autocomplete overlay will pop up, so we close it
await _page.Locator(".mud-popover-open").WaitForAsync(new() { State = WaitForSelectorState.Visible });
await _page.Keyboard.PressAsync("Escape");
- await _page.GetByRole(AriaRole.Heading, new() { Name = "Playback" }).ClickAsync();
+ // Click outside the autocomplete to have an focus lost event for getting the value written to model
+ await _page.GetByRole(AriaRole.Heading, new() { Name = "Playback" }).ClickAsync(new() { Force = true });
await _page.WaitForTimeoutAsync(100);
}
if (title != null)
{
await _page.Locator("td:nth-child(4)").ClickAsync();
await _page.Locator("td:nth-child(4)").Last.GetByRole(AriaRole.Textbox).FillAsync(title);
+ // Autocomplete overlay will pop up, so we close it
await _page.Locator(".mud-popover-open").WaitForAsync(new() { State = WaitForSelectorState.Visible });
await _page.Keyboard.PressAsync("Escape");
- await _page.GetByRole(AriaRole.Heading, new() { Name = "Playback" }).ClickAsync();
+ // Click outside the autocomplete to have an focus lost event for getting the value written to model
+ await _page.GetByRole(AriaRole.Heading, new() { Name = "Playback" }).ClickAsync(new() { Force = true });
await _page.WaitForTimeoutAsync(100);
}
}
diff --git a/AudioCuesheetEditor.Tests/AudioCuesheetEditor.Tests.csproj b/AudioCuesheetEditor.Tests/AudioCuesheetEditor.Tests.csproj
index 80ac430d..5c178646 100644
--- a/AudioCuesheetEditor.Tests/AudioCuesheetEditor.Tests.csproj
+++ b/AudioCuesheetEditor.Tests/AudioCuesheetEditor.Tests.csproj
@@ -22,18 +22,30 @@
-
- True
- True
- Resources.resx
-
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
diff --git a/AudioCuesheetEditor.Tests/MSTestSettings.cs b/AudioCuesheetEditor.Tests/MSTestSettings.cs
new file mode 100644
index 00000000..e466aa12
--- /dev/null
+++ b/AudioCuesheetEditor.Tests/MSTestSettings.cs
@@ -0,0 +1,3 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]
diff --git a/AudioCuesheetEditor.Tests/Model/Entity/ValidateableTests.cs b/AudioCuesheetEditor.Tests/Model/Entity/ValidateableTests.cs
index be481b15..809dab4c 100644
--- a/AudioCuesheetEditor.Tests/Model/Entity/ValidateableTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/Entity/ValidateableTests.cs
@@ -72,7 +72,7 @@ public void ValidateTest()
};
Assert.AreEqual(ValidationStatus.Error, testObject.Validate().Status);
Assert.IsNotNull(testObject.Validate().ValidationMessages);
- Assert.IsTrue(testObject.Validate().ValidationMessages?.Count == 1);
+ Assert.AreEqual(1, testObject.Validate().ValidationMessages?.Count);
testObject.TestProperty = "Test";
Assert.AreEqual(ValidationStatus.Success, testObject.Validate().Status);
}
diff --git a/AudioCuesheetEditor.Tests/Model/Entity/ValidationResultTests.cs b/AudioCuesheetEditor.Tests/Model/Entity/ValidationResultTests.cs
index 69d9eda1..1b30435f 100644
--- a/AudioCuesheetEditor.Tests/Model/Entity/ValidationResultTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/Entity/ValidationResultTests.cs
@@ -32,7 +32,7 @@ public void Create_NoValidation_ReturnsExpectedResult()
// Assert
Assert.AreEqual(ValidationStatus.NoValidation, validationResult.Status);
- Assert.AreEqual(0, validationResult.ValidationMessages.Count);
+ Assert.IsEmpty(validationResult.ValidationMessages);
}
[TestMethod]
@@ -43,7 +43,7 @@ public void Create_Success_ReturnsExpectedResult()
// Assert
Assert.AreEqual(ValidationStatus.Success, validationResult.Status);
- Assert.AreEqual(0, validationResult.ValidationMessages.Count);
+ Assert.IsEmpty(validationResult.ValidationMessages);
}
[TestMethod]
@@ -54,7 +54,7 @@ public void Create_Error_ReturnsExpectedResult()
// Assert
Assert.AreEqual(ValidationStatus.Error, validationResult.Status);
- Assert.AreEqual(0, validationResult.ValidationMessages.Count);
+ Assert.IsEmpty(validationResult.ValidationMessages);
}
[TestMethod]
@@ -93,7 +93,7 @@ public void Default_Status_IsNoValidation()
// Assert
Assert.AreEqual(ValidationStatus.NoValidation, validationResult.Status);
- Assert.AreEqual(0, validationResult.ValidationMessages.Count);
+ Assert.IsEmpty(validationResult.ValidationMessages);
}
[TestMethod]
diff --git a/AudioCuesheetEditor.Tests/Model/IO/Audio/AudiofileTests.cs b/AudioCuesheetEditor.Tests/Model/IO/Audio/AudiofileTests.cs
index 7b0bea1b..7779ba5a 100644
--- a/AudioCuesheetEditor.Tests/Model/IO/Audio/AudiofileTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/IO/Audio/AudiofileTests.cs
@@ -29,7 +29,7 @@ public void AudioFileTest()
Assert.IsNull(audioFile.ContentStream);
Assert.IsFalse(audioFile.IsContentStreamLoaded);
Assert.IsNotNull(audioFile.Name);
- Assert.AreEqual(audioFile.AudioFileType, "MP3");
+ Assert.AreEqual("MP3", audioFile.AudioFileType);
audioFile = new Audiofile("Test");
Assert.AreEqual(audioFile.AudioFileType, string.Empty);
Assert.IsNotNull(audioFile.Name);
@@ -37,7 +37,7 @@ public void AudioFileTest()
audioFile = new Audiofile("test", "TestobjectURL", codec);
Assert.IsNotNull(audioFile.Name);
Assert.AreEqual("test.ogg", audioFile.Name);
- Assert.AreEqual(audioFile.AudioFileType, "OGG");
+ Assert.AreEqual("OGG", audioFile.AudioFileType);
Assert.IsNotNull(audioFile.ObjectURL);
Assert.IsTrue(audioFile.PlaybackPossible);
codec = Audiofile.AudioCodecs.Single(x => x.FileExtension == ".mp3");
diff --git a/AudioCuesheetEditor.Tests/Model/IO/Export/CuesheetSectionTests.cs b/AudioCuesheetEditor.Tests/Model/IO/Export/CuesheetSectionTests.cs
index 0629a434..e752c314 100644
--- a/AudioCuesheetEditor.Tests/Model/IO/Export/CuesheetSectionTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/IO/Export/CuesheetSectionTests.cs
@@ -1,9 +1,10 @@
using AudioCuesheetEditor.Model.AudioCuesheet;
using AudioCuesheetEditor.Model.Entity;
+using AudioCuesheetEditor.Model.IO.Export;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
-namespace AudioCuesheetEditor.Model.IO.Export.Tests
+namespace AudioCuesheetEditor.Tests.Model.IO.Export
{
[TestClass()]
public class CuesheetSectionTests
diff --git a/AudioCuesheetEditor.Tests/Model/IO/Import/ImportprofileTests.cs b/AudioCuesheetEditor.Tests/Model/IO/Import/ImportprofileTests.cs
index b25e9756..e91fe976 100644
--- a/AudioCuesheetEditor.Tests/Model/IO/Import/ImportprofileTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/IO/Import/ImportprofileTests.cs
@@ -37,7 +37,7 @@ public void Validate_WithoutPlaceholder_ReturnsInvalid()
var result = importprofile.Validate();
// Assert
Assert.AreEqual(ValidationStatus.Error, result.Status);
- Assert.AreEqual(2, result.ValidationMessages.Count);
+ Assert.HasCount(2, result.ValidationMessages);
Assert.AreEqual("{0} contains no placeholder!", result.ValidationMessages.First().Message);
Assert.AreEqual(nameof(Importprofile.SchemeCuesheet), result.ValidationMessages.First().Parameter?.First().ToString());
Assert.AreEqual("{0} contains no placeholder!", result.ValidationMessages.Last().Message);
diff --git a/AudioCuesheetEditor.Tests/Model/IO/ProjectfileTests.cs b/AudioCuesheetEditor.Tests/Model/IO/ProjectfileTests.cs
index 847e2528..f8f6cd0d 100644
--- a/AudioCuesheetEditor.Tests/Model/IO/ProjectfileTests.cs
+++ b/AudioCuesheetEditor.Tests/Model/IO/ProjectfileTests.cs
@@ -142,7 +142,7 @@ public void ImportFile_ValidProjectfile_ShouldImportFile()
Assert.AreEqual("AudioFile.mp3", cuesheet.Audiofile?.Name);
Assert.AreEqual("A123", cuesheet.Cataloguenumber);
Assert.AreEqual(2, cuesheet.Validate(nameof(Cuesheet.Cataloguenumber)).ValidationMessages?.Count);
- Assert.AreEqual(10, cuesheet.Tracks.Count);
+ Assert.HasCount(10, cuesheet.Tracks);
Assert.IsTrue(cuesheet.Tracks.ElementAt(3).Flags.Contains(Flag.DCP));
Assert.IsTrue(cuesheet.Tracks.ElementAt(3).Flags.Contains(Flag.FourCH));
Assert.AreEqual("Artist 10", cuesheet.Tracks.Last().Artist);
@@ -167,7 +167,7 @@ public void ImportFile_ValidProjectfileWithSections_ShouldImportFile()
Assert.AreEqual("AudioFile.mp3", cuesheet.Audiofile?.Name);
Assert.AreEqual("A123", cuesheet.Cataloguenumber);
Assert.AreEqual(2, cuesheet.Validate(nameof(Cuesheet.Cataloguenumber)).ValidationMessages?.Count);
- Assert.AreEqual(10, cuesheet.Tracks.Count);
+ Assert.HasCount(10, cuesheet.Tracks);
Assert.IsTrue(cuesheet.Tracks.ElementAt(3).Flags.Contains(Flag.DCP));
Assert.IsTrue(cuesheet.Tracks.ElementAt(3).Flags.Contains(Flag.FourCH));
Assert.AreEqual("Artist 10", cuesheet.Tracks.Last().Artist);
@@ -175,7 +175,7 @@ public void ImportFile_ValidProjectfileWithSections_ShouldImportFile()
Assert.IsTrue(ReferenceEquals(cuesheet.Tracks.First(), cuesheet.GetPreviousLinkedTrack(cuesheet.Tracks.ElementAt(1))));
Assert.AreEqual(cuesheet.Tracks.First(), cuesheet.GetPreviousLinkedTrack(cuesheet.Tracks.ElementAt(1)));
Assert.AreEqual((uint)10, cuesheet.Tracks.Last().Position);
- Assert.AreEqual(2, cuesheet.Sections.Count);
+ Assert.HasCount(2, cuesheet.Sections);
Assert.AreEqual(new TimeSpan(0, 30, 0), cuesheet.Sections.First().Begin);
Assert.AreEqual(new TimeSpan(1, 0, 0), cuesheet.Sections.Last().Begin);
}
diff --git a/AudioCuesheetEditor.Tests/Model/Options/ExportOptionsTest.cs b/AudioCuesheetEditor.Tests/Model/Options/ExportOptionsTest.cs
index d7a5df81..77486245 100644
--- a/AudioCuesheetEditor.Tests/Model/Options/ExportOptionsTest.cs
+++ b/AudioCuesheetEditor.Tests/Model/Options/ExportOptionsTest.cs
@@ -18,20 +18,21 @@
using System.Linq;
using System.Text.Json;
-namespace AudioCuesheetEditorTests.Model.Options
+namespace AudioCuesheetEditor.Tests.Model.Options
{
[TestClass()]
public class ExportOptionsTest
{
+ private readonly JsonSerializerOptions serializerOptions = new()
+ {
+ DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
+ };
+
[TestMethod()]
public void SerializationTest()
{
- var options = new ExportOptions();
- var serializerOptions = new JsonSerializerOptions
- {
- DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
- };
- var optionsJson = JsonSerializer.Serialize