public async Task When_getting_playlistItems_from_YouTube_api_Then_they_are_saved_to_the_database(
            [Frozen] IYouTubeCleanupToolDbContext youTubeCleanupToolDbContext,
            [Frozen] IYouTubeCleanupToolDbContextFactory youTubeCleanupToolDbContextFactory,
            [Frozen] IYouTubeApi youTubeApi,
            PlaylistData playlist,
            List <PlaylistItemData> playlistItemData,
            GetAndCacheYouTubeData getAndCacheYouTubeData)
        {
            youTubeCleanupToolDbContextFactory.Create().Returns(youTubeCleanupToolDbContext);
            youTubeCleanupToolDbContext.GetPlaylists().Returns(new List <PlaylistData> {
                playlist
            });
            youTubeApi.GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()).Returns(TestExtensions.ToAsyncEnumerable(playlistItemData));

            youTubeCleanupToolDbContext.GetPlaylistItems(Arg.Any <string>()).Returns(new List <PlaylistItemData>());

            // Act
            await getAndCacheYouTubeData.GetPlaylistItems(Callback, CancellationToken.None);

            // Assert
            await foreach (var _ in youTubeApi.Received(1).GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()))
            {
            }
            await youTubeCleanupToolDbContext.Received(3).UpsertPlaylistItem(Arg.Any <PlaylistItemData>());

            await youTubeCleanupToolDbContext.Received(1).SaveChangesAsync();
        }
        public async Task When_getting_playlistItems_from_YouTube_api_Then_they_are_saved_to_the_database(
            [Frozen] IYouTubeCleanupToolDbContext youTubeCleanupToolDbContext,
            [Frozen] IYouTubeCleanupToolDbContextFactory youTubeCleanupToolDbContextFactory,
            [Frozen] IYouTubeApi youTubeApi,
            PlaylistData playlist,
            List <PlaylistItemData> playlistItemData,
            GetAndCacheYouTubeData getAndCacheYouTubeData)
        {
            youTubeCleanupToolDbContextFactory.Create().Returns(youTubeCleanupToolDbContext);
            youTubeCleanupToolDbContext.GetPlaylists().Returns(new List <PlaylistData> {
                playlist
            });
            youTubeApi.GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()).Returns(TestExtensions.ToAsyncEnumerable(playlistItemData));

            youTubeCleanupToolDbContext.GetPlaylistItems(Arg.Any <string>()).Returns(new List <PlaylistItemData>());

            var callback = new Action <PlaylistItemData, InsertStatus>((data, insertStatus) => _testOutputHelper.WriteLine($"{data.Title} - {insertStatus}"));

            // Act
            await getAndCacheYouTubeData.GetPlaylistItems(callback);

            // Assert
            await foreach (var _ in youTubeApi.Received(1).GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()))
            {
            }
            await youTubeCleanupToolDbContext.Received(3).UpsertPlaylistItem(Arg.Any <PlaylistItemData>());

            await youTubeCleanupToolDbContext.Received(1).SaveChangesAsync();
        }
Пример #3
0
        public async Task When_new_playlist_created_on_YouTube_and_refresh_happens_Then_playlist_inserted_into_ui_in_the_correct_location(
            [Frozen] IYouTubeCleanupToolDbContext youTubeCleanupToolDbContext,
            [Frozen] IYouTubeCleanupToolDbContextFactory youTubeCleanupToolDbContextFactory,
            [NoAutoProperties] MainWindowViewModel mainWindowViewModel
            )
        {
            youTubeCleanupToolDbContextFactory.Create().Returns(youTubeCleanupToolDbContext);
            var playlistData = new List <PlaylistData>()
            {
                new() { Id = "2", Title = "c" },
                new() { Id = "1", Title = "a" },
            };

            var playlistDataTwo = new List <PlaylistData>()
            {
                new() { Id = "2", Title = "c" },
                new() { Id = "1", Title = "a" },
                new() { Id = "3", Title = "b" },
            };

            youTubeCleanupToolDbContext.GetPlaylists().Returns(playlistData, playlistDataTwo);

            await mainWindowViewModel.LoadData();

            mainWindowViewModel.Playlists.Should().BeEquivalentTo(new List <WpfPlaylistData>
            {
                new() { Id = "1", Title = "a" },
                new() { Id = "2", Title = "c" }
            }, WithDefaultListCompare());
        public async Task When_getting_playlistItems_from_YouTube_api_Then_playlists_which_no_longer_exist_get_deleted_from_db(
            [Frozen] IYouTubeCleanupToolDbContext youTubeCleanupToolDbContext,
            [Frozen] IYouTubeCleanupToolDbContextFactory youTubeCleanupToolDbContextFactory,
            [Frozen] IYouTubeApi youTubeApi,
            PlaylistData playlist,

            GetAndCacheYouTubeData getAndCacheYouTubeData)
        {
            var playlistItems = new List <PlaylistItemData>
            {
                new()
                {
                    Id             = "1",
                    Title          = "a",
                    PlaylistDataId = playlist.Id
                },
                new()
                {
                    Id             = "2",
                    Title          = "b",
                    PlaylistDataId = playlist.Id
                }
            };

            youTubeCleanupToolDbContextFactory.Create().Returns(youTubeCleanupToolDbContext);
            youTubeCleanupToolDbContext.GetPlaylists().Returns(new List <PlaylistData> {
                playlist
            });
            youTubeApi.GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()).Returns(TestExtensions.ToAsyncEnumerable(playlistItems));

            var originalPlaylistItems = new List <PlaylistItemData>
            {
                new()
                {
                    Id             = "1",
                    Title          = "a",
                    PlaylistDataId = playlist.Id
                },
                new()
                {
                    Id             = "2",
                    Title          = "b",
                    PlaylistDataId = playlist.Id
                },
                new()
                {
                    Id             = "3",
                    Title          = "c",
                    PlaylistDataId = playlist.Id
                }
            };

            youTubeCleanupToolDbContext.GetPlaylistItems(Arg.Any <string>()).Returns(originalPlaylistItems);

            var callback = new Action <PlaylistItemData, InsertStatus>((data, insertStatus) => _testOutputHelper.WriteLine($"{data.Title} - {insertStatus}"));

            await getAndCacheYouTubeData.GetPlaylistItems(callback);

            await foreach (var _ in youTubeApi.Received(1).GetPlaylistItems(Arg.Any <string>(), Arg.Any <Func <string, Task> >()))
            {
            }
            await youTubeCleanupToolDbContext.Received(2).UpsertPlaylistItem(Arg.Any <PlaylistItemData>());

            youTubeCleanupToolDbContext.Received(1).RemovePlaylistItem(Arg.Any <PlaylistItemData>());
            await youTubeCleanupToolDbContext.Received(1).SaveChangesAsync();
        }
    }
}