public void GeneratePlaylist_CallsGenerate()
        {
            // arrange
            SetupMockControlFileFor1Podcast();
            ViewModel.Initialise();

            // act
            ViewModel.GeneratePlaylist();

            // assert
            A.CallTo(() => MockCrashReporter.LogNonFatalException(A <Exception> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => MockPlaylistGenerator.GeneratePlaylist(MockControlFile, "/sdcard/sourceroot", true, A <EventHandler <StatusUpdateEventArgs> > .Ignored)).MustHaveHappened(1, Times.Exactly);
        }
        public void GeneratePlaylist_HandlesErrors()
        {
            // arrange
            SetupMockControlFileFor1Podcast();
            ViewModel.Initialise();
            var testException = new Exception();

            A.CallTo(() => MockPlaylistGenerator.GeneratePlaylist(A <IReadOnlyControlFile> .Ignored, A <string> .Ignored, A <bool> .Ignored, A <EventHandler <StatusUpdateEventArgs> > .Ignored)).Throws(testException);

            // act
            ViewModel.GeneratePlaylist();

            // assert
            A.CallTo(() => MockCrashReporter.LogNonFatalException(testException)).MustHaveHappened(1, Times.Exactly);
            Assert.AreEqual("Mocked playlist error", ObservedResults.LastToastMessage);
        }
        public void GeneratePlaylist_StatusUpdates()
        {
            // arrange
            SetupMockControlFileFor1Podcast();
            ViewModel.Initialise();
            A.CallTo(() => MockPlaylistGenerator.GeneratePlaylist(MockControlFile, "/sdcard/sourceroot", true, A <EventHandler <StatusUpdateEventArgs> > .Ignored))
            .Invokes((IReadOnlyControlFile control, string root, bool copy, EventHandler <StatusUpdateEventArgs> statusUpdateHandler) =>
            {
                statusUpdateHandler?.Invoke(this, new StatusUpdateEventArgs(StatusUpdateLevel.Status, "status message", true, null));
            });


            // act
            ViewModel.GeneratePlaylist();

            // assert
            A.CallTo(() => MockCrashReporter.LogNonFatalException(A <Exception> .Ignored)).MustNotHaveHappened();
            Assert.AreEqual("status message", ObservedResults.LastToastMessage);
        }