1 /** 2 * Copyright (c) 2013-2023, 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 31 package com.jcabi.github.mock; 32 33 import com.jcabi.github.Reference; 34 import javax.json.Json; 35 import javax.json.JsonObject; 36 import org.hamcrest.MatcherAssert; 37 import org.hamcrest.Matchers; 38 import org.junit.Test; 39 40 /** 41 * Testcase for {@link MkReference}. 42 * @author Mihai Andronache (amihaiemil@gmail.com) 43 * @version $Id: 7775973c013fb0c99c7ca6cf0cd5e73f7f42f23d $ 44 * @checkstyle MultipleStringLiterals (500 lines) 45 */ 46 public final class MkReferenceTest { 47 48 /** 49 * MkReference can return its name. 50 * @throws Exception - If something goes wrong. 51 */ 52 @Test 53 public void returnsName() throws Exception { 54 MatcherAssert.assertThat( 55 this.reference().ref(), 56 Matchers.is("refs/tags/hello") 57 ); 58 } 59 60 /** 61 * MkReference can return its owner. 62 * @throws Exception - If something goes wrong. 63 */ 64 @Test 65 public void returnsRepo() throws Exception { 66 MatcherAssert.assertThat( 67 this.reference().repo(), 68 Matchers.notNullValue() 69 ); 70 } 71 72 /** 73 * MkReference can fetch json. 74 * @throws Exception - If something goes wrong. 75 */ 76 @Test 77 public void fetchesJson() throws Exception { 78 final Reference ref = this.reference(); 79 final JsonObject json = ref.json(); 80 MatcherAssert.assertThat( 81 json.getString("ref"), 82 Matchers.is("refs/tags/hello") 83 ); 84 MatcherAssert.assertThat( 85 json.getString("sha"), 86 Matchers.is("testsha") 87 ); 88 } 89 90 /** 91 * MkReference should be able to patch itself. 92 * @throws Exception - If something goes wrong. 93 */ 94 @Test 95 public void patchesRef() throws Exception { 96 final Reference ref = this.reference(); 97 final JsonObject json = Json.createObjectBuilder() 98 .add("sha", "testshaPATCH") 99 .build(); 100 ref.patch(json); 101 MatcherAssert.assertThat( 102 ref.json().getString("sha"), 103 Matchers.is("testshaPATCH") 104 ); 105 } 106 107 /** 108 * Return a Reference for testing. 109 * @return Reference 110 * @throws Exception - if something goes wrong. 111 */ 112 private Reference reference() throws Exception { 113 return new MkGithub().randomRepo().git() 114 .references().create("refs/tags/hello", "testsha"); 115 } 116 }