Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@
<TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Playwright.MSTest.v4" Version="1.62.0" />
<PackageReference Include="MSTest" Version="4.4.0" />
Expand Down
42 changes: 27 additions & 15 deletions AudioCuesheetEditor.End2EndTests/Models/DetailView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,23 +52,23 @@ internal async Task AddTrackAsync(int audiofileIndex)
await _page.GetByRole(AriaRole.Button, new() { Name = "Add new track" }).Nth(audiofileIndex).ClickAsync();
}

internal async Task EditTrackAsync(string? artist = null, string? title = null)
internal async Task EditTrackAsync(string? artist = null, string? title = null, TimeSpan? begin = null, TimeSpan? end = null, int trackPosition = 1)
{
if (artist != null)
{
await _page.Locator("td:nth-child(3)").ClickAsync();
await _page.Locator("td:nth-child(3)").Last.GetByRole(AriaRole.Textbox).FillAsync(artist);
// 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);
await EditTrackFieldAsync(trackPosition, "Artist", artist);
}
if (title != null)
{
await _page.Locator("td:nth-child(4)").ClickAsync();
await _page.Locator("td:nth-child(4)").Last.GetByRole(AriaRole.Textbox).FillAsync(title);
// 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);
await EditTrackFieldAsync(trackPosition, "Title", title);
}
if (begin != null)
{
await EditTrackFieldAsync(trackPosition, "Begin", begin.ToString() ?? string.Empty);
}
if (end != null)
{
await EditTrackFieldAsync(trackPosition, "End", end.ToString() ?? string.Empty);
}
}

Expand All @@ -95,10 +95,10 @@ internal async Task EditSelectedTracksModalAsync()
internal async Task EditTracksModalAsync(string artist, string title, string end, IEnumerable<string> flagsToSelect)
{
await _page.GetByRole(AriaRole.Button, new() { Name = "Edit selected tracks" }).ClickAsync();
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Artist", Exact = true }).FillAsync(artist);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Artist", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).FillAsync(title);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Artist" }).FillAsync(artist);
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Artist" }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).FillAsync(title);
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Textbox, new() { Name = "End" }).FillAsync(end);
foreach (var flag in flagsToSelect)
{
Expand All @@ -119,5 +119,17 @@ internal async Task OpenRenameAudiofileDialogAsync(int audiofileIndex)
await _page.GetByRole(AriaRole.Group).Filter(new() { HasText = "AudiofileAudiofile" }).Nth(audiofileIndex).GetByLabel("More").ClickAsync();
await _page.GetByText("Rename file").ClickAsync();
}

async Task EditTrackFieldAsync(int trackPosition, string dataLabel, string value)
{
var row = _page.Locator("tbody tr:not([aria-hidden='true'])").Nth(trackPosition - 1);
var cell = row.Locator($"td[data-label='{dataLabel}']");
await cell.ClickAsync();
var textbox = cell.Locator("input[type='text']");
await textbox.FillAsync(value);
// 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);
}
}
}
4 changes: 2 additions & 2 deletions AudioCuesheetEditor.End2EndTests/Models/ImportView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ internal async Task SelectTracksAsync(IEnumerable<int> trackTablePositions, Bool
internal async Task EditTracksModalAsync(string title)
{
await _page.GetByRole(AriaRole.Button, new() { Name = "Edit selected tracks" }).ClickAsync();
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).FillAsync(title);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).FillAsync(title);
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Button, new() { Name = "Save changes" }).ClickAsync();
}

Expand Down
10 changes: 5 additions & 5 deletions AudioCuesheetEditor.End2EndTests/Models/RecordView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ internal async Task StopRecordingAsync()

