1 /**
2 * Copyright (c) 2013-2023, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.github.mock;
31
32 import com.jcabi.github.Gist;
33 import com.jcabi.github.Gists;
34 import java.io.IOException;
35 import java.util.Collections;
36 import org.hamcrest.MatcherAssert;
37 import org.hamcrest.Matchers;
38 import org.junit.Test;
39
40 /**
41 * Test case for {@link MkGists}.
42 * @author Yegor Bugayenko (yegor256@gmail.com)
43 * @version $Id: 7c4e009f0b8e810d3c3fb6322bacdc2cfda9dbe2 $
44 * @checkstyle MultipleStringLiterals (500 lines)
45 */
46 public final class MkGistsTest {
47
48 /**
49 * MkGists can work with gists.
50 * @throws Exception If some problem inside
51 */
52 @Test
53 public void worksWithMockedGists() throws Exception {
54 final Gist gist = new MkGithub().gists().create(
55 Collections.singletonMap("test-file-name.txt", "none"), false
56 );
57 final String file = "t.txt";
58 gist.write(file, "hello, everybody!");
59 MatcherAssert.assertThat(
60 gist.read(file),
61 Matchers.startsWith("hello, ")
62 );
63 }
64
65 /**
66 * This tests that the remove() method in MkGists is working fine.
67 * @throws Exception - if anything goes wrong.
68 */
69 @Test
70 public void removesGistByIdentifier() throws Exception {
71 final Gists gists = new MkGithub().gists();
72 final Gist gist = gists.create(
73 Collections.singletonMap("fileName.txt", "content"), false
74 );
75 MatcherAssert.assertThat(
76 gists.iterate(),
77 Matchers.hasItem(gist)
78 );
79 gists.remove(gist.identifier());
80 MatcherAssert.assertThat(
81 gists.iterate(),
82 Matchers.not(Matchers.hasItem(gist))
83 );
84 }
85 /**
86 * MkGists can work several gists.
87 * Test to check issue #128
88 * @throws Exception If some problem inside
89 */
90 @Test
91 public void worksWithSeveralGists() throws Exception {
92 final Gists gists = new MkGithub().gists();
93 final Gist gist = gists.create(
94 Collections.singletonMap("test-file-name.txt", "none"), false
95 );
96 final Gist othergist = gists.create(
97 Collections.singletonMap("test-file-name2.txt", ""), false
98 );
99 final String file = "t.txt";
100 gist.write(file, "hello, everybody!");
101 othergist.write(file, "bye, everybody!");
102 MatcherAssert.assertThat(
103 gist.read(file),
104 Matchers.startsWith("hello, ")
105 );
106 MatcherAssert.assertThat(
107 othergist.read(file),
108 Matchers.startsWith("bye, ")
109 );
110 }
111
112 /**
113 * Test starring and star-checking of a gist.
114 * @throws Exception If some problem inside
115 */
116 @Test
117 public void testStar() throws Exception {
118 final Gist gist = new MkGithub().gists().create(
119 Collections.singletonMap("file-name.txt", ""), false
120 );
121 MatcherAssert.assertThat(
122 gist.starred(),
123 Matchers.equalTo(false)
124 );
125 gist.star();
126 MatcherAssert.assertThat(
127 gist.starred(),
128 Matchers.equalTo(true)
129 );
130 }
131
132 /**
133 * Test unstarring and star-checking of a gist.
134 * @throws Exception If some problem inside
135 */
136 @Test
137 public void testUnstar() throws Exception {
138 final Gist gist = new MkGithub().gists().create(
139 Collections.singletonMap("file-name.txt", ""), false
140 );
141 MatcherAssert.assertThat(
142 gist.starred(),
143 Matchers.equalTo(false)
144 );
145 gist.star();
146 MatcherAssert.assertThat(
147 gist.starred(),
148 Matchers.equalTo(true)
149 );
150 gist.unstar();
151 MatcherAssert.assertThat(
152 gist.starred(),
153 Matchers.equalTo(false)
154 );
155 }
156
157 /**
158 * MkGists can create gists with empty files.
159 * @throws IOException If some problem inside
160 */
161 @Test
162 public void createGistWithEmptyFile() throws IOException {
163 final String filename = "file.txt";
164 final Gist gist = new MkGithub().gists().create(
165 Collections.singletonMap(filename, ""), false
166 );
167 MatcherAssert.assertThat(
168 gist.read(filename),
169 Matchers.is(Matchers.emptyString())
170 );
171 }
172
173 }