public async Task SaveButtonClicked_Test_Success(string runningTimeFieldEntry, string notesFieldEntry, string imageFilePathFieldEntry)
        {
            // arrange
            var fakeView = A.Fake <IAddMediaItemForm>();

            A.CallTo(() => fakeView.TitleFieldText).Returns("title");
            A.CallTo(() => fakeView.NumberFieldText).Returns("0123456789");
            A.CallTo(() => fakeView.RunningTimeFieldEntry).Returns(runningTimeFieldEntry);
            A.CallTo(() => fakeView.YearFieldEntry).Returns("2021");
            A.CallTo(() => fakeView.NotesFieldText).Returns(notesFieldEntry);
            A.CallTo(() => fakeView.ImageFilePathFieldText).Returns(imageFilePathFieldEntry);
            A.CallTo(() => fakeView.SelectedCategory).Returns("Dvd");
            A.CallTo(() => fakeView.SelectedTags).Returns(new List <string> {
                "tag"
            });
            var fakeMediaItemService = A.Fake <IMediaItemService>();

            A.CallTo(() => fakeMediaItemService.ExistsWithTitle("title")).Returns(false);
            var           fakeTagService      = A.Fake <ITagService>();
            var           fakeImageFileReader = A.Fake <IImageFileReader>();
            MockPresenter presenter           = new MockPresenter(fakeMediaItemService, fakeTagService, fakeView, fakeImageFileReader);

            // act
            await presenter.HandleSaveButtonClicked(null, null);

            // assert
            A.CallTo(() => fakeMediaItemService.Add(A <MediaItem> .That.Matches(i =>
                                                                                i.Title == "title" &&
                                                                                i.Number == 0123456789 &&
                                                                                i.ReleaseYear == 2021 &&
                                                                                i.Notes == notesFieldEntry &&
                                                                                i.Type == ItemType.Dvd))).MustHaveHappened();
            A.CallTo(() => fakeView.CloseDialog()).MustHaveHappened();
        }
        public async Task SaveButtonClicked_Test_ErrorAddingItem(string runningTimeFieldEntry, string notesFieldEntry, string imageFilePathFieldEntry)
        {
            // arrange
            var fakeView = A.Fake <IAddMediaItemForm>();

            A.CallTo(() => fakeView.TitleFieldText).Returns("title");
            A.CallTo(() => fakeView.NumberFieldText).Returns("0123456789");
            A.CallTo(() => fakeView.RunningTimeFieldEntry).Returns(runningTimeFieldEntry);
            A.CallTo(() => fakeView.YearFieldEntry).Returns("2021");
            A.CallTo(() => fakeView.NotesFieldText).Returns(notesFieldEntry);
            A.CallTo(() => fakeView.ImageFilePathFieldText).Returns(imageFilePathFieldEntry);
            A.CallTo(() => fakeView.SelectedCategory).Returns("Dvd");
            A.CallTo(() => fakeView.SelectedTags).Returns(new List <string> {
                "tag"
            });
            var fakeMediaItemService = A.Fake <IMediaItemService>();

            A.CallTo(() => fakeMediaItemService.ExistsWithTitle("title")).Returns(false);
            var           fakeTagService      = A.Fake <ITagService>();
            var           fakeImageFileReader = A.Fake <IImageFileReader>();
            MockPresenter presenter           = new MockPresenter(fakeMediaItemService, fakeTagService, fakeView, fakeImageFileReader);

            A.CallTo(() => fakeMediaItemService.Add(A <MediaItem> .That.Matches(i => i.Title == "title"))).Throws(new Exception("error"));

            // act
            await presenter.HandleSaveButtonClicked(null, null);

            // assert
            A.CallTo(() => fakeView.ShowErrorDialog("Error creating item", "error")).MustHaveHappened();
            Assert.IsTrue(fakeView.SaveButtonEnabled);
            Assert.IsTrue(fakeView.CancelButtonEnabled);
        }
        public async Task SaveButtonClicked_Test_ErrorWhenCheckingIfExists(string runningTimeFieldEntry, string notesFieldEntry, string imageFilePathFieldEntry)
        {
            // arrange
            var fakeView = A.Fake <IAddMediaItemForm>();

            A.CallTo(() => fakeView.TitleFieldText).Returns("title");
            A.CallTo(() => fakeView.NumberFieldText).Returns("0123456789");
            A.CallTo(() => fakeView.RunningTimeFieldEntry).Returns(runningTimeFieldEntry);
            A.CallTo(() => fakeView.YearFieldEntry).Returns("2021");
            A.CallTo(() => fakeView.NotesFieldText).Returns(notesFieldEntry);
            A.CallTo(() => fakeView.ImageFilePathFieldText).Returns(imageFilePathFieldEntry);
            var fakeMediaItemService = A.Fake <IMediaItemService>();

            A.CallTo(() => fakeMediaItemService.ExistsWithTitle("title")).Throws(new Exception("error"));
            var           fakeTagService      = A.Fake <ITagService>();
            var           fakeImageFileReader = A.Fake <IImageFileReader>();
            MockPresenter presenter           = new MockPresenter(fakeMediaItemService, fakeTagService, fakeView, fakeImageFileReader);

            // act
            await presenter.HandleSaveButtonClicked(null, null);

            // assert
            A.CallTo(() => fakeView.ShowErrorDialog("Error checking title.", "error")).MustHaveHappened();
            Assert.IsTrue(fakeView.SaveButtonEnabled);
            Assert.IsTrue(fakeView.CancelButtonEnabled);
        }