internal async Task AddRecordingTrackAsync(string artist, string title)
{
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Artist", Exact = true }).ClickAsync();
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Artist", Exact = true }).FillAsync(artist);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Artist", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).FillAsync(title);
await _page.GetByRole(AriaRole.Textbox, new() { Name = "Title", Exact = true }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Artist" }).ClickAsync();
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Artist" }).FillAsync(artist);
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Artist" }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).FillAsync(title);
await _page.GetByRole(AriaRole.Combobox, new() { Name = "Title" }).PressAsync("Tab");
await _page.GetByRole(AriaRole.Button, new() { Name = "Add track" }).ClickAsync();
}
}
Expand Down
17 changes: 7 additions & 10 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/BasicTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,11 @@ public async Task ChangeLanguage_ShouldSwitchLanguage_WhenGermanIsSelected()
await Expect(TestPage.GetByRole(AriaRole.Dialog)).ToMatchAriaSnapshotAsync(@"- dialog ""Exportprofile Close"":
- heading ""Exportprofile"" [level=6]
- button ""Close""
- text: ""Export ist derzeit nicht möglich: Künstler hat keinen Wert! Titel hat keinen Wert! Audiodateien hat ungültige Anzahl (0)!""
- tablist:
- tab ""Export konfigurieren"" [selected]:
- paragraph: Export konfigurieren
- tab ""2 Export herunterladen"" [disabled]:
- text: ""2""
- paragraph: Export herunterladen
- tab ""Export konfigurieren"" [selected]
- tab ""Export anzeigen""
- tabpanel ""Export konfigurieren"":
- text: ""Export ist derzeit nicht möglich: Künstler hat keinen Wert! Titel hat keinen Wert! Audiodateien hat ungültige Anzahl (0)!""
- combobox ""Exportprofil auswählen"": YouTube
- group ""Exportprofil auswählen""
- text: Exportprofil auswählen
Expand Down Expand Up @@ -126,13 +123,13 @@ await Expect(TestPage.GetByRole(AriaRole.Dialog)).ToMatchAriaSnapshotAsync(@"- d
- button
- group ""Schema Fuß""
- text: Schema Fuß
- button ""Previous"" [disabled]
- button ""Next"" [disabled]");
- group:
- button ""Export erzeugen"" [disabled]");
await exportDialog.OpenSchemeMenuAsync("Schema Kopf");
await Expect(TestPage.Locator("#app")).ToMatchAriaSnapshotAsync("- paragraph: Künstler\n- paragraph: Titel\n- paragraph: CDTextdatei\n- paragraph: Katalognummer\n- paragraph: Datum\n- paragraph: Datum & Uhrzeit\n- paragraph: Uhrzeit");
await Expect(TestPage.GetByTestId("menu-wrapper")).ToMatchAriaSnapshotAsync("- menu:\r\n - menuitem \"Künstler\":\r\n - paragraph: Künstler\r\n - menuitem \"Titel\":\r\n - paragraph: Titel\r\n - menuitem \"CDTextdatei\":\r\n - paragraph: CDTextdatei\r\n - menuitem \"Katalognummer\":\r\n - paragraph: Katalognummer\r\n - menuitem \"Datum\":\r\n - paragraph: Datum\r\n - menuitem \"Datum & Uhrzeit\":\r\n - paragraph: Datum & Uhrzeit\r\n - menuitem \"Uhrzeit\":\r\n - paragraph: Uhrzeit");
await TestPage.GetByText("CDTextdatei").ClickAsync();
await exportDialog.OpenSchemeMenuAsync("Schema Titel");
await Expect(TestPage.GetByTestId("menu-wrapper")).ToMatchAriaSnapshotAsync("- paragraph: Position\n- paragraph: Künstler\n- paragraph: Titel\n- paragraph: Begin\n- paragraph: End\n- paragraph: Länge\n- paragraph: Markierungen\n- paragraph: Vorlücke\n- paragraph: Nachlücke");
await Expect(TestPage.GetByTestId("menu-wrapper")).ToMatchAriaSnapshotAsync("- menu:\r\n - menuitem \"Position\":\r\n - paragraph: Position\r\n - menuitem \"Künstler\":\r\n - paragraph: Künstler\r\n - menuitem \"Titel\":\r\n - paragraph: Titel\r\n - menuitem \"Begin\":\r\n - paragraph: Begin\r\n - menuitem \"End\":\r\n - paragraph: End\r\n - menuitem \"Länge\":\r\n - paragraph: Länge\r\n - menuitem \"Markierungen\":\r\n - paragraph: Markierungen\r\n - menuitem \"Vorlücke\":\r\n - paragraph: Vorlücke\r\n - menuitem \"Nachlücke\":\r\n - paragraph: Nachlücke");
}

[TestMethod]
Expand Down
51 changes: 49 additions & 2 deletions AudioCuesheetEditor.End2EndTests/Tests/Desktop/ExportTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,41 @@ public async Task DownloadText_GeneratesTextFile_WhenCuesheetIsValidAsync()
await detailView.AddAudiofileAsync();
await detailView.SetAudiofileInputFileAsync(0, "Kalimba.mp3");
await detailView.AddTrackAsync(0);
await detailView.EditTrackAsync("Track Artist 1", "Track Title 1");
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.AddTrackAsync(0);
await detailView.EditTrackAsync("Track Artist 1", "Track Title 1", TimeSpan.Zero, new TimeSpan(0, 0, 10), 1);
await detailView.EditTrackAsync("Track Artist 2", "Track Title 2", new TimeSpan(0, 0, 10), new TimeSpan(0, 0, 20), 2);
await detailView.EditTrackAsync("Track Artist 3", "Track Title 3", new TimeSpan(0, 0, 20), new TimeSpan(0, 0, 30), 3);
await detailView.EditTrackAsync("Track Artist 4", "Track Title 4", new TimeSpan(0, 0, 30), new TimeSpan(0, 0, 40), 4);
await detailView.EditTrackAsync("Track Artist 5", "Track Title 5", new TimeSpan(0, 0, 40), new TimeSpan(0, 0, 50), 5);
await detailView.EditTrackAsync("Track Artist 6", "Track Title 6", new TimeSpan(0, 0, 50), new TimeSpan(0, 1, 0), 6);
await detailView.EditTrackAsync("Track Artist 7", "Track Title 7", new TimeSpan(0, 1, 0), new TimeSpan(0, 1, 10), 7);
await detailView.EditTrackAsync("Track Artist 8", "Track Title 8", new TimeSpan(0, 1, 10), new TimeSpan(0, 1, 20), 8);
await detailView.EditTrackAsync("Track Artist 9", "Track Title 9", new TimeSpan(0, 1, 20), new TimeSpan(0, 1, 30), 9);
await detailView.EditTrackAsync("Track Artist 10", "Track Title 10", new TimeSpan(0, 1, 30), new TimeSpan(0, 1, 40), 10);
await detailView.EditTrackAsync("Track Artist 11", "Track Title 11", new TimeSpan(0, 1, 40), new TimeSpan(0, 1, 50), 11);
await detailView.EditTrackAsync("Track Artist 12", "Track Title 12", new TimeSpan(0, 1, 50), new TimeSpan(0, 2, 0), 12);
await detailView.EditTrackAsync("Track Artist 13", "Track Title 13", new TimeSpan(0, 2, 0), new TimeSpan(0, 2, 10), 13);
await detailView.EditTrackAsync("Track Artist 14", "Track Title 14", new TimeSpan(0, 2, 10), new TimeSpan(0, 2, 20), 14);
await detailView.EditTrackAsync("Track Artist 15", "Track Title 15", new TimeSpan(0, 2, 20), new TimeSpan(0, 2, 30), 15);
await detailView.EditTrackAsync("Track Artist 16", "Track Title 16", new TimeSpan(0, 2, 30), null, 16);
await bar.OpenExportDialogAsync("Textfile");
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Next", Exact = true }).ClickAsync();
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Generate export" }).ClickAsync();
await Expect(TestPage.GetByRole(AriaRole.Button, new() { Name = "Download" })).ToBeVisibleAsync();
await Expect(TestPage.GetByRole(AriaRole.Button, new() { Name = "Copy to clipboard" })).ToBeVisibleAsync();
var downloadTask = TestPage.WaitForDownloadAsync();
await TestPage.GetByRole(AriaRole.Button, new() { Name = "Download" }).ClickAsync();
var download = await downloadTask;
Expand All @@ -97,6 +129,21 @@ public async Task DownloadText_GeneratesTextFile_WhenCuesheetIsValidAsync()
Assert.AreEqual(@"Cuesheet Artist 1 - Cuesheet Title 1

Track Artist 1 - Track Title 1 00:00:00
Track Artist 2 - Track Title 2 00:00:10
Track Artist 3 - Track Title 3 00:00:20
Track Artist 4 - Track Title 4 00:00:30
Track Artist 5 - Track Title 5 00:00:40
Track Artist 6 - Track Title 6 00:00:50
Track Artist 7 - Track Title 7 00:01:00
Track Artist 8 - Track Title 8 00:01:10
Track Artist 9 - Track Title 9 00:01:20
Track Artist 10 - Track Title 10 00:01:30
Track Artist 11 - Track Title 11 00:01:40
Track Artist 12 - Track Title 12 00:01:50
Track Artist 13 - Track Title 13 00:02:00
Track Artist 14 - Track Title 14 00:02:10
Track Artist 15 - Track Title 15 00:02:20
Track Artist 16 - Track Title 16 00:02:30

", content);
}
Expand Down
Loading