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 com.google.common.base.Optional;
8   import jakarta.json.Json;
9   import org.hamcrest.MatcherAssert;
10  import org.hamcrest.Matchers;
11  import org.junit.jupiter.api.Test;
12  
13  /**
14   * Test case for {@link Statuses}.
15   * @since 0.24
16   */
17  final class StatusesTest {
18      /**
19       * Name of state property in Status JSON object.
20       */
21      private static final String STATE_PROP = "state";
22  
23      /**
24       * Name of description property in Status JSON object.
25       */
26      private static final String DESCRIPTION_PROP = "description";
27  
28      /**
29       * Name of description property in Status JSON object.
30       */
31      private static final String TARGET_PROP = "target_url";
32  
33      /**
34       * Name of context property in Status JSON object.
35       */
36      private static final String CONTEXT_PROP = "context";
37  
38      /**
39       * Test status URL.
40       */
41      private static final String URL = "http://status.jcabi-github.invalid/42";
42  
43      /**
44       * Test commit status context string.
45       */
46      private static final String CONTEXT = "jcabi/github/test";
47  
48      @Test
49      void convertsToJsonWhenAllPresent() {
50          final String success = "Everything is not so awesome";
51          MatcherAssert.assertThat(
52              "Values are not equal",
53              new Statuses.StatusCreate(Status.State.ERROR)
54                  .withTargetUrl(Optional.of(StatusesTest.URL))
55                  .withDescription(success)
56                  .withContext(Optional.of(StatusesTest.CONTEXT))
57                  .json().toString(),
58              Matchers.equalTo(
59                  Json.createObjectBuilder()
60                      .add(StatusesTest.STATE_PROP, "error")
61                      .add(StatusesTest.DESCRIPTION_PROP, success)
62                      .add(StatusesTest.CONTEXT_PROP, StatusesTest.CONTEXT)
63                      .add(StatusesTest.TARGET_PROP, StatusesTest.URL)
64                      .build().toString()
65              )
66          );
67      }
68  
69      @Test
70      void convertsToJsonWhenUrlAbsent() {
71          final String success = "Living the dream!";
72          MatcherAssert.assertThat(
73              "Values are not equal",
74              new Statuses.StatusCreate(Status.State.SUCCESS)
75                  .withDescription(success)
76                  .withContext(Optional.of(StatusesTest.CONTEXT))
77                  .json().toString(),
78              Matchers.equalTo(
79                  Json.createObjectBuilder()
80                      .add(StatusesTest.STATE_PROP, "success")
81                      .add(StatusesTest.DESCRIPTION_PROP, success)
82                      .add(StatusesTest.CONTEXT_PROP, StatusesTest.CONTEXT)
83                      .build().toString()
84              )
85          );
86      }
87  
88      @Test
89      void convertsToJsonWhenDescriptionAbsent() {
90          MatcherAssert.assertThat(
91              "Values are not equal",
92              new Statuses.StatusCreate(Status.State.FAILURE)
93                  .withTargetUrl(Optional.of(StatusesTest.URL))
94                  .withContext(Optional.of(StatusesTest.CONTEXT))
95                  .json().toString(),
96              Matchers.equalTo(
97                  Json.createObjectBuilder()
98                      .add(StatusesTest.STATE_PROP, "failure")
99                      .add(StatusesTest.DESCRIPTION_PROP, "")
100                     .add(StatusesTest.CONTEXT_PROP, StatusesTest.CONTEXT)
101                     .add(StatusesTest.TARGET_PROP, StatusesTest.URL)
102                     .build().toString()
103             )
104         );
105     }
106 
107     @Test
108     void convertsToJsonWhenContextAbsent() {
109         final String pending = "Kragle is drying...";
110         MatcherAssert.assertThat(
111             "Values are not equal",
112             new Statuses.StatusCreate(Status.State.PENDING)
113                 .withTargetUrl(Optional.of(StatusesTest.URL))
114                 .withDescription(pending)
115                 .json().toString(),
116             Matchers.equalTo(
117                 Json.createObjectBuilder()
118                     .add(StatusesTest.STATE_PROP, "pending")
119                     .add(StatusesTest.DESCRIPTION_PROP, pending)
120                     .add(StatusesTest.TARGET_PROP, StatusesTest.URL)
121                     .build().toString()
122             )
123         );
124     }
125 }