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 jakarta.json.Json;
8   import java.io.IOException;
9   import java.util.Arrays;
10  import java.util.Collections;
11  import org.hamcrest.MatcherAssert;
12  import org.hamcrest.Matchers;
13  import org.junit.jupiter.api.Assertions;
14  import org.junit.jupiter.api.Test;
15  import org.mockito.Mockito;
16  
17  /**
18   * Test case for {@link IssueLabels}.
19   * @since 0.7
20   * @checkstyle MultipleStringLiterals (500 lines)
21   */
22  final class IssueLabelsTest {
23  
24      @Test
25      void fetchesLabelsByColor() throws IOException {
26          final Label first = Mockito.mock(Label.class);
27          Mockito.doReturn(
28              Json.createObjectBuilder().add("color", "c0c0c0").build()
29          ).when(first).json();
30          final Label second = Mockito.mock(Label.class);
31          Mockito.doReturn(
32              Json.createObjectBuilder().add("color", "fefefe").build()
33          ).when(second).json();
34          final IssueLabels labels = Mockito.mock(IssueLabels.class);
35          Mockito.doReturn(Arrays.asList(first, second)).when(labels).iterate();
36          MatcherAssert.assertThat(
37              "Collection size is incorrect",
38              new IssueLabels.Smart(labels).findByColor("c0c0c0"),
39              Matchers.allOf(
40                  Matchers.iterableWithSize(1),
41                  Matchers.hasItems(first)
42              )
43          );
44      }
45  
46      /**
47       * IssueLabels.Smart can check label's existence by name.
48       */
49      @Test
50      void checksLabelExistenceByName() {
51          final Label first = Mockito.mock(Label.class);
52          Mockito.doReturn("first").when(first).name();
53          final Label second = Mockito.mock(Label.class);
54          Mockito.doReturn("second").when(second).name();
55          final IssueLabels labels = Mockito.mock(IssueLabels.class);
56          Mockito.doReturn(Arrays.asList(first, second)).when(labels).iterate();
57          MatcherAssert.assertThat(
58              "Values are not equal",
59              new IssueLabels.Smart(labels).contains("first"),
60              Matchers.is(true)
61          );
62          MatcherAssert.assertThat(
63              "Values are not equal",
64              new IssueLabels.Smart(labels).contains("third"),
65              Matchers.is(false)
66          );
67      }
68  
69      @Test
70      void getsLabelByName() {
71          final Label first = Mockito.mock(Label.class);
72          Mockito.doReturn("a").when(first).name();
73          final Label second = Mockito.mock(Label.class);
74          Mockito.doReturn("b").when(second).name();
75          final IssueLabels labels = Mockito.mock(IssueLabels.class);
76          Mockito.doReturn(Arrays.asList(first, second)).when(labels).iterate();
77          MatcherAssert.assertThat(
78              "Values are not equal",
79              new IssueLabels.Smart(labels).get("a").name(),
80              Matchers.equalTo("a")
81          );
82      }
83  
84      @Test
85      void throwsWhenLabelIsAbsent() {
86          final IssueLabels labels = Mockito.mock(IssueLabels.class);
87          Mockito.doReturn(Collections.emptyList()).when(labels).iterate();
88          Assertions.assertThrows(
89              IllegalArgumentException.class,
90              () -> new IssueLabels.Smart(labels).get("something"),
91              "Should throw when label is absent"
92          );
93      }
94  
95  }