View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2013-2025 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.jcabi.github;
6   
7   import jakarta.json.Json;
8   import jakarta.json.JsonValue;
9   import java.io.IOException;
10  import java.text.ParseException;
11  import org.hamcrest.MatcherAssert;
12  import org.hamcrest.Matchers;
13  import org.junit.jupiter.api.Test;
14  import org.mockito.Mockito;
15  
16  /**
17   * Test case for {@link Release}.
18   * @since 0.1
19   * @checkstyle MultipleStringLiteralsCheck (400 lines)
20   */
21  @SuppressWarnings({"PMD.TooManyMethods", "PMD.AvoidDuplicateLiterals"})
22  final class ReleaseTest {
23  
24      @Test
25      void fetchesUrls() throws IOException {
26          final Release release = Mockito.mock(Release.class);
27          final String url = "http://url";
28          Mockito.doReturn(
29              Json.createObjectBuilder()
30                  .add("url", url)
31                  .build()
32          ).when(release).json();
33          final Release.Smart smart = new Release.Smart(release);
34          MatcherAssert.assertThat(
35              "Values are not equal",
36              smart.url().toString(),
37              Matchers.equalTo(url)
38          );
39      }
40  
41      @Test
42      void fetchesHtmlUrls() throws IOException {
43          final Release release = Mockito.mock(Release.class);
44          final String htmlurl = "http://html_url";
45          Mockito.doReturn(
46              Json.createObjectBuilder()
47                  .add("html_url", htmlurl)
48                  .build()
49          ).when(release).json();
50          final Release.Smart smart = new Release.Smart(release);
51          MatcherAssert.assertThat(
52              "Values are not equal",
53              smart.htmlUrl().toString(),
54              Matchers.equalTo(htmlurl)
55          );
56      }
57  
58      @Test
59      void fetchesAssetsHtmlUrls() throws IOException {
60          final Release release = Mockito.mock(Release.class);
61          final String assetsurl = "http://assets_url";
62          Mockito.doReturn(
63              Json.createObjectBuilder()
64                  .add("assets_url", assetsurl)
65                  .build()
66          ).when(release).json();
67          final Release.Smart smart = new Release.Smart(release);
68          MatcherAssert.assertThat(
69              "Values are not equal",
70              smart.assetsUrl().toString(),
71              Matchers.equalTo(assetsurl)
72          );
73      }
74  
75      @Test
76      void fetchesUploadHtmlUrls() throws IOException {
77          final Release release = Mockito.mock(Release.class);
78          final String uploadurl = "http://upload_url";
79          Mockito.doReturn(
80              Json.createObjectBuilder()
81                  .add("upload_url", uploadurl)
82                  .build()
83          ).when(release).json();
84          final Release.Smart smart = new Release.Smart(release);
85          MatcherAssert.assertThat(
86              "Values are not equal",
87              smart.uploadUrl().toString(),
88              Matchers.equalTo(uploadurl)
89          );
90      }
91  
92      @Test
93      void testId() {
94          final Release release = Mockito.mock(Release.class);
95          Mockito.doReturn(1).when(release).number();
96          final Release.Smart smart = new Release.Smart(release);
97          MatcherAssert.assertThat(
98              "Values are not equal",
99              smart.number(),
100             Matchers.equalTo(1)
101         );
102     }
103 
104     @Test
105     void fetchTag() throws IOException {
106         final Release release = Mockito.mock(Release.class);
107         final String tag = "v1.0.0";
108         Mockito.doReturn(
109             Json.createObjectBuilder()
110                 .add("tag_name", tag)
111                 .build()
112         ).when(release).json();
113         final Release.Smart smart = new Release.Smart(release);
114         MatcherAssert.assertThat(
115             "Values are not equal",
116             smart.tag(),
117             Matchers.equalTo(tag)
118         );
119     }
120 
121     @Test
122     void fetchProperties() throws IOException {
123         final Release release = Mockito.mock(Release.class);
124         final String master = "master";
125         Mockito.doReturn(
126             Json.createObjectBuilder()
127                 .add("target_commitish", master)
128                 .build()
129         ).when(release).json();
130         final Release.Smart smart = new Release.Smart(release);
131         MatcherAssert.assertThat(
132             "Values are not equal",
133             smart.commitish(),
134             Matchers.equalTo(master)
135         );
136     }
137 
138     @Test
139     void fetchName() throws IOException {
140         final Release release = Mockito.mock(Release.class);
141         final String name = "v1";
142         // @checkstyle MultipleStringLiterals (3 lines)
143         Mockito.doReturn(
144             Json.createObjectBuilder()
145                 .add("name", name)
146                 .build()
147         ).when(release).json();
148         final Release.Smart smart = new Release.Smart(release);
149         MatcherAssert.assertThat(
150             "Values are not equal",
151             smart.hasName(),
152             Matchers.is(true)
153         );
154         MatcherAssert.assertThat(
155             "Values are not equal",
156             smart.name(),
157             Matchers.equalTo(name)
158         );
159     }
160 
161     /**
162      * Release.Smart can determine if the release does not have a name
163      * (NULL json value).
164      */
165     @Test
166     void indicatesNoName() throws IOException {
167         final Release release = Mockito.mock(Release.class);
168         Mockito.doReturn(
169             Json.createObjectBuilder()
170                 .add("name", JsonValue.NULL)
171                 .build()
172         ).when(release).json();
173         final Release.Smart smart = new Release.Smart(release);
174         MatcherAssert.assertThat(
175             "Values are not equal",
176             smart.hasName(),
177             Matchers.is(false)
178         );
179     }
180 
181     @Test
182     void fetchBody() throws IOException {
183         final Release release = Mockito.mock(Release.class);
184         final String description = "Description of the release";
185         Mockito.doReturn(
186             Json.createObjectBuilder()
187                 .add("body", description)
188                 .build()
189         ).when(release).json();
190         final Release.Smart smart = new Release.Smart(release);
191         MatcherAssert.assertThat(
192             "Values are not equal",
193             smart.body(),
194             Matchers.equalTo(description)
195         );
196     }
197 
198     @Test
199     void fetchDescription() throws IOException, ParseException {
200         final Release release = Mockito.mock(Release.class);
201         final String created = "2013-02-27T19:35:32Z";
202         Mockito.doReturn(
203             Json.createObjectBuilder()
204                 .add("created_at", created)
205                 .build()
206         ).when(release).json();
207         final Release.Smart smart = new Release.Smart(release);
208         MatcherAssert.assertThat(
209             "Values are not equal",
210             smart.createdAt(),
211             Matchers.equalTo(new GitHub.Time(created).date())
212         );
213     }
214 
215     @Test
216     void fetchPublished() throws IOException, ParseException {
217         final Release release = Mockito.mock(Release.class);
218         final String published = "2013-01-27T19:35:32Z";
219         Mockito.doReturn(
220             Json.createObjectBuilder()
221                 .add("published_at", published)
222                 .build()
223         ).when(release).json();
224         final Release.Smart smart = new Release.Smart(release);
225         MatcherAssert.assertThat(
226             "Values are not equal",
227             smart.publishedAt(),
228             Matchers.equalTo(new GitHub.Time(published).date())
229         );
230     }
231 
232     @Test
233     void isPrerelease() throws IOException {
234         final Release release = Mockito.mock(Release.class);
235         Mockito.doReturn(
236             Json.createObjectBuilder().add("prerelease", Boolean.TRUE).build()
237         ).when(release).json();
238         MatcherAssert.assertThat(
239             "Values are not equal",
240             new Release.Smart(release).prerelease(),
241             Matchers.is(Boolean.TRUE)
242         );
243     }
244 
245     @Test
246     void isNotPrerelease() throws IOException {
247         final Release release = Mockito.mock(Release.class);
248         Mockito.doReturn(
249             Json.createObjectBuilder().add("prerelease", "false").build()
250         ).when(release).json();
251         MatcherAssert.assertThat(
252             "Values are not equal",
253             new Release.Smart(release).prerelease(),
254             Matchers.is(Boolean.FALSE)
255         );
256     }
257 
258     @Test
259     void missingPrerelease() throws IOException {
260         final Release release = Mockito.mock(Release.class);
261         Mockito.doReturn(
262             Json.createObjectBuilder().build()
263         ).when(release).json();
264         MatcherAssert.assertThat(
265             "Values are not equal",
266             new Release.Smart(release).prerelease(),
267             Matchers.is(Boolean.FALSE)
268         );
269     }
270 
271     @Test
272     void isDraft() throws IOException {
273         final Release release = Mockito.mock(Release.class);
274         Mockito.doReturn(
275             Json.createObjectBuilder().add("draft", Boolean.TRUE).build()
276         ).when(release).json();
277         MatcherAssert.assertThat(
278             "Values are not equal",
279             new Release.Smart(release).draft(),
280             Matchers.is(Boolean.TRUE)
281         );
282     }
283 
284     @Test
285     void isNotDraft() throws IOException {
286         final Release release = Mockito.mock(Release.class);
287         Mockito.doReturn(
288             Json.createObjectBuilder().add("draft", Boolean.FALSE).build()
289         ).when(release).json();
290         MatcherAssert.assertThat(
291             "Values are not equal",
292             new Release.Smart(release).draft(),
293             Matchers.is(Boolean.FALSE)
294         );
295     }
296 
297     @Test
298     void missingDraft() throws IOException {
299         final Release release = Mockito.mock(Release.class);
300         Mockito.doReturn(
301             Json.createObjectBuilder().build()
302         ).when(release).json();
303         MatcherAssert.assertThat(
304             "Values are not equal",
305             new Release.Smart(release).draft(),
306             Matchers.is(Boolean.FALSE)
307         );
308     }
309 }