Пример #1
0
        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);
        }
Пример #2
0
        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();
        }
Пример #3
0
        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));
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }