1 /* 2 * Copyright (c) 2011-2022, jcabi.com 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 1) Redistributions of source code must retain the above 8 * copyright notice, this list of conditions and the following 9 * disclaimer. 2) Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 3) Neither the name of the jcabi.com nor 13 * the names of its contributors may be used to endorse or promote 14 * products derived from this software without specific prior written 15 * permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 28 * OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 package com.jcabi.http.mock; 31 32 import java.net.URI; 33 import java.util.Collections; 34 import org.hamcrest.MatcherAssert; 35 import org.hamcrest.Matchers; 36 import org.junit.jupiter.api.Test; 37 import org.mockito.Mockito; 38 39 /** 40 * Test case for {@link MkQueryMatchers}. 41 * 42 * @since 1.5 43 */ 44 final class MkQueryMatchersTest { 45 46 /** 47 * MkQueryMatchers should be able to match MkQuery body. 48 */ 49 @Test 50 void canMatchBody() { 51 final String body = "Hello \u20ac!"; 52 final MkQuery query = Mockito.mock(MkQuery.class); 53 Mockito.doReturn(body).when(query).body(); 54 MatcherAssert.assertThat( 55 query, 56 MkQueryMatchers.hasBody( 57 Matchers.is(body) 58 ) 59 ); 60 } 61 62 /** 63 * MkQueryMatchers should be able to match MkQuery header. 64 */ 65 @Test 66 void canMatchHeader() { 67 final String header = "Content-Type"; 68 final String value = "application/json"; 69 final MkQuery query = Mockito.mock(MkQuery.class); 70 Mockito.doReturn( 71 Collections.singletonMap(header, Collections.singletonList(value)) 72 ).when(query).headers(); 73 MatcherAssert.assertThat( 74 query, 75 MkQueryMatchers.hasHeader( 76 header, 77 Matchers.contains(value) 78 ) 79 ); 80 } 81 82 /** 83 * MkQueryMatchers should be able to match MkQuery raw path. 84 */ 85 @Test 86 void canMatchPath() { 87 final URI body = URI.create("http://example.com/index.html?y=x"); 88 final MkQuery query = Mockito.mock(MkQuery.class); 89 Mockito.doReturn(body).when(query).uri(); 90 MatcherAssert.assertThat( 91 query, 92 MkQueryMatchers.hasPath( 93 Matchers.is("/index.html") 94 ) 95 ); 96 } 97 98 /** 99 * MkQueryMatchers should be able to match MkQuery raw query. 100 */ 101 @Test 102 void canMatchQuery() { 103 final URI body = URI.create("http://example.com/?x=10"); 104 final MkQuery query = Mockito.mock(MkQuery.class); 105 Mockito.doReturn(body).when(query).uri(); 106 MatcherAssert.assertThat( 107 query, 108 MkQueryMatchers.hasQuery( 109 Matchers.is("x=10") 110 ) 111 ); 112 } 113 114 }