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 package com.jcabi.github;
31
32 import java.io.IOException;
33 import java.net.URL;
34 import javax.json.Json;
35 import org.hamcrest.MatcherAssert;
36 import org.hamcrest.Matchers;
37 import org.junit.Test;
38 import org.mockito.Mockito;
39
40 /**
41 * Test case for {@link RepoCommit}.
42 * @author Paul Polischuk (ppol@ua.fm)
43 * @version $Id: 5c87f4aa3d91f41e7f6f0495267ab85e0d49b616 $
44 * @checkstyle MultipleStringLiterals (500 lines)
45 */
46 public class RepoCommitTest {
47
48 /**
49 * RepoCommit.Smart can fetch url property from RepoCommit.
50 * @throws Exception If some problem inside
51 */
52 @Test
53 public final void fetchesUrl() throws Exception {
54 final RepoCommit commit = Mockito.mock(RepoCommit.class);
55 // @checkstyle LineLength (1 line)
56 final String prop = "https://api.github.com/repos/pengwynn/octokit/contents/README.md";
57 Mockito.doReturn(
58 Json.createObjectBuilder()
59 .add("url", prop)
60 .build()
61 ).when(commit).json();
62 MatcherAssert.assertThat(
63 new RepoCommit.Smart(commit).url(),
64 Matchers.is(new URL(prop))
65 );
66 }
67
68 /**
69 * RepoCommit.Smart can fetch message property from RepoCommit.
70 * @throws Exception If some problem inside
71 */
72 @Test
73 public final void fetchesMessage() throws Exception {
74 final RepoCommit commit = Mockito.mock(RepoCommit.class);
75 Mockito.doReturn(
76 Json.createObjectBuilder().add(
77 "commit",
78 Json.createObjectBuilder().add("message", "hello, world!")
79 ).build()
80 ).when(commit).json();
81 MatcherAssert.assertThat(
82 new RepoCommit.Smart(commit).message(),
83 Matchers.startsWith("hello, ")
84 );
85 }
86
87 /**
88 * RtRepoCommit can verify status.
89 * @throws IOException If fails
90 */
91 @Test
92 public final void verifiesStatus() throws IOException {
93 final RepoCommit commit = Mockito.mock(RepoCommit.class);
94 Mockito.doReturn(
95 Json.createObjectBuilder().add(
96 "commit",
97 Json.createObjectBuilder().add(
98 "verification",
99 Json.createObjectBuilder().add("verified", true)
100 ).build()
101 ).build()
102 ).when(commit).json();
103 MatcherAssert.assertThat(
104 new RepoCommit.Smart(commit).isVerified(),
105 Matchers.is(true)
106 );
107 }
108
109 /**
110 * RtRepoCommit can read author's login.
111 * @throws IOException If fails
112 */
113 @Test
114 public final void readsAuthorLogin() throws IOException {
115 final RepoCommit commit = Mockito.mock(RepoCommit.class);
116 final String login = "jeff";
117 Mockito.doReturn(
118 Json.createObjectBuilder().add(
119 "commit",
120 Json.createObjectBuilder().add(
121 "author",
122 Json.createObjectBuilder().add("name", login)
123 ).build()
124 ).build()
125 ).when(commit).json();
126 MatcherAssert.assertThat(
127 new RepoCommit.Smart(commit).author(),
128 Matchers.equalTo(login)
129 );
130 }
131 }