package org.mockserver.matchers; import org.junit.Test; import org.mockserver.model.Header; import org.mockserver.model.KeyToMultiValue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockserver.model.NottableString.not; /** * @author jamesdbloom */ public class HeaderMatcherTest { @Test public void shouldMatchMatchingHeader() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("header.*", "header.*") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchMatchingHeaderWhenNotApplied() { // given assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // then - not matcher assertFalse(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // and - not header assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header(not("headerTwoName"), not("headerTwoValue")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // and - not matcher and not header assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header(not("headerTwoName"), not("headerTwoValue")) ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldMatchMatchingHeaderWithNotHeaderAndNormalHeader() { // not matching header assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header(not("headerTwoName"), not("headerTwoValue")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // not extra header assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue"), new Header(not("headerThree"), not("headerThreeValueOne")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // not only header assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerThree"), not("headerThreeValueOne")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // not all headers (but matching) assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("header.*"), not(".*")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); // not all headers (but not matching name) assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("header.*"), not("header.*")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("notHeaderOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("notHeaderTwoName", "headerTwoValue") )))); // not all headers (but not matching value) assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("header.*"), not("header.*")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "notHeaderOneValueOne", "notHeaderOneValueTwo"), new Header("headerTwoName", "notHeaderTwoValue") )))); } @Test public void shouldMatchMatchingHeaderWithOnlyHeader() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerThree"), not("headerThreeValueOne")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerThree", "headerThreeValueOne") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerOneName"), not("headerOneValueOne"), not("headerOneValueTwo")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldMatchMatchingHeaderWithOnlyHeaderForEmptyList() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new ArrayList<KeyToMultiValue>() )).matches(new ArrayList<KeyToMultiValue>(Collections.singletonList( new Header("headerThree", "headerThreeValueOne") )))); assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerThree", "headerThreeValueOne") )).matches(new ArrayList<KeyToMultiValue>())); assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerThree"), not("headerThreeValueOne")) )).matches(new ArrayList<KeyToMultiValue>())); } @Test public void shouldNotMatchMatchingHeaderWithNotHeaderAndNormalHeader() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header(not("headerTwoName"), not("headerTwoValue")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchMatchingHeaderWithOnlyNotHeader() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerTwoName"), not("headerTwoValue")) )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchMatchingHeaderWithOnlyNotHeaderForBodyWithSingleHeader() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header(not("headerTwoName"), not("headerTwoValue")) )).matches(new ArrayList<KeyToMultiValue>(Collections.singletonList( new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldMatchNullExpectation() { assertTrue(new MultiValueMapMatcher(null).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchNullExpectationWhenNotApplied() { assertFalse(NotMatcher.not(new MultiValueMapMatcher(null)) .matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldMatchEmptyExpectation() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap()).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchEmptyExpectationWhenNotApplied() { assertFalse(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap())) .matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchIncorrectHeaderName() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("INCORRECTheaderTwoName", "headerTwoValue") )))); } @Test public void shouldMatchIncorrectHeaderNameWhenNotApplied() { assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("INCORRECTheaderTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchIncorrectHeaderValue() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "INCORRECTheaderTwoValue") )))); } @Test public void shouldMatchIncorrectHeaderValueWhenNotApplied() { assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "INCORRECTheaderTwoValue") )))); } @Test public void shouldNotMatchIncorrectHeaderNameAndValue() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("INCORRECTheaderTwoName", "INCORRECTheaderTwoValue") )))); } @Test public void shouldMatchIncorrectHeaderNameAndValueWhenNotApplied() { assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("INCORRECTheaderTwoName", "INCORRECTheaderTwoValue") )))); } @Test public void shouldNotMatchNullHeaderValue() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName") )))); } @Test public void shouldMatchNullHeaderValueWhenNotApplied() { assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName") )))); } @Test public void shouldMatchNullHeaderValueInExpectation() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "") )).matches(new ArrayList<KeyToMultiValue>(Arrays.asList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )))); } @Test public void shouldNotMatchMissingHeader() { assertFalse(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") )).matches(new ArrayList<KeyToMultiValue>(Collections.singletonList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo") )))); } @Test public void shouldMatchMissingHeaderWhenNotApplied() { assertTrue(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo"), new Header("headerTwoName", "headerTwoValue") ))).matches(new ArrayList<KeyToMultiValue>(Collections.singletonList( new Header("headerOneName", "headerOneValueOne", "headerOneValueTwo") )))); } @Test public void shouldMatchNullTest() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap()).matches(null)); } @Test public void shouldNotMatchNullTestWhenNotApplied() { assertFalse(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap())).matches(null)); } @Test public void shouldMatchEmptyTest() { assertTrue(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap()).matches(new ArrayList<KeyToMultiValue>())); } @Test public void shouldNotMatchEmptyTestWhenNotApplied() { assertFalse(NotMatcher.not(new MultiValueMapMatcher(KeyToMultiValue.toMultiMap())).matches(new ArrayList<KeyToMultiValue>())); } }