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.Release;
8   import com.jcabi.github.Releases;
9   import java.io.IOException;
10  import org.hamcrest.MatcherAssert;
11  import org.hamcrest.Matchers;
12  import org.junit.jupiter.api.Test;
13  
14  /**
15   * Test case for {@link MkReleases}.
16   * @since 0.8
17   * @checkstyle MultipleStringLiteralsCheck (300 lines)
18   */
19  @SuppressWarnings("PMD.AvoidDuplicateLiterals")
20  final class MkReleasesTest {
21      @Test
22      void canFetchEmptyListOfReleases() throws IOException {
23          final Releases releases = new MkGitHub().randomRepo().releases();
24          MatcherAssert.assertThat(
25              "Collection is not empty",
26              releases.iterate(),
27              Matchers.emptyIterable()
28          );
29      }
30  
31      /**
32       * MkReleases can fetch non-empty list of releases.
33       */
34      @Test
35      void canFetchNonEmptyListOfReleases() throws IOException {
36          final Releases releases = new MkGitHub().randomRepo().releases();
37          final String tag = "v1.0";
38          releases.create(tag);
39          MatcherAssert.assertThat(
40              "Values are not equal",
41              // @checkstyle MultipleStringLiterals (1 line)
42              releases.iterate().iterator().next().json().getString("tag_name"),
43              Matchers.equalTo(tag)
44          );
45      }
46  
47      @Test
48      void canFetchSingleRelease() throws IOException {
49          final Releases releases = new MkGitHub().randomRepo().releases();
50          MatcherAssert.assertThat(
51              "Value is null", releases.get(1), Matchers.notNullValue()
52          );
53      }
54  
55      @Test
56      void canCreateRelease() throws IOException {
57          final Releases releases = new MkGitHub().randomRepo().releases();
58          final String tag = "v1.0.0";
59          final Release release = releases.create(tag);
60          MatcherAssert.assertThat(
61              "Values are not equal",
62              release.json().getString("tag_name"),
63              Matchers.equalTo(tag)
64          );
65      }
66  
67      @Test
68      void iteratesReleases() throws IOException {
69          final Releases releases = new MkGitHub().randomRepo().releases();
70          releases.create("v1.0.1");
71          releases.create("v1.0.2");
72          MatcherAssert.assertThat(
73              "Collection size is incorrect",
74              releases.iterate(),
75              Matchers.iterableWithSize(2)
76          );
77      }
78  
79      @Test
80      void canRemoveRelease() throws IOException {
81          final Releases releases = new MkGitHub().randomRepo().releases();
82          releases.create("v1.1.1");
83          releases.create("v1.1.2");
84          MatcherAssert.assertThat(
85              "Collection size is incorrect",
86              releases.iterate(),
87              Matchers.iterableWithSize(2)
88          );
89          releases.remove(1);
90          MatcherAssert.assertThat(
91              "Collection size is incorrect",
92              releases.iterate(),
93              Matchers.iterableWithSize(1)
94          );
95      }
96  
97      @Test
98      void findsReleaseByTag() throws IOException {
99          final Releases releases = new MkGitHub().randomRepo().releases();
100         final String tag = "v5.0";
101         releases.create(tag);
102         MatcherAssert.assertThat(
103             "Values are not equal",
104             new Releases.Smart(releases).exists(tag),
105             Matchers.is(true)
106         );
107         MatcherAssert.assertThat(
108             "Values are not equal",
109             new Release.Smart(new Releases.Smart(releases).find(tag)).tag(),
110             Matchers.equalTo(tag)
111         );
112     }
113 
114     /**
115      * The release's name should be empty upon initial creation.
116      */
117     @Test
118     void releaseNameIsEmpty() throws IOException {
119         final Releases releases = new MkGitHub().randomRepo().releases();
120         final String tag = "tag";
121         releases.create(tag);
122         MatcherAssert.assertThat(
123             "Values are not equal",
124             new Release.Smart(releases.iterate().iterator().next())
125                 .name().isEmpty(),
126             Matchers.is(true)
127         );
128     }
129 
130     /**
131      * The release's body should be empty upon initial creation.
132      */
133     @Test
134     void releaseBodyIsEmpty() throws IOException {
135         final Releases releases = new MkGitHub().randomRepo().releases();
136         final String tag = "tag";
137         releases.create(tag);
138         MatcherAssert.assertThat(
139             "Values are not equal",
140             new Release.Smart(releases.iterate().iterator().next())
141                 .body().isEmpty(),
142             Matchers.is(true)
143         );
144     }
145 }