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 com.google.common.base.Optional;
33 import com.jcabi.http.request.FakeRequest;
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 * Test case for {@link RtCommitsComparison}.
42 * @author Alexander Sinyagin (sinyagin.alexander@gmail.com)
43 * @version $Id: 7a061227034de4f94316c4a581b500446403aac0 $
44 */
45 public final class RtCommitsComparisonTest {
46
47 /**
48 * RtCommitsComparison can fetch JSON.
49 * @throws Exception If some problem inside
50 * @checkstyle MultipleStringLiterals (75 lines)
51 * @checkstyle ExecutableStatementCountCheck (75 lines)
52 */
53 @Test
54 public void fetchesJson() throws Exception {
55 final String sha = "fffffffffffffffffffffffffffffffffffffffe";
56 final String filename = "bar/quux.txt";
57 // @checkstyle MagicNumberCheck (3 lines)
58 final int additions = 7;
59 final int deletions = 2;
60 final int changes = 9;
61 final String patch = "some diff here";
62 // @checkstyle LineLength (3 lines)
63 final String bloburl = "https://api.jcabi-github.invalid/johndoe/my-repo/blob/fffffffffffffffffffffffffffffffffffffffe/bar/quux.txt";
64 final String rawurl = "https://api.jcabi-github.invalid/johndoe/my-repo/raw/fffffffffffffffffffffffffffffffffffffffe/bar/quux.txt";
65 final String contentsurl = "https://api.github.invalid/repos/johndoe/my-repo/contents/bar/quux.txt?ref=fffffffffffffffffffffffffffffffffffffffe";
66 final CommitsComparison comparison = new RtCommitsComparison(
67 new FakeRequest().withBody(
68 Json.createObjectBuilder()
69 .add("base_commit", Json.createObjectBuilder())
70 .add("commits", Json.createArrayBuilder())
71 .add(
72 "files",
73 Json.createArrayBuilder()
74 .add(
75 Json.createObjectBuilder()
76 .add("sha", sha)
77 .add("filename", filename)
78 .add("status", "added")
79 .add("additions", additions)
80 .add("deletions", deletions)
81 .add("changes", changes)
82 .add("patch", patch)
83 .add("blob_url", bloburl)
84 .add("raw_url", rawurl)
85 .add("contents_url", contentsurl)
86 .build()
87 )
88 .build()
89 )
90 .build().toString()
91 ),
92 RtCommitsComparisonTest.repo(),
93 "6dcb09b5b57875f334f61aebed695e2e4193db51",
94 "6dcb09b5b57875f334f61aebed695e2e4193db52"
95 );
96 final JsonObject json = comparison.json();
97 MatcherAssert.assertThat(
98 json.getJsonObject("base_commit"), Matchers.notNullValue()
99 );
100 MatcherAssert.assertThat(
101 json.getJsonArray("commits"), Matchers.notNullValue()
102 );
103 MatcherAssert.assertThat(
104 comparison.files(),
105 Matchers.<FileChange>iterableWithSize(1)
106 );
107 final FileChange.Smart file = new FileChange.Smart(
108 comparison.files().iterator().next()
109 );
110 MatcherAssert.assertThat(file.sha(), Matchers.equalTo(sha));
111 MatcherAssert.assertThat(file.filename(), Matchers.equalTo(filename));
112 MatcherAssert.assertThat(file.additions(), Matchers.equalTo(additions));
113 MatcherAssert.assertThat(file.deletions(), Matchers.equalTo(deletions));
114 MatcherAssert.assertThat(file.changes(), Matchers.equalTo(changes));
115 MatcherAssert.assertThat(
116 file.status(),
117 Matchers.equalTo(FileChange.Status.ADDED)
118 );
119 MatcherAssert.assertThat(
120 file.patch(),
121 Matchers.equalTo(Optional.of(patch))
122 );
123 }
124
125 /**
126 * Return repo for tests.
127 * @return Repository
128 */
129 private static Repo repo() {
130 return new RtGithub().repos()
131 .get(new Coordinates.Simple("user", "repo"));
132 }
133
134 }