private void UpdateSongTags(SongModel song) { var songPath = storageOrganizer.GetSongFilePath(song); var songFileName = fileStorage.CheckoutFile(songPath); var tagData = new SongTagData(song); songTagger.SetTagData(songFileName, tagData); song.Size = CalculateFileSize(songFileName); song.Checksum = CalculateFileChecksum(songFileName); fileStorage.CommitFile(songFileName); }
public async Task CreateSong_ForSongContentWithFilledTags_ClearsExistingTags() { // Arrange var newSong = new SongModel { Title = "Дети Галактики", TreeTitle = "03 - Дети Галактики.mp3", Duration = TimeSpan.FromMilliseconds(12345), BitRate = 54321, }; var disc = await GetDisc(ReferenceData.DiscWithMissingFieldsId); disc.AddSong(newSong); var target = CreateTestTarget(); // Act await using var songContent = File.OpenRead("ContentForAdding/New Song With Tags.mp3"); await target.CreateSong(newSong, songContent, CancellationToken.None); // Assert var songFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "Disc With Missing Fields (CD 1)", "03 - Дети Галактики.mp3"); var expectedTagData = new SongTagData { Title = "Дети Галактики", }; var songTagger = GetService <ISongTagger>(); var tagData = songTagger.GetTagData(songFilePath); tagData.Should().BeEquivalentTo(expectedTagData, x => x.WithStrictOrdering()); await CheckLibraryConsistency(); }
public async Task UpdateSong_IfTagsRelatedDataWasChanged_UpdatesSongDataCorrectly() { // Arrange var updatedSong = await GetSong(ReferenceData.SongWithOptionalPropertiesFilledId1); var target = CreateTestTarget(); // Act var newArtist = await GetArtist(ReferenceData.Artist1Id); var newGenre = await GetGenre(ReferenceData.Genre2Id); void UpdateSong(SongModel song) { updatedSong.TrackNumber = 17; updatedSong.Title = "Дети Галактики"; updatedSong.Artist = newArtist; updatedSong.Genre = newGenre; } await target.UpdateSong(updatedSong, UpdateSong, CancellationToken.None); // Assert var referenceData = GetReferenceData(); var expectedSong = referenceData.SongWithOptionalPropertiesFilled1; expectedSong.TrackNumber = 17; expectedSong.Title = "Дети Галактики"; expectedSong.Artist = referenceData.Artist1; expectedSong.Genre = referenceData.Genre2; expectedSong.Size = 405604; expectedSong.Checksum = 3102138277; updatedSong.Should().BeEquivalentTo(expectedSong, x => x.WithStrictOrdering().IgnoringCyclicReferences()); var songFromRepository = await GetSong(ReferenceData.SongWithOptionalPropertiesFilledId1); songFromRepository.Should().BeEquivalentTo(expectedSong, x => x.WithStrictOrdering().IgnoringCyclicReferences()); var songFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "2010 - Афтары правды (CD 1)", "01 - Про женщин.mp3"); var fileInfo = new FileInfo(songFilePath); fileInfo.Length.Should().Be(405604); var expectedTagData = new SongTagData { Artist = "Guano Apes", Album = "Афтары правды", Year = 2010, Genre = "Alternative Rock", Track = 17, Title = "Дети Галактики", }; var songTagger = GetService <ISongTagger>(); var tagData = songTagger.GetTagData(songFilePath); tagData.Should().BeEquivalentTo(expectedTagData, x => x.WithStrictOrdering()); await CheckLibraryConsistency(typeof(BadTrackNumbersInconsistency), typeof(MultipleDiscGenresInconsistency)); }
public async Task CreateSong_ForSongWithAllOptionalPropertiesFilled_CreatesSongSuccessfully() { // Arrange var newSong = new SongModel { Title = "Дети Галактики", TreeTitle = "03 - Дети Галактики.mp3", TrackNumber = 3, Artist = await GetArtist(ReferenceData.Artist2Id), Genre = await GetGenre(ReferenceData.Genre1Id), Duration = TimeSpan.FromMilliseconds(12345), Rating = RatingModel.R7, BitRate = 54321, }; var disc = await GetDisc(ReferenceData.NormalDiscId); disc.AddSong(newSong); var target = CreateTestTarget(); // Act await using var songContent = File.OpenRead("ContentForAdding/New Song Without Tags.mp3"); await target.CreateSong(newSong, songContent, CancellationToken.None); // Assert newSong.Id.Should().Be(ReferenceData.NextSongId); var referenceData = GetReferenceData(); var expectedDisc = referenceData.NormalDisc; var expectedSong = new SongModel { Id = ReferenceData.NextSongId, Title = "Дети Галактики", TreeTitle = "03 - Дети Галактики.mp3", TrackNumber = 3, Artist = referenceData.Artist2, Genre = referenceData.Genre1, Duration = TimeSpan.FromMilliseconds(12345), Rating = RatingModel.R7, BitRate = 54321, Size = 416039, Checksum = 2259945390, ContentUri = "Belarusian/Neuro Dubel/2010 - Афтары правды (CD 1)/03 - Дети Галактики.mp3".ToContentUri(LibraryStorageRoot), }; expectedDisc.AddSong(expectedSong); var discFromRepository = await GetDisc(ReferenceData.NormalDiscId); discFromRepository.Should().BeEquivalentTo(expectedDisc, x => x.WithStrictOrdering().IgnoringCyclicReferences()); var songFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "2010 - Афтары правды (CD 1)", "03 - Дети Галактики.mp3"); var fileInfo = new FileInfo(songFilePath); fileInfo.Exists.Should().BeTrue(); fileInfo.Length.Should().Be(416039); var expectedTagData = new SongTagData { Artist = "Neuro Dubel", Album = "Афтары правды", Year = 2010, Genre = "Punk Rock", Track = 3, Title = "Дети Галактики", }; var songTagger = GetService <ISongTagger>(); var tagData = songTagger.GetTagData(songFilePath); tagData.Should().BeEquivalentTo(expectedTagData, x => x.WithStrictOrdering()); await CheckLibraryConsistency(); }
public async Task CreateSong_ForSongWithAllOptionalPropertiesNotFilled_CreatesSongSuccessfully() { // Arrange var newSong = new SongModel { Title = "Дети Галактики", TreeTitle = "03 - Дети Галактики.mp3", Duration = TimeSpan.FromMilliseconds(12345), BitRate = 54321, }; var disc = await GetDisc(ReferenceData.DiscWithMissingFieldsId); disc.AddSong(newSong); var target = CreateTestTarget(); // Act await using var songContent = File.OpenRead("ContentForAdding/New Song Without Tags.mp3"); await target.CreateSong(newSong, songContent, CancellationToken.None); // Assert newSong.Id.Should().Be(ReferenceData.NextSongId); var referenceData = GetReferenceData(); var expectedDisc = referenceData.DiscWithMissingFields; var expectedSong = new SongModel { Id = ReferenceData.NextSongId, Title = "Дети Галактики", TreeTitle = "03 - Дети Галактики.mp3", Duration = TimeSpan.FromMilliseconds(12345), BitRate = 54321, Size = 415898, Checksum = 3771089602, ContentUri = "Belarusian/Neuro Dubel/Disc With Missing Fields (CD 1)/03 - Дети Галактики.mp3".ToContentUri(LibraryStorageRoot), }; expectedDisc.AddSong(expectedSong); var discFromRepository = await GetDisc(ReferenceData.DiscWithMissingFieldsId); discFromRepository.Should().BeEquivalentTo(expectedDisc, x => x.WithStrictOrdering().IgnoringCyclicReferences()); var songFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "Disc With Missing Fields (CD 1)", "03 - Дети Галактики.mp3"); var fileInfo = new FileInfo(songFilePath); fileInfo.Exists.Should().BeTrue(); fileInfo.Length.Should().Be(415898); var expectedTagData = new SongTagData { Title = "Дети Галактики", }; var songTagger = GetService <ISongTagger>(); var tagData = songTagger.GetTagData(songFilePath); tagData.Should().BeEquivalentTo(expectedTagData, x => x.WithStrictOrdering()); await CheckLibraryConsistency(); }