View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2013-2025 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.jcabi.github.mock;
6   
7   import com.jcabi.github.GitHub;
8   import com.jcabi.github.Release;
9   import com.jcabi.github.Releases;
10  import jakarta.json.Json;
11  import jakarta.json.JsonString;
12  import jakarta.json.JsonValue;
13  import java.io.IOException;
14  import org.hamcrest.MatcherAssert;
15  import org.hamcrest.Matchers;
16  import org.junit.jupiter.api.Test;
17  
18  /**
19   * Test case for {@link MkRelease}.
20   * @since 0.1
21   */
22  @SuppressWarnings({"PMD.TooManyMethods", "PMD.AvoidDuplicateLiterals"})
23  final class MkReleaseTest {
24      @Test
25      void canDeleteRelease() throws IOException {
26          final Releases releases = MkReleaseTest.releases();
27          final Release release = releases.create("v1.0");
28          release.delete();
29          MatcherAssert.assertThat(
30              "Values are not equal",
31              releases.iterate().iterator().hasNext(),
32              Matchers.is(false)
33          );
34      }
35  
36      /**
37       * Smart decorator returns url.
38       * @throws Exception If some problem inside
39       */
40      @Test
41      void canGetUrl() throws Exception {
42          final Release release = MkReleaseTest.release();
43          final Release.Smart smart = new Release.Smart(release);
44          MatcherAssert.assertThat(
45              "Values are not equal",
46              smart.url().toString(),
47              Matchers.equalTo(MkReleaseTest.value(release, "url"))
48          );
49      }
50  
51      /**
52       * Smart decorator returns assets url.
53       * @throws Exception If some problem inside
54       */
55      @Test
56      void canGetAssetsUrl() throws Exception {
57          final Release release = MkReleaseTest.release();
58          final Release.Smart smart = new Release.Smart(release);
59          MatcherAssert.assertThat(
60              "Values are not equal",
61              smart.assetsUrl().toString(),
62              Matchers.equalTo(MkReleaseTest.value(release, "assets_url"))
63          );
64      }
65  
66      /**
67       * Smart decorator returns html url.
68       * @throws Exception If some problem inside
69       */
70      @Test
71      void canGetHtmlUrl() throws Exception {
72          final Release release = MkReleaseTest.release();
73          final Release.Smart smart = new Release.Smart(release);
74          MatcherAssert.assertThat(
75              "Values are not equal",
76              smart.htmlUrl().toString(),
77              Matchers.equalTo(MkReleaseTest.value(release, "html_url"))
78          );
79      }
80  
81      /**
82       * Smart decorator returns upload url.
83       * @throws Exception If some problem inside
84       */
85      @Test
86      void canGetUploadUrl() throws Exception {
87          final Release release = MkReleaseTest.release();
88          final Release.Smart smart = new Release.Smart(release);
89          MatcherAssert.assertThat(
90              "Values are not equal",
91              smart.uploadUrl().toString(),
92              Matchers.equalTo(MkReleaseTest.value(release, "upload_url"))
93          );
94      }
95  
96      /**
97       * Smart decorator returns tag name.
98       * @throws Exception If some problem inside
99       */
100     @Test
101     void canGetTag() throws Exception {
102         final Release release = MkReleaseTest.release();
103         final Release.Smart smart = new Release.Smart(release);
104         MatcherAssert.assertThat(
105             "Values are not equal",
106             smart.tag(),
107             Matchers.equalTo(MkReleaseTest.value(release, "tag_name"))
108         );
109     }
110 
111     /**
112      * Smart decorator returns target commitish.
113      * @throws Exception If some problem inside
114      */
115     @Test
116     void canGetCommitish() throws Exception {
117         final Release release = MkReleaseTest.release();
118         final Release.Smart smart = new Release.Smart(release);
119         MatcherAssert.assertThat(
120             "Values are not equal",
121             smart.commitish(),
122             Matchers.equalTo(MkReleaseTest.value(release, "target_commitish"))
123         );
124     }
125 
126     /**
127      * Smart decorator returns name.
128      * @throws Exception If some problem inside
129      */
130     @Test
131     void canGetName() throws Exception {
132         final Release release = MkReleaseTest.release();
133         final Release.Smart smart = new Release.Smart(release);
134         MatcherAssert.assertThat(
135             "Values are not equal",
136             smart.name(),
137             Matchers.equalTo(MkReleaseTest.value(release, "name"))
138         );
139     }
140 
141     /**
142      * Smart decorator returns body.
143      * @throws Exception If some problem inside
144      */
145     @Test
146     void canGetBody() throws Exception {
147         final Release release = MkReleaseTest.release();
148         final Release.Smart smart = new Release.Smart(release);
149         MatcherAssert.assertThat(
150             "Values are not equal",
151             smart.body(),
152             Matchers.equalTo(MkReleaseTest.value(release, "body"))
153         );
154     }
155 
156     /**
157      * Smart decorator returns created date.
158      * @throws Exception If some problem inside
159      */
160     @Test
161     void canGetCreatedAt() throws Exception {
162         final Release release = MkReleaseTest.release();
163         final Release.Smart smart = new Release.Smart(release);
164         MatcherAssert.assertThat(
165             "Values are not equal",
166             smart.createdAt(),
167             Matchers.equalTo(new GitHub.Time(MkReleaseTest.value(release, "created_at"))
168                 .date()
169             )
170         );
171     }
172 
173     /**
174      * Smart decorator returns prerelease.
175      * @throws Exception If some problem inside
176      */
177     @Test
178     void prerelease() throws Exception {
179         final Release release = MkReleaseTest.release();
180         release.patch(
181             Json.createObjectBuilder().add("prerelease", true).build()
182         );
183         MatcherAssert.assertThat(
184             "Values are not equal",
185             new Release.Smart(release).prerelease(),
186             Matchers.is(true)
187         );
188     }
189 
190     /**
191      * Smart decorator returns published date.
192      * @throws Exception If some problem inside
193      */
194     @Test
195     void canGetPublishedAt() throws Exception {
196         final Release release = MkReleaseTest.release();
197         final Release.Smart smart = new Release.Smart(release);
198         MatcherAssert.assertThat(
199             "Values are not equal",
200             smart.publishedAt(),
201             Matchers.equalTo(
202                 new GitHub.Time(MkReleaseTest.value(release, "published_at")).date()
203             )
204         );
205     }
206 
207     /**
208      * Returns string property value.
209      * @param release Release
210      * @param name Property name
211      * @return Value as a string
212      * @throws IOException If some problem inside
213      */
214     private static String value(final Release release, final String name)
215         throws IOException {
216         final JsonValue json = release.json().get(name);
217         String result = null;
218         if (json instanceof JsonString) {
219             result = ((JsonString) json).getString();
220         }
221         return result;
222     }
223 
224     /**
225      * Create a release to work with.
226      * @return Release
227      */
228     private static Release release() throws IOException {
229         return MkReleaseTest.releases().create("v1");
230     }
231 
232     /**
233      * Creates a Releases instance set to work with.
234      * @return A test Releases instance.
235      * @throws IOException if any I/O problems occur.
236      */
237     private static Releases releases() throws IOException {
238         return new MkGitHub().randomRepo().releases();
239     }
240 }