public async Task Test_Previous_Valid_Comic_When_Current_Is_Not_First()
        {
            //Arrange
            int mockId          = 406;
            int previousValidId = 403;
            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(previousValidId))
            .ReturnsAsync(GetMockedComicById(previousValidId));

            var comicRepository = new ComicRepository(mockComicApi.Object);

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

            var previousComic = await comicRepository.GetComicById(previousValidId);

            //Assert
            Assert.NotNull(result);
            Assert.Equal(previousValidId, result);
            Assert.NotNull(previousComic);
            Assert.Equal(previousComic.Num, result);
            Assert.Equal($"Testing {result.Value}", previousComic.Alt);
            Assert.Equal($"Test comic {result.Value}", previousComic.SafeTitle);
            Assert.Equal($"Test comic {result.Value}", previousComic.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(previousValidId), Times.Exactly(2));
            mockComicApi.Verify(mock => mock.GetComicById(mockId - 4), Times.Never());
        }