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 java.io.IOException;
8   import org.apache.commons.lang3.RandomStringUtils;
9   import org.hamcrest.MatcherAssert;
10  import org.hamcrest.Matchers;
11  import org.junit.jupiter.api.AfterAll;
12  import org.junit.jupiter.api.BeforeAll;
13  import org.junit.jupiter.api.Test;
14  
15  /**
16   * Test case for {@link RtReleases}.
17   * @since 0.8
18   */
19  @OAuthScope(OAuthScope.Scope.REPO)
20  @SuppressWarnings("PMD.AvoidDuplicateLiterals")
21  final class RtReleasesITCase {
22  
23      /**
24       * Test repos.
25       */
26      private static Repos repos;
27  
28      /**
29       * Test repo.
30       */
31      private static Repo repo;
32  
33      /**
34       * RepoRule.
35       * @checkstyle VisibilityModifierCheck (3 lines)
36       */
37      private static RepoRule rule = new RepoRule();
38  
39      /**
40       * Set up test fixtures.
41       */
42      @BeforeAll
43      static void setUp() throws IOException {
44          final GitHub github = GitHubIT.connect();
45          RtReleasesITCase.repos = github.repos();
46          RtReleasesITCase.repo = RtReleasesITCase.rule.repo(RtReleasesITCase.repos);
47      }
48  
49      /**
50       * Tear down test fixtures.
51       */
52      @AfterAll
53      static void tearDown() throws IOException {
54          if (RtReleasesITCase.repos != null && RtReleasesITCase.repo != null) {
55              RtReleasesITCase.repos.remove(RtReleasesITCase.repo.coordinates());
56          }
57      }
58  
59      @Test
60      void canFetchAllReleases() throws IOException {
61          final Releases releases = RtReleasesITCase.repo.releases();
62          final Release release = releases.create(
63              RandomStringUtils.secure().nextAlphanumeric(10)
64          );
65          try {
66              MatcherAssert.assertThat(
67                  "Collection is not empty",
68                  releases.iterate(),
69                  Matchers.not(Matchers.emptyIterableOf(Release.class))
70              );
71          } finally {
72              releases.remove(release.number());
73          }
74      }
75  
76      @Test
77      void canFetchRelease() throws IOException {
78          final Releases releases = RtReleasesITCase.repo.releases();
79          final String tag = "v1.0";
80          final Release release = releases.create(tag);
81          MatcherAssert.assertThat(
82              "Values are not equal",
83              releases.get(release.number()).number(),
84              Matchers.equalTo(release.number())
85          );
86          MatcherAssert.assertThat(
87              "Values are not equal",
88              new Release.Smart(releases.get(release.number())).tag(),
89              Matchers.equalTo(tag)
90          );
91          releases.remove(release.number());
92      }
93  
94      @Test
95      void canCreateRelease() throws IOException {
96          final Releases releases = RtReleasesITCase.repo.releases();
97          final Release created = releases.create("0.1");
98          final int number = created.number();
99          try {
100             final Release obtained = releases.get(number);
101             MatcherAssert.assertThat(
102                 "Values are not equal",
103                 created,
104                 Matchers.is(obtained)
105             );
106             MatcherAssert.assertThat(
107                 "Values are not equal",
108                 new Release.Smart(created).tag(),
109                 Matchers.equalTo(new Release.Smart(obtained).tag())
110             );
111         } finally {
112             releases.remove(number);
113         }
114     }
115 
116     @Test
117     void canRemoveRelease() throws IOException {
118         final Releases releases = RtReleasesITCase.repo.releases();
119         final Release release = releases.create(
120             RandomStringUtils.secure().nextAlphanumeric(10)
121         );
122         MatcherAssert.assertThat(
123             "Collection does not contain expected item",
124             releases.iterate(),
125             Matchers.hasItem(release)
126         );
127         releases.remove(release.number());
128         MatcherAssert.assertThat(
129             "Collection does not contain expected item",
130             releases.iterate(),
131             Matchers.not(Matchers.hasItem(release))
132         );
133     }
134 
135     @Test
136     void canEditTag() throws IOException {
137         final Releases releases = RtReleasesITCase.repo.releases();
138         final Release release = releases.create(
139             RandomStringUtils.secure().nextAlphanumeric(10)
140         );
141         final String tag = RandomStringUtils.secure().nextAlphanumeric(15);
142         new Release.Smart(release).tag(tag);
143         MatcherAssert.assertThat(
144             "Values are not equal",
145             new Release.Smart(releases.get(release.number())).tag(),
146             Matchers.equalTo(tag)
147         );
148         releases.remove(release.number());
149     }
150 
151     @Test
152     void canEditBody() throws IOException {
153         final Releases releases = RtReleasesITCase.repo.releases();
154         final Release release = releases.create(
155             RandomStringUtils.secure().nextAlphanumeric(10)
156         );
157         final String body = "Description of the release";
158         new Release.Smart(release).body(body);
159         MatcherAssert.assertThat(
160             "Values are not equal",
161             new Release.Smart(releases.get(release.number())).body(),
162             Matchers.equalTo(body)
163         );
164         releases.remove(release.number());
165     }
166 }