Skip to content

Commit 9036f64

Browse files
Merge pull request #467 from NeoCoderMatrix86/465-export-cuesheet-throws-exception-when-used-with-invalid-tracks
Export cuesheet throws exception when used with invalid tracks
2 parents 0392776 + 8077f07 commit 9036f64

5 files changed

Lines changed: 78 additions & 2 deletions

File tree

AudioCuesheetEditor.Tests/Services/IO/CuesheetExportServiceTests.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ public void CanGenerateExportfiles_ValidExtension_ReturnsEmpty()
6262
Title = "Test Title",
6363
Audiofile = new Audiofile("Audio.mp3")
6464
};
65-
cuesheet.AddTrack(new Track());
65+
cuesheet.AddTrack(new Track()
66+
{
67+
Position = 1,
68+
Begin = TimeSpan.Zero,
69+
End = new TimeSpan(0, 3, 43)
70+
});
6671
sessionStateContainerMock.SetupProperty(x => x.Cuesheet, cuesheet);
6772

6873
// Act
@@ -221,5 +226,35 @@ TRACK 02 AUDIO
221226
INDEX 01 01:54:00
222227
", contentString);
223228
}
229+
230+
[TestMethod]
231+
public void GenerateExportfiles_WithInvalidTracks_ReturnsEmpty()
232+
{
233+
// Arrange
234+
var cuesheet = new Cuesheet()
235+
{
236+
Artist = "Test Artist",
237+
Title = "Test Title",
238+
Audiofile = new Audiofile("Audio.mp3")
239+
};
240+
var track1 = new Track()
241+
{
242+
Position = 1,
243+
Begin = TimeSpan.Zero,
244+
};
245+
var track2 = new Track()
246+
{
247+
Position = 2,
248+
};
249+
cuesheet.AddTrack(track1);
250+
cuesheet.AddTrack(track2);
251+
sessionStateContainerMock.SetupProperty(x => x.Cuesheet, cuesheet);
252+
253+
// Act
254+
var result = cuesheetExportService.GenerateExportfiles("test.cue");
255+
256+
// Assert
257+
Assert.AreEqual(0, result.Count);
258+
}
224259
}
225260
}

AudioCuesheetEditor.Tests/Services/IO/ExportfileGeneratorTests.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,5 +220,44 @@ public void GenerateExportFile_ShouldHandleEmptyProfile()
220220
Assert.AreEqual(new TimeSpan(0, 8, 32), result.First().End);
221221
Assert.IsNotNull(result.First().Content);
222222
}
223+
224+
[TestMethod]
225+
public void GenerateExportFile_ReturnsEmpty_WithInvalidTracks()
226+
{
227+
// Arrange
228+
var exportProfile = new Exportprofile
229+
{
230+
Name = "TestProfile",
231+
SchemeHead = "%Cuesheet.Artist% - %Cuesheet.Title%",
232+
SchemeTracks = "%Track.Position% %Track.Artist% - %Track.Title%",
233+
Filename = "TestExport.txt"
234+
};
235+
var cuesheet = new Cuesheet()
236+
{
237+
Artist = "Test artist cuesheet",
238+
Title = "Test title cuesheet",
239+
Audiofile = new Audiofile("Test audiofile.mp3")
240+
};
241+
cuesheet.AddTrack(new Track()
242+
{
243+
Artist = "Test artist 1",
244+
Title = "Test title 1",
245+
Begin = TimeSpan.Zero,
246+
Position = 1
247+
});
248+
cuesheet.AddTrack(new Track()
249+
{
250+
Artist = "Test artist 2",
251+
Title = "Test title 2",
252+
Position = 2
253+
});
254+
mockSessionStateContainer.SetupProperty(x => x.Cuesheet, cuesheet);
255+
256+
// Act
257+
var result = exportfileGenerator.GenerateExportfiles(exportProfile);
258+
259+
// Assert
260+
Assert.AreEqual(0, result.Count);
261+
}
223262
}
224263
}

AudioCuesheetEditor/AudioCuesheetEditor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<ImplicitUsings>enable</ImplicitUsings>
88
<PackageProjectUrl>https://github.com/NeoCoderMatrix86/AudioCuesheetEditor</PackageProjectUrl>
99
<RazorLangVersion>3.0</RazorLangVersion>
10-
<Version>9.1.0</Version>
10+
<Version>9.2.0</Version>
1111
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
1212
<PublishTrimmed>true</PublishTrimmed>
1313
<RunAOTCompilation>true</RunAOTCompilation>

AudioCuesheetEditor/Services/IO/CuesheetExportService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public IEnumerable<ValidationMessage> CanGenerateExportfiles(string? filename)
3636
validationMessages.Add(new ValidationMessage("File extension is not '{0}'", FileExtensions.Cuesheet));
3737
}
3838
validationMessages.AddRange(_sessionStateContainer.Cuesheet.Validate().ValidationMessages);
39+
validationMessages.AddRange(_sessionStateContainer.Cuesheet.Tracks.Select(x => x.Validate()).SelectMany(x => x.ValidationMessages));
3940
return validationMessages;
4041
}
4142

AudioCuesheetEditor/Services/IO/ExportfileGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public IEnumerable<ValidationMessage> CanGenerateExportfiles(Exportprofile? expo
3838
validationMessages.Add(new ValidationMessage("No exportprofile selected!"));
3939
}
4040
validationMessages.AddRange(_sessionStateContainer.Cuesheet.Validate().ValidationMessages);
41+
validationMessages.AddRange(_sessionStateContainer.Cuesheet.Tracks.Select(x => x.Validate()).SelectMany(x => x.ValidationMessages));
4142
return validationMessages;
4243
}
4344

0 commit comments

Comments
 (0)