Repository: hub4j/github-api (java)

Issue:
Impossible to get IDs of labels assigned to a `GHIssue`
When doing issue search, the results are provided as `GHIssue` which, via `getLabels()`, can provide own label list. 

The problem with this is, the `getLabels()` method returns `List<GHLabel>`, and `GHLabel` doesn't store the unique numerical ID assigned to the label by GitHub. This makes API usage problematic for apps that want to utilize the label ID and cannot rely on its mutable parts like name or URL.

Pull request:
Add the missing fields for GHLabel
# Description 

Add the missing fields for GHLabel (id, nodeId, default).

Fixes #1059

# Before submitting a PR:
We love getting PRs, but we hate asking people for the same basic changes every time. 

- [X] Push your changes to a branch other than `master`. Create your PR from that branch.    
- [X] Add JavaDocs and other comments
- [X] Write tests that run and pass in CI. See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to capture snapshot data.
- [X] Run `mvn -D enable-ci clean install site` locally. If this command doesn't succeed, your change will not pass CI. 

# When creating a PR: 

- [X] Fill in the "Description" above. 
- [X] Enable "Allow edits from maintainers". 


Patch:
diff --git a/src/main/java/org/kohsuke/github/GHLabel.java b/src/main/java/org/kohsuke/github/GHLabel.java
index 85628d5d3..db66b7f50 100644
--- a/src/main/java/org/kohsuke/github/GHLabel.java
+++ b/src/main/java/org/kohsuke/github/GHLabel.java
@@ -2,6 +2,7 @@ package org.kohsuke.github;
 
 import com.fasterxml.jackson.annotation.JacksonInject;
 import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -22,6 +23,11 @@ import javax.annotation.Nonnull;
  */
 public class GHLabel extends GitHubInteractiveObject {
 
+    private long id;
+    private String nodeId;
+    @JsonProperty("default")
+    private boolean default_;
+
     @Nonnull
     private String url, name, color;
 
@@ -42,6 +48,24 @@ public class GHLabel extends GitHubInteractiveObject {
         return Objects.requireNonNull(root);
     }
 
+    /**
+     * Gets id.
+     *
+     * @return the id
+     */
+    public long getId() {
+        return id;
+    }
+
+    /**
+     * Gets node id.
+     *
+     * @return the node id.
+     */
+    public String getNodeId() {
+        return nodeId;
+    }
+
     /**
      * Gets url.
      *
@@ -82,6 +106,15 @@ public class GHLabel extends GitHubInteractiveObject {
         return description;
     }
 
+    /**
+     * If the label is one of the default labels created by GitHub automatically.
+     *
+     * @return true if the label is a default one
+     */
+    public boolean isDefault() {
+        return default_;
+    }
+
     /**
      * Sets color.
      *


Test patch:
diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java
index a15e751ca..1c0d97bd8 100755
--- a/src/test/java/org/kohsuke/github/AppTest.java
+++ b/src/test/java/org/kohsuke/github/AppTest.java
@@ -965,6 +965,9 @@ public class AppTest extends AbstractGitHubWireMockTest {
         GHLabel e = r.getLabel("enhancement");
         assertEquals("enhancement", e.getName());
         assertNotNull(e.getUrl());
+        assertEquals(177339106, e.getId());
+        assertEquals("MDU6TGFiZWwxNzczMzkxMDY=", e.getNodeId());
+        assertTrue(e.isDefault());
         assertTrue(Pattern.matches("[0-9a-fA-F]{6}", e.getColor()));
 
         GHLabel t = null;
@@ -976,12 +979,17 @@ public class AppTest extends AbstractGitHubWireMockTest {
             assertThat(t, not(sameInstance(t2)));
             assertThat(t, equalTo(t2));
 
+            assertFalse(t2.isDefault());
+
+            assertEquals(t.getId(), t2.getId());
+            assertEquals(t.getNodeId(), t2.getNodeId());
             assertEquals(t.getName(), t2.getName());
             assertEquals(t.getColor(), "123456");
             assertEquals(t.getColor(), t2.getColor());
             assertEquals(t.getDescription(), "");
             assertEquals(t.getDescription(), t2.getDescription());
             assertEquals(t.getUrl(), t2.getUrl());
+            assertEquals(t.isDefault(), t2.isDefault());
 
             // update works on multiple changes in one call
             t3 = t.update().color("000000").description("It is dark!").done();
diff --git a/src/test/java/org/kohsuke/github/GHPullRequestTest.java b/src/test/java/org/kohsuke/github/GHPullRequestTest.java
index 70f339327..87a2c5f10 100644
--- a/src/test/java/org/kohsuke/github/GHPullRequestTest.java
+++ b/src/test/java/org/kohsuke/github/GHPullRequestTest.java
@@ -9,7 +9,14 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
 
 /**
  * @author Kohsuke Kawaguchi
@@ -418,7 +425,11 @@ public class GHPullRequestTest extends AbstractGitHubWireMockTest {
 
         Collection<GHLabel> labels = getRepository().getPullRequest(p.getNumber()).getLabels();
         assertEquals(1, labels.size());
-        assertEquals(label, labels.iterator().next().getName());
+        GHLabel savedLabel = labels.iterator().next();
+        assertEquals(label, savedLabel.getName());
+        assertNotNull(savedLabel.getId());
+        assertNotNull(savedLabel.getNodeId());
+        assertFalse(savedLabel.isDefault());
     }
 
     @Test