public void Validate_HeaderValueSameAsExpectedStateValue_ShouldMatchIsTrue_ValidationSucceeds()
        {
            // Arrange
            const string headerKey   = "key";
            const string actualValue = "value";
            const bool   shouldMatch = true;
            Dictionary <string, string> savedState = new Dictionary <string, string>()
            {
                { "StateKey", actualValue }
            };
            ResponseHeaderValidator validator = new ResponseHeaderValidator(headerKey, null, "StateKey", false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, savedState);

            // Assert
            Assert.IsFalse(validationResult.HasFailures);
        }
        public void Validate_HeaderValueIsNullAndExpectedValueIsEmpty_ShouldMatchIsFalseAndIsRequiredIsTrue_ErrorMessageContainsHeaderKey()
        {
            // Arrange
            const string            headerKey   = "key";
            const string            actualValue = null;
            const bool              shouldMatch = false;
            const bool              isRequired  = true;
            ResponseHeaderValidator validator   = new ResponseHeaderValidator(headerKey, "", null, isRequired, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            string error = validationResult.Errors.First();

            Assert.IsTrue(error.Equals("'key' header value should be any non empty string."));
        }
        public void Validate_HeaderValueDifferentThanExpectedValueAndIncorrectExpectedStateKey_ShouldMatchIsTrue_ErrorMessageContainsExpectedStateValue()
        {
            // Arrange
            const string headerKey                 = "key";
            const string actualValue               = "value";
            const string expectedValue             = "incorrect expected value";
            const bool   shouldMatch               = true;
            Dictionary <string, string> savedState = new Dictionary <string, string>()
            {
                { "StateKey", "value" }
            };
            ResponseHeaderValidator validator = new ResponseHeaderValidator(headerKey, expectedValue, "IncorrectStateKey", false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, savedState);

            // Assert
            string error = validationResult.Errors.First();

            Assert.IsTrue(error.Contains(expectedValue));
        }
        public void Validate_HeaderValueIsNonEmptyAndExpectedValueIsEmpty_ShouldMatchAndIsRequiredAreTrue_ErrorMessageContainsHeaderKey()
        {
            // Arrange
            const string            headerKey   = "key";
            const string            actualValue = "value";
            const bool              shouldMatch = true;
            const bool              isRequired  = true;
            ResponseHeaderValidator validator   = new ResponseHeaderValidator(headerKey, "", null, isRequired, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            string error = validationResult.Errors.First();

            Assert.IsTrue(error.Contains(headerKey));
        }
        public void Validate_HeaderValueSameAsExpectedValue_ShouldMatchIsFalse_ErrorMessageContainsExpectedHeaderValue()
        {
            // Arrange
            const string            headerKey     = "key";
            const string            expectedValue = "testvalue";
            const string            actualValue   = expectedValue;
            const bool              shouldMatch   = false;
            ResponseHeaderValidator validator     = new ResponseHeaderValidator(headerKey, expectedValue, null, false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            string error = validationResult.Errors.First();

            Assert.IsTrue(error.Contains(expectedValue));
        }
        public void Validate_HeaderKeyDoesntExist_IsRequiredIsFalse_ValidationSucceeds()
        {
            // Arrange
            const string            headerKey     = "key";
            const string            expectedValue = "value";
            const bool              shouldMatch   = true;
            ResponseHeaderValidator validator     = new ResponseHeaderValidator(headerKey, expectedValue, null, false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            Assert.IsFalse(validationResult.HasFailures);
        }
        public void Validate_HeaderAndExpectedValueAreEmpty_ShouldMatchAndIsRequiredAreTrue_ValidationSucceeds()
        {
            // Arrange
            const string            headerKey   = "key";
            const string            actualValue = "";
            const bool              shouldMatch = true;
            const bool              isRequired  = true;
            ResponseHeaderValidator validator   = new ResponseHeaderValidator(headerKey, "", null, isRequired, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            Assert.IsFalse(validationResult.HasFailures);
        }
        public void Validate_HeaderValueSameAsExpectedValue_ShouldMatchIsFalse_ValidationFails()
        {
            // Arrange
            const string            headerKey     = "key";
            const string            expectedValue = "value";
            const string            actualValue   = expectedValue;
            const bool              shouldMatch   = false;
            ResponseHeaderValidator validator     = new ResponseHeaderValidator(headerKey, expectedValue, null, false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            Assert.IsTrue(validationResult.HasFailures);
        }
        public void Validate_HeaderValueSameAsExpectedValue_ShouldMatchIsFalse_OneErrorReturned()
        {
            // Arrange
            const string            headerKey     = "key";
            const string            expectedValue = "value";
            const string            actualValue   = expectedValue;
            const bool              shouldMatch   = false;
            ResponseHeaderValidator validator     = new ResponseHeaderValidator(headerKey, expectedValue, null, false, shouldMatch);

            ResponseDataMock responseData = new ResponseDataMock
            {
                Headers = new CaseInsensitiveDictionary()
                {
                    { headerKey, actualValue }
                }
            };

            // Act
            ValidationResult validationResult = validator.Validate(responseData, null, null);

            // Assert
            Assert.IsNotNull(validationResult.Errors);
            Assert.AreEqual(1, validationResult.Errors.Count());
        }