public async Task IsPrimeNumberAsync_value_not_cached_should_return_service_should_be_called_once()
        {
            var testValue = 5;
            var key       = $@"{testValue}_is_prime";
            var service   = new PrimeNumberCacheProxyService(mockRepository.Object, mockPrimeNumberService.Object);

            mockRepository.Setup(mock => mock.Has(key)).Returns(false);
            mockPrimeNumberService.Setup(mock => mock.IsPrimeNumberAsync(testValue)).Returns(Task.FromResult(true));
            var result = await service.IsPrimeNumberAsync(testValue);

            Assert.IsTrue(result);
            mockRepository.Verify(mock => mock.Has(key), Times.Once);
            mockRepository.Verify(mock => mock.GetAsync <bool>(key), Times.Never);
            mockPrimeNumberService.Verify(mock => mock.IsPrimeNumberAsync(It.IsAny <int>()), Times.Once);

            mockRepository         = new Mock <ICacheRepository>();
            mockPrimeNumberService = new Mock <IPrimeNumberService>();
            service = new PrimeNumberCacheProxyService(mockRepository.Object, mockPrimeNumberService.Object);
            mockRepository.Setup(mock => mock.Has(key)).Returns(false);
            mockPrimeNumberService.Setup(mock => mock.IsPrimeNumberAsync(testValue)).Returns(Task.FromResult(false));
            result = await service.IsPrimeNumberAsync(testValue);

            Assert.IsFalse(result);
            mockRepository.Verify(mock => mock.Has(key), Times.Once);
            mockRepository.Verify(mock => mock.GetAsync <bool>(key), Times.Never);
            mockPrimeNumberService.Verify(mock => mock.IsPrimeNumberAsync(testValue), Times.Once);
            mockPrimeNumberService.Verify(mock => mock.GetNextPrimeNumberAsync(It.IsAny <int>()), Times.Never);
        }
        public async Task GetNextPrimeNumberAsync_value_cached_should_return_service_never_called()
        {
            var testValue  = 5;
            var testResult = 7;
            var key        = $@"{testValue}_next";
            var service    = new PrimeNumberCacheProxyService(mockRepository.Object, mockPrimeNumberService.Object);

            mockRepository.Setup(mock => mock.Has(key)).Returns(true);
            mockRepository.Setup(mock => mock.GetAsync <int>(key)).Returns(Task.FromResult(testResult));
            var result = await service.GetNextPrimeNumberAsync(testValue);

            Assert.AreEqual(result, testResult);
            mockRepository.Verify(mock => mock.Has(key), Times.Once);
            mockRepository.Verify(mock => mock.GetAsync <int>(key), Times.Once);
            mockPrimeNumberService.Verify(mock => mock.GetNextPrimeNumberAsync(It.IsAny <int>()), Times.Never);
            mockPrimeNumberService.Verify(mock => mock.IsPrimeNumberAsync(It.IsAny <int>()), Times.Never);
        }