public async Task ValidationCacheService_AddValidNonPresentKeyAndValidValue_ShouldWork()
        {
            // Arrange
            string key       = "some key";
            var    valueMock = new Mock <IValidationCacheServiceModel>();

            var repositoryMock = new Mock <IValidationCacheDataRepository>();

            repositoryMock
            .Setup(r => r.Add(key, It.IsAny <IValidationCacheEntity>()))
            .Returns(Task.FromResult <object>(true));

            var dateTimeProviderMock = new Mock <IDateTimeProvider>();

            var service = new ValidationCacheService(repositoryMock.Object, dateTimeProviderMock.Object);

            // Act
            var result = await service.Add(key, valueMock.Object);

            // Asset
            Assert.That(result, Is.EqualTo(true));

            repositoryMock.Verify(r => r.Add(key, It.IsAny <IValidationCacheEntity>()), Times.Once);
            dateTimeProviderMock.VerifyGet(p => p.Now, Times.Once);
        }
        public void ValidationCacheService_AddWithInvalidKeyAndNullValue_ShouldThrowArgumentNullException(string key)
        {
            // Arrange
            var repositoryMock       = new Mock <IValidationCacheDataRepository>();
            var dateTimeProviderMock = new Mock <IDateTimeProvider>();
            var service = new ValidationCacheService(repositoryMock.Object, dateTimeProviderMock.Object);

            // Act + Assert
            Assert.ThrowsAsync <ArgumentNullException>(() =>
            {
                return(service.Add(key, null));
            });

            repositoryMock.Verify(p => p.Add(It.IsAny <string>(), It.IsAny <IValidationCacheEntity>()), Times.Never);
            dateTimeProviderMock.VerifyGet(p => p.Now, Times.Never);
        }
        public void ValidationCacheService_AddWithValidKeyAndNullValue_ShouldThrowArgumentNullExceptionWithCorrectParamName()
        {
            // Arrange
            string key                  = "some key";
            var    repositoryMock       = new Mock <IValidationCacheDataRepository>();
            var    dateTimeProviderMock = new Mock <IDateTimeProvider>();
            var    service              = new ValidationCacheService(repositoryMock.Object, dateTimeProviderMock.Object);

            // Act + Assert
            var exception = Assert.ThrowsAsync <ArgumentNullException>(() =>
            {
                return(service.Add(key, null));
            });

            Assert.AreEqual(Constants.ValueParamName, exception.ParamName);

            repositoryMock.Verify(p => p.Add(It.IsAny <string>(), It.IsAny <IValidationCacheEntity>()), Times.Never);
            dateTimeProviderMock.VerifyGet(p => p.Now, Times.Never);
        }