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.jcabi.github.mock.MkGithub;
33 import com.jcabi.http.Request;
34 import com.jcabi.http.mock.MkAnswer;
35 import com.jcabi.http.mock.MkContainer;
36 import com.jcabi.http.mock.MkGrizzlyContainer;
37 import com.jcabi.http.request.ApacheRequest;
38 import com.jcabi.http.request.FakeRequest;
39 import java.io.IOException;
40 import java.net.HttpURLConnection;
41 import javax.json.Json;
42 import org.hamcrest.MatcherAssert;
43 import org.hamcrest.Matchers;
44 import org.junit.Rule;
45 import org.junit.Test;
46
47 /**
48 * Test case for {@link RtGistComment}.
49 * @author Giang Le (giang@vn-smartsolutions.com)
50 * @version $Id: 0d1d3702636d555c46d21b2ce6a195eb974493e6 $
51 * @checkstyle ClassDataAbstractionCouplingCheck (150 lines)
52 */
53 public class RtGistCommentTest {
54
55 /**
56 * The rule for skipping test if there's BindException.
57 * @checkstyle VisibilityModifierCheck (3 lines)
58 */
59 @Rule
60 public final transient RandomPort resource = new RandomPort();
61
62 /**
63 * RtGistComment can patch comment and return new json.
64 * @throws IOException if has some problems with json parsing.
65 */
66 @Test
67 public final void patchAndCheckJsonGistComment() throws IOException {
68 final int identifier = 1;
69 final String idString = "id";
70 final String bodyString = "body";
71 final String body = "somebody";
72 final String patchedBody = "some patchedbody";
73 final MkAnswer first = new MkAnswer.Simple(
74 HttpURLConnection.HTTP_OK,
75 Json.createObjectBuilder()
76 .add(bodyString, body)
77 .add(idString, identifier)
78 .build().toString()
79 );
80 final MkAnswer second = new MkAnswer.Simple(
81 HttpURLConnection.HTTP_OK,
82 Json.createObjectBuilder()
83 .add(bodyString, patchedBody)
84 .add(idString, identifier)
85 .build().toString()
86 );
87 final MkAnswer third = new MkAnswer.Simple(
88 HttpURLConnection.HTTP_OK,
89 Json.createObjectBuilder()
90 .add(bodyString, body)
91 .add(idString, identifier)
92 .build().toString()
93 );
94 try (
95 final MkContainer container =
96 new MkGrizzlyContainer().next(first).next(second).next(third)
97 .start(this.resource.port());
98 final MkContainer gistContainer = new MkGrizzlyContainer()
99 .start(this.resource.port())) {
100 final RtGist gist =
101 new RtGist(
102 new MkGithub(),
103 new ApacheRequest(gistContainer.home()), "someName"
104 );
105 final RtGistComment comment = new RtGistComment(
106 new ApacheRequest(container.home()), gist, identifier
107 );
108 comment.patch(Json.createObjectBuilder()
109 .add(bodyString, patchedBody)
110 .add(idString, identifier)
111 .build()
112 );
113 MatcherAssert.assertThat(
114 comment.json().getString(bodyString),
115 Matchers.equalTo(patchedBody)
116 );
117 container.stop();
118 gistContainer.stop();
119 }
120 }
121
122 /**
123 * RtGistComment can remove comment.
124 * @throws IOException if has some problems with json parsing.
125 */
126 @Test
127 public final void removeGistComment() throws IOException {
128 final int identifier = 1;
129 try (
130 final MkContainer container = new MkGrizzlyContainer().next(
131 new MkAnswer.Simple(HttpURLConnection.HTTP_NO_CONTENT, "")
132 ).start(this.resource.port())) {
133 final RtGist gist = new RtGist(
134 new MkGithub(),
135 new FakeRequest().withStatus(HttpURLConnection.HTTP_NO_CONTENT),
136 "gistName"
137 );
138 final RtGistComment comment = new RtGistComment(
139 new ApacheRequest(container.home()), gist, identifier
140 );
141 comment.remove();
142 MatcherAssert.assertThat(
143 container.take().method(),
144 Matchers.equalTo(Request.DELETE)
145 );
146 container.stop();
147 }
148 }
149 }