package org.mockserver.matchers; import org.junit.Test; import org.mockserver.model.Not; import org.mockserver.model.Parameter; 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 ParameterStringMatcherTest { @Test public void shouldMatchMatchingString() { assertTrue(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); assertTrue(new ParameterStringMatcher(Collections.singletonList( new Parameter("parameter.*", "parameter.*") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldNotMatchMatchingStringWhenNotApplied() { // given assertTrue(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // then - not matcher assertFalse(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // and - not parameter assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter(not("parameterTwoName"), not("parameterTwoValue")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // and - not parameter assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter(not("parameterTwoName"), not("parameterTwoValue")) ))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldMatchMatchingStringWithNotParameterAndNormalParameter() { // not matching parameter assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter(not("parameterTwoName"), not("parameterTwoValue")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // not extra parameter assertTrue(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter(not("parameterThree"), not("parameterThreeValueOne")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // not only parameter assertTrue(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterThree"), not("parameterThreeValueOne")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // not all parameters (but matching) assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameter.*"), not(".*")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); // not all parameters (but not matching name) assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameter.*"), not("parameter.*")) )).matches("" + "notParameterOneName=parameterOneValueOne" + "¬ParameterOneName=parameterOneValueTwo" + "¬ParameterTwoName=parameterTwoValue")); // not all parameters (but not matching value) assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameter.*"), not("parameter.*")) )).matches("" + "parameterOneName=notParameterOneValueOne" + "¶meterOneName=notParameterOneValueTwo" + "¶meterTwoName=notParameterTwoValue")); } @Test public void shouldMatchMatchingStringWithOnlyParameter() { assertTrue(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterThree"), not("parameterThreeValueOne")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter("parameterThree", "parameterThreeValueOne") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterOneName"), not("parameterOneValueOne"), not("parameterOneValueTwo")) )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); assertTrue(new ParameterStringMatcher(Collections.singletonList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldMatchMatchingStringWithOnlyParameterForEmptyBody() { assertTrue(new ParameterStringMatcher( Collections.<Parameter>emptyList() ).matches("parameterThree=parameterThreeValueOne")); assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter("parameterThree", "parameterThreeValueOne") )).matches("")); assertTrue(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterThree"), not("parameterThreeValueOne")) )).matches("")); } @Test public void shouldNotMatchMatchingStringWithNotParameterAndNormalParameter() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter(not("parameterTwoName"), not("parameterTwoValue")))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldNotMatchMatchingStringWithOnlyNotParameter() { assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterTwoName"), not("parameterTwoValue")))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldNotMatchMatchingStringWithOnlyNotParameterForBodyWithSingleParameter() { assertFalse(new ParameterStringMatcher(Collections.singletonList( new Parameter(not("parameterTwoName"), not("parameterTwoValue")))).matches("" + "parameterTwoName=parameterTwoValue")); } @Test public void shouldMatchNullExpectation() { assertTrue(new ParameterStringMatcher(null).matches("some_value")); } @Test public void shouldNotMatchNullExpectationWhenNotApplied() { assertFalse(NotMatcher.not(new ParameterStringMatcher(null)).matches("some_value")); } @Test public void shouldMatchEmptyExpectation() { assertTrue(new ParameterStringMatcher(Collections.<Parameter>emptyList()).matches("some_value")); } @Test public void shouldNotMatchEmptyExpectationWhenNotApplied() { assertFalse(NotMatcher.not(new ParameterStringMatcher(Collections.<Parameter>emptyList())).matches("some_value")); } @Test public void shouldNotMatchIncorrectParameterName() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterOneValueOne" + "&INCORRECTParameterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldMatchIncorrectParameterNameWhenNotApplied() { assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterOneValueOne" + "&INCORRECTParameterOneName=parameterOneValueTwo" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldNotMatchIncorrectParameterValue() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=INCORRECTParameterTwoValue")); } @Test public void shouldMatchIncorrectParameterValueWhenNotApplied() { assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "¶meterTwoName=INCORRECTParameterTwoValue")); } @Test public void shouldNotMatchIncorrectParameterNameAndValue() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "&INCORRECTParameterTwoName=INCORRECTParameterTwoValue")); } @Test public void shouldMatchIncorrectParameterNameAndValueWhenNotApplied() { assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterOneValueOne", "parameterOneValueTwo"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterOneValueOne" + "¶meterOneName=parameterOneValueTwo" + "&INCORRECTParameterTwoName=INCORRECTParameterTwoValue")); } @Test public void shouldNotMatchNullParameterValue() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterValueOne"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterValueOne" + "¶meterTwoName=")); } @Test public void shouldMatchNullParameterValueWhenNotApplied() { assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterValueOne"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterValueOne" + "¶meterTwoName=")); } @Test public void shouldMatchNullParameterValueInExpectation() { assertTrue(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterValueOne"), new Parameter("parameterTwoName", "") )).matches("" + "parameterOneName=parameterValueOne" + "¶meterTwoName=parameterTwoValue")); } @Test public void shouldNotMatchMissingParameter() { assertFalse(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterValueOne"), new Parameter("parameterTwoName", "parameterTwoValue") )).matches("" + "parameterOneName=parameterValueOne")); } @Test public void shouldMatchMissingParameterWhenNotApplied() { assertTrue(NotMatcher.not(new ParameterStringMatcher(Arrays.asList( new Parameter("parameterOneName", "parameterValueOne"), new Parameter("parameterTwoName", "parameterTwoValue") ))).matches("" + "parameterOneName=parameterValueOne")); } @Test public void shouldMatchNullTest() { assertTrue(new ParameterStringMatcher(Collections.<Parameter>emptyList()).matches(null)); } @Test public void shouldNotMatchNullTestWhenNotApplied() { assertFalse(NotMatcher.not(new ParameterStringMatcher(Collections.<Parameter>emptyList())).matches(null)); } @Test public void shouldMatchEmptyTest() { assertTrue(new ParameterStringMatcher(Collections.<Parameter>emptyList()).matches("")); } @Test public void shouldNotMatchEmptyTestWhenNotApplied() { assertFalse(NotMatcher.not(new ParameterStringMatcher(Collections.<Parameter>emptyList())).matches("")); } }