1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package com.jcabi.github;
31
32 import com.jcabi.http.Request;
33 import com.jcabi.http.mock.MkAnswer;
34 import com.jcabi.http.mock.MkContainer;
35 import com.jcabi.http.mock.MkGrizzlyContainer;
36 import com.jcabi.http.mock.MkQuery;
37 import com.jcabi.http.request.ApacheRequest;
38 import com.jcabi.http.request.FakeRequest;
39 import com.jcabi.http.request.JdkRequest;
40 import java.net.HttpURLConnection;
41 import javax.json.Json;
42 import javax.json.JsonObject;
43 import org.hamcrest.MatcherAssert;
44 import org.hamcrest.Matchers;
45 import org.junit.Rule;
46 import org.junit.Test;
47 import org.mockito.Mockito;
48
49
50
51
52
53
54
55
56
57
58 public final class RtReleasesTest {
59
60
61
62
63
64 @Rule
65 public final transient RandomPort resource = new RandomPort();
66
67
68
69
70 @Test
71 public void canFetchEmptyListOfReleases() {
72 final Releases releases = new RtReleases(
73 new FakeRequest().withBody("[]"),
74 RtReleasesTest.repo()
75 );
76 MatcherAssert.assertThat(
77 releases.iterate(),
78 Matchers.emptyIterable()
79 );
80 }
81
82
83
84
85 @Test
86 public void canFetchNonEmptyListOfReleases() {
87 final int number = 1;
88 final Releases releases = new RtReleases(
89 new FakeRequest().withBody(
90 Json.createArrayBuilder().add(
91 Json.createObjectBuilder()
92 .add("id", number)
93 .add("tag_name", "v1.0.0")
94 .add("name", "v1.0.0")
95 .add("body", "Release")
96 ).build().toString()
97 ),
98 RtReleasesTest.repo()
99 );
100 MatcherAssert.assertThat(
101 releases.iterate().iterator().next().number(),
102 Matchers.equalTo(number)
103 );
104 }
105
106
107
108
109 @Test
110 public void canFetchSingleRelease() {
111 final Releases releases = new RtReleases(
112 new FakeRequest(), RtReleasesTest.repo()
113 );
114 MatcherAssert.assertThat(releases.get(1), Matchers.notNullValue());
115 }
116
117
118
119
120
121 @Test
122 public void canCreateRelease() throws Exception {
123 final String tag = "v1.0.0";
124 final String rel = release(tag).toString();
125 try (
126 final MkContainer container = new MkGrizzlyContainer().next(
127 new MkAnswer.Simple(HttpURLConnection.HTTP_CREATED, rel)
128 ).next(new MkAnswer.Simple(HttpURLConnection.HTTP_OK, rel))
129 .start(this.resource.port())
130 ) {
131 final RtReleases releases = new RtReleases(
132 new JdkRequest(container.home()),
133 repo()
134 );
135 final Release release = releases.create(tag);
136 MatcherAssert.assertThat(
137 container.take().method(),
138 Matchers.equalTo(Request.POST)
139 );
140 MatcherAssert.assertThat(
141 release.json().getString("tag_name"),
142 Matchers.equalTo(tag)
143 );
144 container.stop();
145 }
146 }
147
148
149
150
151
152 @Test
153 public void canDeleteRelease() throws Exception {
154 try (
155 final MkContainer container = new MkGrizzlyContainer().next(
156 new MkAnswer.Simple(
157 HttpURLConnection.HTTP_NO_CONTENT,
158 ""
159 )
160 ).start(this.resource.port());
161 ) {
162 final Releases releases = new RtReleases(
163 new ApacheRequest(container.home()),
164 RtReleasesTest.repo()
165 );
166 releases.remove(1);
167 final MkQuery query = container.take();
168 MatcherAssert.assertThat(
169 query.uri().toString(),
170 Matchers.endsWith("/releases/1")
171 );
172 MatcherAssert.assertThat(
173 query.method(),
174 Matchers.equalTo(Request.DELETE)
175 );
176 container.stop();
177 }
178 }
179
180
181
182
183
184 private static Repo repo() {
185 final Repo repo = Mockito.mock(Repo.class);
186 Mockito.doReturn(new Coordinates.Simple("test", "releases"))
187 .when(repo).coordinates();
188 return repo;
189 }
190
191
192
193
194
195
196 private static JsonObject release(final String tag) {
197 return Json.createObjectBuilder()
198 .add("id", 1)
199 .add("tag_name", tag)
200 .build();
201 }
202 }