public async Task Test_No_Next_Comic_When_Current_Is_Last()
        {
            //Arrange
            int mockId       = 1000;
            int?nextValidId  = null;
            var mockComicApi = new Mock <IXKCDApi>();

            mockComicApi.Setup(api => api.GetFirstComicId())
            .ReturnsAsync(GetValidMockedFirstComicId());
            mockComicApi.Setup(api => api.GetComicOfTheDay())
            .ReturnsAsync(GetValidMockedComicOfTheDay());
            mockComicApi.Setup(api => api.GetComicById(nextValidId ?? default))
            .ReturnsAsync(GetInvalidComic());

            var comicRepository = new ComicRepository(mockComicApi.Object);

            //Act
            var result = await comicRepository.GetNextComicId(mockId);

            var nextComic = await comicRepository.GetComicById(nextValidId ?? default);

            var lastComicId = await comicRepository.GetLastComicId();

            //Assert
            Assert.Null(result);
            Assert.Equal(nextValidId, result);
            Assert.Null(nextComic);
            Assert.Equal(lastComicId, mockId);
        }
        public async Task Test_Next_Valid_Comic_When_Current_Is_Not_Last()
        {
            //Arrange
            int mockId       = 403;
            int nextValidId  = 406;
            var mockComicApi = new Mock <IXKCDApi>();

            mockComicApi.Setup(api => api.GetFirstComicId())
            .ReturnsAsync(GetValidMockedFirstComicId());
            mockComicApi.Setup(api => api.GetComicOfTheDay())
            .ReturnsAsync(GetValidMockedComicOfTheDay());
            mockComicApi.Setup(api => api.GetComicById(404))
            .ReturnsAsync(GetInvalidComic());
            mockComicApi.Setup(api => api.GetComicById(405))
            .ReturnsAsync(GetInvalidComic());
            mockComicApi.Setup(api => api.GetComicById(nextValidId))
            .ReturnsAsync(GetMockedComicById(nextValidId));

            var comicRepository = new ComicRepository(mockComicApi.Object);

            //Act
            var result = await comicRepository.GetNextComicId(mockId);

            var nextComic = await comicRepository.GetComicById(nextValidId);

            //Assert
            Assert.NotNull(result);
            Assert.Equal(nextValidId, result);
            Assert.NotNull(nextComic);
            Assert.Equal(nextComic.Num, result);
            Assert.Equal($"Testing {result.Value}", nextComic.Alt);
            Assert.Equal($"Test comic {result.Value}", nextComic.SafeTitle);
            Assert.Equal($"Test comic {result.Value}", nextComic.Title);
            mockComicApi.Verify(mock => mock.GetComicById(mockId + 1), Times.Once());
            mockComicApi.Verify(mock => mock.GetComicById(mockId + 2), Times.Once());
            //Because of the fetch during the act
            mockComicApi.Verify(mock => mock.GetComicById(nextValidId), Times.Exactly(2));
            mockComicApi.Verify(mock => mock.GetComicById(mockId + 4), Times.Never());
        }