View Javadoc
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.Release;
33  import com.jcabi.github.ReleaseAsset;
34  import com.jcabi.github.ReleaseAssets;
35  import java.nio.charset.StandardCharsets;
36  import javax.xml.bind.DatatypeConverter;
37  import org.apache.commons.io.IOUtils;
38  import org.hamcrest.MatcherAssert;
39  import org.hamcrest.Matchers;
40  import org.junit.Test;
41  
42  /**
43   * Test case for {@link MkReleaseAssets}.
44   *
45   * @author Carlos Miranda (miranda.cma@gmail.com)
46   * @version $Id: 5d4d37761f100f82cc6fbc8954bde156f67e1728 $
47   * @since 0.8
48   * @checkstyle MultipleStringLiteralsCheck (200 lines)
49   * @checkstyle MethodNameCheck (200 lines)
50   */
51  public final class MkReleaseAssetsTest {
52  
53      /**
54       * MkReleaseAssets can upload a new Release Asset.
55       *
56       * @throws Exception If a problem occurs.
57       */
58      @Test
59      public void uploadsNewAsset() throws Exception {
60          final ReleaseAssets assets = release().assets();
61          final ReleaseAsset asset = assets.upload(
62              "testUpload".getBytes(), "text/plain", "upload.txt"
63          );
64          MatcherAssert.assertThat(
65              asset.number(),
66              Matchers.is(1)
67          );
68      }
69  
70      /**
71       * MkReleaseAssets can fetch a single Release Asset.
72       *
73       * @throws Exception If a problem occurs.
74       */
75      @Test
76      public void fetchesSingleAsset() throws Exception {
77          final ReleaseAssets assets = release().assets();
78          final ReleaseAsset asset = assets.upload(
79              "testGet".getBytes(), "text/plain", "get.txt"
80          );
81          MatcherAssert.assertThat(
82              assets.get(asset.number()),
83              Matchers.is(asset)
84          );
85      }
86  
87      /**
88       * MkReleaseAssets can iterate through Release Assets.
89       *
90       * @throws Exception If a problem occurs.
91       */
92      @Test
93      public void iteratesAssets() throws Exception {
94          final ReleaseAssets assets = release().assets();
95          assets.upload(
96              "testIterate".getBytes(), "text/plain", "iterate.txt"
97          );
98          MatcherAssert.assertThat(
99              assets.iterate(),
100             Matchers.not(Matchers.emptyIterable())
101         );
102     }
103 
104     /**
105      * MkReleaseAssets can fetch its own Release.
106      *
107      * @throws Exception If a problem occurs.
108      */
109     @Test
110     public void fetchesRelease() throws Exception {
111         final Release rel = release();
112         MatcherAssert.assertThat(
113             rel.assets().release(),
114             Matchers.is(rel)
115         );
116     }
117 
118     /**
119      * Must encode the input bytes into Base64.
120      * @throws Exception Unexpected.
121      */
122     @Test
123     public void encodesContentsAsBase64() throws Exception {
124         final String test = "This is a test asset.";
125         final ReleaseAsset asset = new MkGithub().randomRepo().releases()
126             .create("v1.0")
127             .assets()
128             .upload(test.getBytes(), "type", "name");
129         MatcherAssert.assertThat(
130             IOUtils.toString(asset.raw(), StandardCharsets.UTF_8),
131             Matchers.is(DatatypeConverter.printBase64Binary(test.getBytes()))
132         );
133     }
134 
135     /**
136      * Create a Release to work with.
137      * @return Repo
138      * @throws Exception If some problem inside
139      */
140     private static Release release() throws Exception {
141         return new MkGithub().randomRepo().releases().create("v1.0");
142     }
143 }