From e5e6845a1dc5aafec0df08d4bcee2cfe1214881d Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Thu, 25 Jun 2026 10:14:05 +0200 Subject: [PATCH] Implement milestone payload and query builder While a query builder is a bit heavy for what we actually need to do here, I favored a pattern we are using globally, and we never know what they might add to the API later. I wanted to be able to sort the milestones. Even that is extremely limited... Believe it or not, we can't sort by close dates. --- .../org/kohsuke/github/GHEventPayload.java | 37 +- .../github/GHMilestoneQueryBuilder.java | 79 ++++ .../java/org/kohsuke/github/GHRepository.java | 9 + .../github-api/reflect-config.json | 45 ++ .../kohsuke/github/GHEventPayloadTest.java | 36 +- .../org/kohsuke/github/GHMilestoneTest.java | 83 +++- .../github/GHEventPayloadTest/milestone.json | 321 +++++++------- .../__files/1-orgs_hub4j-test-org.json | 76 ++++ .../__files/10-r_h_g_issues.json | 113 +++++ .../__files/11-r_h_g_issues_489.json | 133 ++++++ .../__files/12-r_h_g_issues.json | 113 +++++ .../__files/13-r_h_g_milestones.json | 116 +++++ .../__files/14-r_h_g_milestones.json | 116 +++++ .../__files/2-r_h_github-api.json | 403 ++++++++++++++++++ .../__files/3-r_h_g_milestones.json | 38 ++ .../__files/4-r_h_g_milestones_7.json | 38 ++ .../__files/5-r_h_g_milestones.json | 38 ++ .../__files/6-r_h_g_milestones_8.json | 38 ++ .../__files/7-r_h_g_milestones.json | 116 +++++ .../__files/8-r_h_g_milestones.json | 116 +++++ .../__files/9-r_h_g_issues.json | 113 +++++ .../mappings/1-orgs_hub4j-test-org.json | 47 ++ .../mappings/10-r_h_g_issues.json | 57 +++ .../mappings/11-r_h_g_issues_489.json | 56 +++ .../mappings/12-r_h_g_issues.json | 57 +++ .../mappings/13-r_h_g_milestones.json | 46 ++ .../mappings/14-r_h_g_milestones.json | 46 ++ .../mappings/2-r_h_github-api.json | 47 ++ .../mappings/3-r_h_g_milestones.json | 54 +++ .../mappings/4-r_h_g_milestones_7.json | 53 +++ .../mappings/5-r_h_g_milestones.json | 54 +++ .../mappings/6-r_h_g_milestones_8.json | 53 +++ .../mappings/7-r_h_g_milestones.json | 46 ++ .../mappings/8-r_h_g_milestones.json | 46 ++ .../mappings/9-r_h_g_issues.json | 57 +++ 35 files changed, 2734 insertions(+), 162 deletions(-) create mode 100644 src/main/java/org/kohsuke/github/GHMilestoneQueryBuilder.java create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/1-orgs_hub4j-test-org.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/10-r_h_g_issues.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/11-r_h_g_issues_489.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/12-r_h_g_issues.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/13-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/14-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/2-r_h_github-api.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/3-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/4-r_h_g_milestones_7.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/5-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/6-r_h_g_milestones_8.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/7-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/8-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/9-r_h_g_issues.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/1-orgs_hub4j-test-org.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/10-r_h_g_issues.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/11-r_h_g_issues_489.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/12-r_h_g_issues.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/13-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/14-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/2-r_h_github-api.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/3-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/4-r_h_g_milestones_7.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/5-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/6-r_h_g_milestones_8.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/7-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/8-r_h_g_milestones.json create mode 100644 src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/9-r_h_g_issues.json diff --git a/src/main/java/org/kohsuke/github/GHEventPayload.java b/src/main/java/org/kohsuke/github/GHEventPayload.java index 12a95e0979..8d39859857 100644 --- a/src/main/java/org/kohsuke/github/GHEventPayload.java +++ b/src/main/java/org/kohsuke/github/GHEventPayload.java @@ -529,7 +529,7 @@ public GHRepository getForkee() { // ContentReferenceEvent // DeployKeyEvent DownloadEvent FollowEvent ForkApplyEvent GitHubAppAuthorizationEvent GistEvent GollumEvent // InstallationEvent InstallationRepositoriesEvent IssuesEvent LabelEvent MarketplacePurchaseEvent MemberEvent - // MembershipEvent MetaEvent MilestoneEvent OrganizationEvent OrgBlockEvent PackageEvent PageBuildEvent + // MembershipEvent MetaEvent OrganizationEvent OrgBlockEvent PackageEvent PageBuildEvent // ProjectCardEvent ProjectColumnEvent ProjectEvent RepositoryDispatchEvent RepositoryImportEvent // RepositoryVulnerabilityAlertEvent SecurityAdvisoryEvent StarEvent StatusEvent TeamEvent TeamAddEvent WatchEvent @@ -1005,6 +1005,41 @@ void lateBind() { } } + /** + * A milestone event has been triggered. + * + * @see milestone event + */ + public static class Milestone extends GHEventPayload { + + private GHMilestone milestone; + + /** + * Create default Milestone instance + */ + public Milestone() { + } + + /** + * Gets the milestone. + * + * @return the milestone + */ + @SuppressFBWarnings(value = { "EI_EXPOSE_REP" }, justification = "Expected behavior") + public GHMilestone getMilestone() { + return milestone; + } + + @Override + void lateBind() { + super.lateBind(); + GHRepository repository = getRepository(); + if (repository != null && milestone != null) { + milestone.lateBind(repository); + } + } + } + /** * A ping. * diff --git a/src/main/java/org/kohsuke/github/GHMilestoneQueryBuilder.java b/src/main/java/org/kohsuke/github/GHMilestoneQueryBuilder.java new file mode 100644 index 0000000000..ee47d5fa96 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHMilestoneQueryBuilder.java @@ -0,0 +1,79 @@ +package org.kohsuke.github; + +/** + * Lists up milestones with filtering and sorting. + * + * @see GHRepository#queryMilestones() GHRepository#queryMilestones() + */ +public class GHMilestoneQueryBuilder extends GHQueryBuilder { + /** + * The enum Sort. + */ + public enum Sort { + + /** Sort by completeness (percentage of issues closed). */ + COMPLETENESS, + /** Sort by due date. */ + DUE_ON + } + + private final GHRepository repo; + + /** + * Instantiates a new GH milestone query builder. + * + * @param repo + * the repo + */ + GHMilestoneQueryBuilder(GHRepository repo) { + super(repo.root()); + this.repo = repo; + } + + /** + * Direction gh milestone query builder. + * + * @param d + * the d + * @return the gh milestone query builder + */ + public GHMilestoneQueryBuilder direction(GHDirection d) { + req.with("direction", d); + return this; + } + + /** + * List. + * + * @return the paged iterable + */ + @Override + public PagedIterable list() { + return req.withUrlPath(repo.getApiTailUrl("milestones")) + .toIterable(GHMilestone[].class, item -> item.lateBind(repo)); + } + + /** + * Sort gh milestone query builder. + * + * @param sort + * the sort + * @return the gh milestone query builder + */ + public GHMilestoneQueryBuilder sort(Sort sort) { + req.with("sort", sort); + return this; + } + + /** + * State gh milestone query builder. + * + * @param state + * the state + * @return the gh milestone query builder + */ + public GHMilestoneQueryBuilder state(GHIssueState state) { + req.with("state", state); + return this; + } +} diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 757ee8cdcb..b03b25699a 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -3007,6 +3007,15 @@ public GHIssueQueryBuilder.ForRepository queryIssues() { return new GHIssueQueryBuilder.ForRepository(this); } + /** + * Retrieves milestones. + * + * @return the gh milestone query builder + */ + public GHMilestoneQueryBuilder queryMilestones() { + return new GHMilestoneQueryBuilder(this); + } + /** * Retrieves pull requests. * diff --git a/src/main/resources/META-INF/native-image/org.kohsuke/github-api/reflect-config.json b/src/main/resources/META-INF/native-image/org.kohsuke/github-api/reflect-config.json index 52af02a2a4..bb5b85772f 100644 --- a/src/main/resources/META-INF/native-image/org.kohsuke/github-api/reflect-config.json +++ b/src/main/resources/META-INF/native-image/org.kohsuke/github-api/reflect-config.json @@ -2564,6 +2564,21 @@ "allPublicClasses": true, "allDeclaredClasses": true }, + { + "name": "org.kohsuke.github.GHEventPayload$Milestone", + "allPublicFields": true, + "allDeclaredFields": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredConstructors": true, + "queryAllPublicMethods": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredMethods": true, + "allPublicClasses": true, + "allDeclaredClasses": true + }, { "name": "org.kohsuke.github.GHEventPayload$Ping", "allPublicFields": true, @@ -3719,6 +3734,36 @@ "allPublicClasses": true, "allDeclaredClasses": true }, + { + "name": "org.kohsuke.github.GHMilestoneQueryBuilder", + "allPublicFields": true, + "allDeclaredFields": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredConstructors": true, + "queryAllPublicMethods": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredMethods": true, + "allPublicClasses": true, + "allDeclaredClasses": true + }, + { + "name": "org.kohsuke.github.GHMilestoneQueryBuilder$Sort", + "allPublicFields": true, + "allDeclaredFields": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredConstructors": true, + "queryAllPublicMethods": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredMethods": true, + "allPublicClasses": true, + "allDeclaredClasses": true + }, { "name": "org.kohsuke.github.GHMilestoneState", "allPublicFields": true, diff --git a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java index aa0186075e..8d8b5af056 100644 --- a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java +++ b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java @@ -491,10 +491,6 @@ public void discussion_created() throws Exception { // @Test // public void membership() throws Exception {} - // TODO implement support classes and write test - // @Test - // public void milestone() throws Exception {} - // TODO implement support classes and write test // @Test // public void page_build() throws Exception {} @@ -901,6 +897,38 @@ public void membership_added() throws Exception { assertThat(team.getOrganization().getLogin(), is("gsmet-bot-playground")); } + /** + * Milestone closed. + * + * @throws Exception + * the exception + */ + @Test + @Payload("milestone") + public void milestone() throws Exception { + final GHEventPayload.Milestone event = GitHub.offline() + .parseEventPayload(payload.asReader(), GHEventPayload.Milestone.class); + assertThat(event.getAction(), is("closed")); + + final GHMilestone milestone = event.getMilestone(); + assertThat(milestone.getId(), is(16523020L)); + assertThat(milestone.getNumber(), is(2)); + assertThat(milestone.getTitle(), is("Test milestone")); + assertThat(milestone.getDescription(), is("")); + assertThat(milestone.getState(), is(GHMilestoneState.CLOSED)); + assertThat(milestone.getOpenIssues(), is(0)); + assertThat(milestone.getClosedIssues(), is(0)); + assertThat(milestone.getCreatedAt().toEpochMilli(), is(1782373293000L)); + assertThat(milestone.getUpdatedAt().toEpochMilli(), is(1782373452000L)); + assertThat(milestone.getClosedAt().toEpochMilli(), is(1782373452000L)); + assertThat(milestone.getDueOn().toEpochMilli(), is(1782432000000L)); + assertThat(milestone.getCreator().getLogin(), is("gsmet")); + + assertThat(event.getSender().getLogin(), is("gsmet")); + assertThat(event.getRepository().getFullName(), is("gsmet/quarkus-bot-java-playground")); + assertThat(event.getInstallation().getId(), is(90470530L)); + } + /** * Ping. * diff --git a/src/test/java/org/kohsuke/github/GHMilestoneTest.java b/src/test/java/org/kohsuke/github/GHMilestoneTest.java index b7e6994d3e..e6a8fdc980 100644 --- a/src/test/java/org/kohsuke/github/GHMilestoneTest.java +++ b/src/test/java/org/kohsuke/github/GHMilestoneTest.java @@ -7,6 +7,8 @@ import java.io.IOException; import java.time.Instant; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; import static org.hamcrest.Matchers.*; @@ -18,6 +20,13 @@ */ public class GHMilestoneTest extends AbstractGitHubWireMockTest { + private static List filterTestMilestones(List milestones) { + return milestones.stream() + .map(GHMilestone::getTitle) + .filter(t -> t.startsWith("Milestone Sort ")) + .collect(Collectors.toList()); + } + /** * Create default GHMilestoneTest instance */ @@ -38,14 +47,84 @@ public void cleanUp() throws Exception { return; } - for (GHMilestone milestone : getRepository(getNonRecordingGitHub()).listMilestones(GHIssueState.ALL)) { + GHRepository repo = getRepository(getNonRecordingGitHub()); + + for (GHIssue issue : repo.queryIssues().state(GHIssueState.ALL).list()) { + if (issue.getTitle().endsWith("for sort test") || issue.getTitle().equals("Issue for testUnsetMilestone")) { + issue.close(); + } + } + + for (GHMilestone milestone : repo.listMilestones(GHIssueState.ALL)) { if ("Original Title".equals(milestone.getTitle()) || "Updated Title".equals(milestone.getTitle()) - || "Unset Test Milestone".equals(milestone.getTitle())) { + || "Unset Test Milestone".equals(milestone.getTitle()) + || "Milestone Sort A".equals(milestone.getTitle()) + || "Milestone Sort B".equals(milestone.getTitle())) { milestone.delete(); } } } + /** + * Test list milestones with sort and direction. + * + * @throws IOException + * Signals that an I/O exception has occurred. + */ + @Test + public void testListMilestonesWithSort() throws IOException { + GHRepository repo = getRepository(); + GHMilestone milestoneA = repo.createMilestone("Milestone Sort A", "First milestone"); + milestoneA.setDueOn(GitHubClient.parseInstant("2025-06-01T00:00:00Z")); + GHMilestone milestoneB = repo.createMilestone("Milestone Sort B", "Second milestone"); + milestoneB.setDueOn(GitHubClient.parseInstant("2025-12-01T00:00:00Z")); + + // List with due_on sort ascending (default) + List ascending = filterTestMilestones(repo.queryMilestones() + .state(GHIssueState.OPEN) + .sort(GHMilestoneQueryBuilder.Sort.DUE_ON) + .direction(GHDirection.ASC) + .list() + .toList()); + assertThat(ascending, contains("Milestone Sort A", "Milestone Sort B")); + + // List with due_on sort descending + List descending = filterTestMilestones(repo.queryMilestones() + .state(GHIssueState.OPEN) + .sort(GHMilestoneQueryBuilder.Sort.DUE_ON) + .direction(GHDirection.DESC) + .list() + .toList()); + assertThat(descending, contains("Milestone Sort B", "Milestone Sort A")); + + // Create issues to test completeness sort + // Milestone A: 1 open, 1 closed = 50% complete + GHIssue issueA1 = repo.createIssue("Issue A1 for sort test").milestone(milestoneA).create(); + GHIssue issueA2 = repo.createIssue("Issue A2 for sort test").milestone(milestoneA).create(); + issueA2.close(); + + // Milestone B: 1 open, 0 closed = 0% complete + GHIssue issueB1 = repo.createIssue("Issue B1 for sort test").milestone(milestoneB).create(); + + // List with completeness sort ascending (least complete first) + List byCompleteness = filterTestMilestones(repo.queryMilestones() + .state(GHIssueState.OPEN) + .sort(GHMilestoneQueryBuilder.Sort.COMPLETENESS) + .direction(GHDirection.ASC) + .list() + .toList()); + assertThat(byCompleteness, contains("Milestone Sort B", "Milestone Sort A")); + + // List with completeness sort descending (most complete first) + List byCompletenessDesc = filterTestMilestones(repo.queryMilestones() + .state(GHIssueState.OPEN) + .sort(GHMilestoneQueryBuilder.Sort.COMPLETENESS) + .direction(GHDirection.DESC) + .list() + .toList()); + assertThat(byCompletenessDesc, contains("Milestone Sort A", "Milestone Sort B")); + } + /** * Test unset milestone. * diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json index be5c08faaa..b151b94417 100644 --- a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json +++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json @@ -1,158 +1,169 @@ { - "action": "created", - "milestone": { - "url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3", - "html_url": "https://github.com/baxterandthehackers/public-repo/milestones/Test%20milestone%20creation%20webhook%20from%20command%20line2", - "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3/labels", - "id": 2055681, - "number": 3, - "title": "I am a milestone", - "description": null, - "creator": { - "login": "baxterthehacker", - "id": 7649605, - "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": true + "action": "closed", + "milestone": { + "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones/2", + "html_url": "https://github.com/gsmet/quarkus-bot-java-playground/milestone/2", + "labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones/2/labels", + "id": 16523020, + "node_id": "MI_kwDOEq3cwc4A_B8M", + "number": 2, + "title": "Test milestone", + "description": "", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "closed", + "created_at": "2026-06-25T07:41:33Z", + "updated_at": "2026-06-25T07:44:12Z", + "due_on": "2026-06-26T00:00:00Z", + "closed_at": "2026-06-25T07:44:12Z" }, - "open_issues": 0, - "closed_issues": 0, - "state": "open", - "created_at": "2016-10-07T19:26:08Z", - "updated_at": "2016-10-07T19:26:08Z", - "due_on": null, - "closed_at": null - }, - "repository": { - "id": 70275481, - "name": "public-repo", - "full_name": "baxterandthehackers/public-repo", - "owner": { - "login": "baxterandthehackers", - "id": 4312013, - "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterandthehackers", - "html_url": "https://github.com/baxterandthehackers", - "followers_url": "https://api.github.com/users/baxterandthehackers/followers", - "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", - "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", - "repos_url": "https://api.github.com/users/baxterandthehackers/repos", - "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", - "type": "Organization", - "site_admin": false + "repository": { + "id": 313384129, + "node_id": "MDEwOlJlcG9zaXRvcnkzMTMzODQxMjk=", + "name": "quarkus-bot-java-playground", + "full_name": "gsmet/quarkus-bot-java-playground", + "private": false, + "owner": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/gsmet/quarkus-bot-java-playground", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground", + "forks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/forks", + "keys_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/teams", + "hooks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/hooks", + "issue_events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/events{/number}", + "events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/events", + "assignees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/assignees{/user}", + "branches_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/branches{/branch}", + "tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/tags", + "blobs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/languages", + "stargazers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/stargazers", + "contributors_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contributors", + "subscribers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscribers", + "subscription_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscription", + "commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contents/{+path}", + "compare_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/merges", + "archive_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/downloads", + "issues_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues{/number}", + "pulls_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels{/name}", + "releases_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/releases{/id}", + "deployments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/deployments", + "created_at": "2020-11-16T17:55:53Z", + "updated_at": "2025-06-30T14:16:50Z", + "pushed_at": "2025-06-30T14:16:46Z", + "git_url": "git://github.com/gsmet/quarkus-bot-java-playground.git", + "ssh_url": "git@github.com:gsmet/quarkus-bot-java-playground.git", + "clone_url": "https://github.com/gsmet/quarkus-bot-java-playground.git", + "svn_url": "https://github.com/gsmet/quarkus-bot-java-playground", + "homepage": null, + "size": 170, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": true, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 61, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [], + "visibility": "public", + "forks": 2, + "open_issues": 61, + "watchers": 1, + "default_branch": "main" }, - "private": true, - "html_url": "https://github.com/baxterandthehackers/public-repo", - "description": null, - "fork": false, - "url": "https://api.github.com/repos/baxterandthehackers/public-repo", - "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks", - "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams", - "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks", - "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}", - "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events", - "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}", - "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}", - "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags", - "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}", - "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages", - "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers", - "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors", - "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers", - "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription", - "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}", - "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges", - "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads", - "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}", - "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}", - "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}", - "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}", - "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}", - "deployments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/deployments", - "created_at": "2016-10-07T19:10:12Z", - "updated_at": "2016-10-07T19:10:12Z", - "pushed_at": "2016-10-07T19:10:13Z", - "git_url": "git://github.com/baxterandthehackers/public-repo.git", - "ssh_url": "git@github.com:baxterandthehackers/public-repo.git", - "clone_url": "https://github.com/baxterandthehackers/public-repo.git", - "svn_url": "https://github.com/baxterandthehackers/public-repo", - "homepage": null, - "size": 0, - "stargazers_count": 0, - "watchers_count": 0, - "language": null, - "has_issues": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 0, - "mirror_url": null, - "open_issues_count": 0, - "forks": 0, - "open_issues": 0, - "watchers": 0, - "default_branch": "main" - }, - "organization": { - "login": "baxterandthehackers", - "id": 4312013, - "url": "https://api.github.com/orgs/baxterandthehackers", - "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", - "events_url": "https://api.github.com/orgs/baxterandthehackers/events", - "hooks_url": "https://api.github.com/orgs/baxterandthehackers/hooks", - "issues_url": "https://api.github.com/orgs/baxterandthehackers/issues", - "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", - "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", - "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3", - "description": "" - }, - "sender": { - "login": "baxterthehacker", - "id": 7649605, - "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/baxterthehacker", - "html_url": "https://github.com/baxterthehacker", - "followers_url": "https://api.github.com/users/baxterthehacker/followers", - "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", - "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", - "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", - "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", - "repos_url": "https://api.github.com/users/baxterthehacker/repos", - "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", - "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", - "type": "User", - "site_admin": true - } -} \ No newline at end of file + "sender": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "installation": { + "id": 90470530, + "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uOTA0NzA1MzA=" + } +} diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/1-orgs_hub4j-test-org.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/1-orgs_hub4j-test-org.json new file mode 100644 index 0000000000..8f69d1f03d --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/1-orgs_hub4j-test-org.json @@ -0,0 +1,76 @@ +{ + "login": "hub4j-test-org", + "id": 7544739, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=", + "url": "https://api.github.com/orgs/hub4j-test-org", + "repos_url": "https://api.github.com/orgs/hub4j-test-org/repos", + "events_url": "https://api.github.com/orgs/hub4j-test-org/events", + "hooks_url": "https://api.github.com/orgs/hub4j-test-org/hooks", + "issues_url": "https://api.github.com/orgs/hub4j-test-org/issues", + "members_url": "https://api.github.com/orgs/hub4j-test-org/members{/member}", + "public_members_url": "https://api.github.com/orgs/hub4j-test-org/public_members{/member}", + "avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4", + "description": "Hub4j Test Org Description (this could be null or blank too)", + "name": "Hub4j Test Org Name (this could be null or blank too)", + "company": null, + "blog": "https://hub4j.url.io/could/be/null", + "location": "Hub4j Test Org Location (this could be null or blank too)", + "email": "hub4jtestorgemail@could.be.null.com", + "twitter_username": null, + "is_verified": false, + "has_organization_projects": true, + "has_repository_projects": true, + "public_repos": 27, + "public_gists": 0, + "followers": 2, + "following": 0, + "html_url": "https://github.com/hub4j-test-org", + "created_at": "2014-05-10T19:39:11Z", + "updated_at": "2025-08-05T00:53:03Z", + "archived_at": null, + "type": "Organization", + "total_private_repos": 8, + "owned_private_repos": 8, + "private_gists": 0, + "disk_usage": 12076, + "collaborators": 1, + "billing_email": "kk@kohsuke.org", + "default_repository_permission": "none", + "members_can_create_repositories": false, + "two_factor_requirement_enabled": false, + "members_allowed_repository_creation_type": "none", + "members_can_create_public_repositories": false, + "members_can_create_private_repositories": false, + "members_can_create_internal_repositories": false, + "members_can_create_pages": true, + "members_can_fork_private_repositories": false, + "web_commit_signoff_required": false, + "deploy_keys_enabled_for_repositories": true, + "members_can_delete_repositories": true, + "members_can_change_repo_visibility": true, + "members_can_invite_outside_collaborators": true, + "members_can_delete_issues": false, + "display_commenter_full_name_setting_enabled": false, + "readers_can_create_discussions": true, + "members_can_create_teams": true, + "members_can_view_dependency_insights": true, + "default_repository_branch": "main", + "members_can_create_public_pages": true, + "members_can_create_private_pages": true, + "plan": { + "name": "free", + "space": 976562499, + "private_repos": 10000, + "filled_seats": 53, + "seats": 3 + }, + "advanced_security_enabled_for_new_repositories": false, + "dependabot_alerts_enabled_for_new_repositories": false, + "dependabot_security_updates_enabled_for_new_repositories": false, + "dependency_graph_enabled_for_new_repositories": false, + "secret_scanning_enabled_for_new_repositories": false, + "secret_scanning_push_protection_enabled_for_new_repositories": false, + "secret_scanning_push_protection_custom_link_enabled": false, + "secret_scanning_push_protection_custom_link": null, + "secret_scanning_validity_checks_enabled": false +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/10-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/10-r_h_g_issues.json new file mode 100644 index 0000000000..5b8b43ef52 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/10-r_h_g_issues.json @@ -0,0 +1,113 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489", + "repository_url": "https://api.github.com/repos/hub4j-test-org/github-api", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/comments", + "events_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/events", + "html_url": "https://github.com/hub4j-test-org/github-api/issues/489", + "id": 4741897077, + "node_id": "I_kwDODFTdCc8AAAABGqObdQ", + "number": 489, + "title": "Issue A2 for sort test", + "user": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 2, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:10Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2026-06-25T07:59:09Z", + "updated_at": "2026-06-25T07:59:09Z", + "closed_at": null, + "assignee": null, + "author_association": "MEMBER", + "issue_field_values": [], + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": null, + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/11-r_h_g_issues_489.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/11-r_h_g_issues_489.json new file mode 100644 index 0000000000..988c056d8b --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/11-r_h_g_issues_489.json @@ -0,0 +1,133 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489", + "repository_url": "https://api.github.com/repos/hub4j-test-org/github-api", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/comments", + "events_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/events", + "html_url": "https://github.com/hub4j-test-org/github-api/issues/489", + "id": 4741897077, + "node_id": "I_kwDODFTdCc8AAAABGqObdQ", + "number": 489, + "title": "Issue A2 for sort test", + "user": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 1, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:10Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2026-06-25T07:59:09Z", + "updated_at": "2026-06-25T07:59:10Z", + "closed_at": "2026-06-25T07:59:10Z", + "assignee": null, + "author_association": "MEMBER", + "issue_field_values": [], + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": null, + "closed_by": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/12-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/12-r_h_g_issues.json new file mode 100644 index 0000000000..052f544c9c --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/12-r_h_g_issues.json @@ -0,0 +1,113 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490", + "repository_url": "https://api.github.com/repos/hub4j-test-org/github-api", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490/comments", + "events_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490/events", + "html_url": "https://github.com/hub4j-test-org/github-api/issues/490", + "id": 4741897242, + "node_id": "I_kwDODFTdCc8AAAABGqOcGg", + "number": 490, + "title": "Issue B1 for sort test", + "user": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:11Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2026-06-25T07:59:11Z", + "updated_at": "2026-06-25T07:59:11Z", + "closed_at": null, + "assignee": null, + "author_association": "MEMBER", + "issue_field_values": [], + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": null, + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/13-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/13-r_h_g_milestones.json new file mode 100644 index 0000000000..85f9e28e8d --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/13-r_h_g_milestones.json @@ -0,0 +1,116 @@ +[ + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/1", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1/labels", + "id": 7188888, + "node_id": "MI_kwDODFTdCc4AbbGY", + "number": 1, + "title": "test-milestone", + "description": "", + "creator": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2021-09-25T18:57:12Z", + "updated_at": "2021-09-25T18:57:37Z", + "due_on": "2021-09-16T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:11Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 1, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:10Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + } +] \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/14-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/14-r_h_g_milestones.json new file mode 100644 index 0000000000..184a0e2bf2 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/14-r_h_g_milestones.json @@ -0,0 +1,116 @@ +[ + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 1, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:10Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:11Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/1", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1/labels", + "id": 7188888, + "node_id": "MI_kwDODFTdCc4AbbGY", + "number": 1, + "title": "test-milestone", + "description": "", + "creator": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2021-09-25T18:57:12Z", + "updated_at": "2021-09-25T18:57:37Z", + "due_on": "2021-09-16T00:00:00Z", + "closed_at": null + } +] \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/2-r_h_github-api.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/2-r_h_github-api.json new file mode 100644 index 0000000000..bccafe9a1b --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/2-r_h_github-api.json @@ -0,0 +1,403 @@ +{ + "id": 206888201, + "node_id": "MDEwOlJlcG9zaXRvcnkyMDY4ODgyMDE=", + "name": "github-api", + "full_name": "hub4j-test-org/github-api", + "private": false, + "owner": { + "login": "hub4j-test-org", + "id": 7544739, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hub4j-test-org", + "html_url": "https://github.com/hub4j-test-org", + "followers_url": "https://api.github.com/users/hub4j-test-org/followers", + "following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}", + "gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions", + "organizations_url": "https://api.github.com/users/hub4j-test-org/orgs", + "repos_url": "https://api.github.com/users/hub4j-test-org/repos", + "events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/hub4j-test-org/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/hub4j-test-org/github-api", + "description": "Tricky", + "fork": true, + "url": "https://api.github.com/repos/hub4j-test-org/github-api", + "forks_url": "https://api.github.com/repos/hub4j-test-org/github-api/forks", + "keys_url": "https://api.github.com/repos/hub4j-test-org/github-api/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hub4j-test-org/github-api/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hub4j-test-org/github-api/teams", + "hooks_url": "https://api.github.com/repos/hub4j-test-org/github-api/hooks", + "issue_events_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/events{/number}", + "events_url": "https://api.github.com/repos/hub4j-test-org/github-api/events", + "assignees_url": "https://api.github.com/repos/hub4j-test-org/github-api/assignees{/user}", + "branches_url": "https://api.github.com/repos/hub4j-test-org/github-api/branches{/branch}", + "tags_url": "https://api.github.com/repos/hub4j-test-org/github-api/tags", + "blobs_url": "https://api.github.com/repos/hub4j-test-org/github-api/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hub4j-test-org/github-api/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hub4j-test-org/github-api/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hub4j-test-org/github-api/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hub4j-test-org/github-api/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hub4j-test-org/github-api/languages", + "stargazers_url": "https://api.github.com/repos/hub4j-test-org/github-api/stargazers", + "contributors_url": "https://api.github.com/repos/hub4j-test-org/github-api/contributors", + "subscribers_url": "https://api.github.com/repos/hub4j-test-org/github-api/subscribers", + "subscription_url": "https://api.github.com/repos/hub4j-test-org/github-api/subscription", + "commits_url": "https://api.github.com/repos/hub4j-test-org/github-api/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hub4j-test-org/github-api/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hub4j-test-org/github-api/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hub4j-test-org/github-api/contents/{+path}", + "compare_url": "https://api.github.com/repos/hub4j-test-org/github-api/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hub4j-test-org/github-api/merges", + "archive_url": "https://api.github.com/repos/hub4j-test-org/github-api/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hub4j-test-org/github-api/downloads", + "issues_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues{/number}", + "pulls_url": "https://api.github.com/repos/hub4j-test-org/github-api/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hub4j-test-org/github-api/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/labels{/name}", + "releases_url": "https://api.github.com/repos/hub4j-test-org/github-api/releases{/id}", + "deployments_url": "https://api.github.com/repos/hub4j-test-org/github-api/deployments", + "created_at": "2019-09-06T23:26:04Z", + "updated_at": "2024-03-22T23:30:32Z", + "pushed_at": "2024-06-16T10:20:03Z", + "git_url": "git://github.com/hub4j-test-org/github-api.git", + "ssh_url": "git@github.com:hub4j-test-org/github-api.git", + "clone_url": "https://github.com/hub4j-test-org/github-api.git", + "svn_url": "https://github.com/hub4j-test-org/github-api", + "homepage": "http://github-api.kohsuke.org/", + "size": 18977, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 2, + "watchers": 1, + "default_branch": "main", + "permissions": { + "admin": true, + "maintain": true, + "push": true, + "triage": true, + "pull": true + }, + "temp_clone_token": "", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "allow_auto_merge": false, + "delete_branch_on_merge": false, + "allow_update_branch": false, + "use_squash_pr_title_as_default": false, + "squash_merge_commit_message": "COMMIT_MESSAGES", + "squash_merge_commit_title": "COMMIT_OR_PR_TITLE", + "merge_commit_message": "PR_TITLE", + "merge_commit_title": "MERGE_MESSAGE", + "custom_properties": {}, + "organization": { + "login": "hub4j-test-org", + "id": 7544739, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hub4j-test-org", + "html_url": "https://github.com/hub4j-test-org", + "followers_url": "https://api.github.com/users/hub4j-test-org/followers", + "following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}", + "gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions", + "organizations_url": "https://api.github.com/users/hub4j-test-org/orgs", + "repos_url": "https://api.github.com/users/hub4j-test-org/repos", + "events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/hub4j-test-org/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "parent": { + "id": 617210, + "node_id": "MDEwOlJlcG9zaXRvcnk2MTcyMTA=", + "name": "github-api", + "full_name": "hub4j/github-api", + "private": false, + "owner": { + "login": "hub4j", + "id": 54909825, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0OTA5ODI1", + "avatar_url": "https://avatars.githubusercontent.com/u/54909825?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hub4j", + "html_url": "https://github.com/hub4j", + "followers_url": "https://api.github.com/users/hub4j/followers", + "following_url": "https://api.github.com/users/hub4j/following{/other_user}", + "gists_url": "https://api.github.com/users/hub4j/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hub4j/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hub4j/subscriptions", + "organizations_url": "https://api.github.com/users/hub4j/orgs", + "repos_url": "https://api.github.com/users/hub4j/repos", + "events_url": "https://api.github.com/users/hub4j/events{/privacy}", + "received_events_url": "https://api.github.com/users/hub4j/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/hub4j/github-api", + "description": "Java API for GitHub", + "fork": false, + "url": "https://api.github.com/repos/hub4j/github-api", + "forks_url": "https://api.github.com/repos/hub4j/github-api/forks", + "keys_url": "https://api.github.com/repos/hub4j/github-api/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hub4j/github-api/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hub4j/github-api/teams", + "hooks_url": "https://api.github.com/repos/hub4j/github-api/hooks", + "issue_events_url": "https://api.github.com/repos/hub4j/github-api/issues/events{/number}", + "events_url": "https://api.github.com/repos/hub4j/github-api/events", + "assignees_url": "https://api.github.com/repos/hub4j/github-api/assignees{/user}", + "branches_url": "https://api.github.com/repos/hub4j/github-api/branches{/branch}", + "tags_url": "https://api.github.com/repos/hub4j/github-api/tags", + "blobs_url": "https://api.github.com/repos/hub4j/github-api/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hub4j/github-api/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hub4j/github-api/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hub4j/github-api/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hub4j/github-api/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hub4j/github-api/languages", + "stargazers_url": "https://api.github.com/repos/hub4j/github-api/stargazers", + "contributors_url": "https://api.github.com/repos/hub4j/github-api/contributors", + "subscribers_url": "https://api.github.com/repos/hub4j/github-api/subscribers", + "subscription_url": "https://api.github.com/repos/hub4j/github-api/subscription", + "commits_url": "https://api.github.com/repos/hub4j/github-api/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hub4j/github-api/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hub4j/github-api/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hub4j/github-api/contents/{+path}", + "compare_url": "https://api.github.com/repos/hub4j/github-api/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hub4j/github-api/merges", + "archive_url": "https://api.github.com/repos/hub4j/github-api/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hub4j/github-api/downloads", + "issues_url": "https://api.github.com/repos/hub4j/github-api/issues{/number}", + "pulls_url": "https://api.github.com/repos/hub4j/github-api/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hub4j/github-api/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hub4j/github-api/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hub4j/github-api/labels{/name}", + "releases_url": "https://api.github.com/repos/hub4j/github-api/releases{/id}", + "deployments_url": "https://api.github.com/repos/hub4j/github-api/deployments", + "created_at": "2010-04-19T04:13:03Z", + "updated_at": "2026-06-18T11:50:40Z", + "pushed_at": "2026-06-07T19:17:51Z", + "git_url": "git://github.com/hub4j/github-api.git", + "ssh_url": "git@github.com:hub4j/github-api.git", + "clone_url": "https://github.com/hub4j/github-api.git", + "svn_url": "https://github.com/hub4j/github-api", + "homepage": "https://hub4j.github.io/github-api/", + "size": 68365, + "stargazers_count": 1251, + "watchers_count": 1251, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": true, + "forks_count": 776, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 197, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [ + "api", + "client-library", + "github", + "github-api", + "github-api-v3", + "java", + "java-api" + ], + "visibility": "public", + "forks": 776, + "open_issues": 197, + "watchers": 1251, + "default_branch": "main" + }, + "source": { + "id": 617210, + "node_id": "MDEwOlJlcG9zaXRvcnk2MTcyMTA=", + "name": "github-api", + "full_name": "hub4j/github-api", + "private": false, + "owner": { + "login": "hub4j", + "id": 54909825, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0OTA5ODI1", + "avatar_url": "https://avatars.githubusercontent.com/u/54909825?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hub4j", + "html_url": "https://github.com/hub4j", + "followers_url": "https://api.github.com/users/hub4j/followers", + "following_url": "https://api.github.com/users/hub4j/following{/other_user}", + "gists_url": "https://api.github.com/users/hub4j/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hub4j/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hub4j/subscriptions", + "organizations_url": "https://api.github.com/users/hub4j/orgs", + "repos_url": "https://api.github.com/users/hub4j/repos", + "events_url": "https://api.github.com/users/hub4j/events{/privacy}", + "received_events_url": "https://api.github.com/users/hub4j/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/hub4j/github-api", + "description": "Java API for GitHub", + "fork": false, + "url": "https://api.github.com/repos/hub4j/github-api", + "forks_url": "https://api.github.com/repos/hub4j/github-api/forks", + "keys_url": "https://api.github.com/repos/hub4j/github-api/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hub4j/github-api/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hub4j/github-api/teams", + "hooks_url": "https://api.github.com/repos/hub4j/github-api/hooks", + "issue_events_url": "https://api.github.com/repos/hub4j/github-api/issues/events{/number}", + "events_url": "https://api.github.com/repos/hub4j/github-api/events", + "assignees_url": "https://api.github.com/repos/hub4j/github-api/assignees{/user}", + "branches_url": "https://api.github.com/repos/hub4j/github-api/branches{/branch}", + "tags_url": "https://api.github.com/repos/hub4j/github-api/tags", + "blobs_url": "https://api.github.com/repos/hub4j/github-api/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hub4j/github-api/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hub4j/github-api/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hub4j/github-api/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hub4j/github-api/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hub4j/github-api/languages", + "stargazers_url": "https://api.github.com/repos/hub4j/github-api/stargazers", + "contributors_url": "https://api.github.com/repos/hub4j/github-api/contributors", + "subscribers_url": "https://api.github.com/repos/hub4j/github-api/subscribers", + "subscription_url": "https://api.github.com/repos/hub4j/github-api/subscription", + "commits_url": "https://api.github.com/repos/hub4j/github-api/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hub4j/github-api/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hub4j/github-api/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hub4j/github-api/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hub4j/github-api/contents/{+path}", + "compare_url": "https://api.github.com/repos/hub4j/github-api/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hub4j/github-api/merges", + "archive_url": "https://api.github.com/repos/hub4j/github-api/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hub4j/github-api/downloads", + "issues_url": "https://api.github.com/repos/hub4j/github-api/issues{/number}", + "pulls_url": "https://api.github.com/repos/hub4j/github-api/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hub4j/github-api/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hub4j/github-api/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hub4j/github-api/labels{/name}", + "releases_url": "https://api.github.com/repos/hub4j/github-api/releases{/id}", + "deployments_url": "https://api.github.com/repos/hub4j/github-api/deployments", + "created_at": "2010-04-19T04:13:03Z", + "updated_at": "2026-06-18T11:50:40Z", + "pushed_at": "2026-06-07T19:17:51Z", + "git_url": "git://github.com/hub4j/github-api.git", + "ssh_url": "git@github.com:hub4j/github-api.git", + "clone_url": "https://github.com/hub4j/github-api.git", + "svn_url": "https://github.com/hub4j/github-api", + "homepage": "https://hub4j.github.io/github-api/", + "size": 68365, + "stargazers_count": 1251, + "watchers_count": 1251, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": true, + "forks_count": 776, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 197, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [ + "api", + "client-library", + "github", + "github-api", + "github-api-v3", + "java", + "java-api" + ], + "visibility": "public", + "forks": 776, + "open_issues": 197, + "watchers": 1251, + "default_branch": "main" + }, + "security_and_analysis": { + "secret_scanning": { + "status": "disabled" + }, + "secret_scanning_push_protection": { + "status": "disabled" + }, + "dependabot_security_updates": { + "status": "disabled" + }, + "secret_scanning_non_provider_patterns": { + "status": "disabled" + }, + "secret_scanning_validity_checks": { + "status": "disabled" + } + }, + "network_count": 776, + "subscribers_count": 0 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/3-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/3-r_h_g_milestones.json new file mode 100644 index 0000000000..a3360da3d7 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/3-r_h_g_milestones.json @@ -0,0 +1,38 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:06Z", + "due_on": null, + "closed_at": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/4-r_h_g_milestones_7.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/4-r_h_g_milestones_7.json new file mode 100644 index 0000000000..2f5ccdcfe4 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/4-r_h_g_milestones_7.json @@ -0,0 +1,38 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/5-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/5-r_h_g_milestones.json new file mode 100644 index 0000000000..0f5d54b496 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/5-r_h_g_milestones.json @@ -0,0 +1,38 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": null, + "closed_at": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/6-r_h_g_milestones_8.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/6-r_h_g_milestones_8.json new file mode 100644 index 0000000000..0a616bd89f --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/6-r_h_g_milestones_8.json @@ -0,0 +1,38 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/7-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/7-r_h_g_milestones.json new file mode 100644 index 0000000000..6b73aa05b2 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/7-r_h_g_milestones.json @@ -0,0 +1,116 @@ +[ + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/1", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1/labels", + "id": 7188888, + "node_id": "MI_kwDODFTdCc4AbbGY", + "number": 1, + "title": "test-milestone", + "description": "", + "creator": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2021-09-25T18:57:12Z", + "updated_at": "2021-09-25T18:57:37Z", + "due_on": "2021-09-16T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null + } +] \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/8-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/8-r_h_g_milestones.json new file mode 100644 index 0000000000..2a98932046 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/8-r_h_g_milestones.json @@ -0,0 +1,116 @@ +[ + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/8", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8/labels", + "id": 16523773, + "node_id": "MI_kwDODFTdCc4A_CH9", + "number": 8, + "title": "Milestone Sort B", + "description": "Second milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:07Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-12-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:07Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/1", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/1/labels", + "id": 7188888, + "node_id": "MI_kwDODFTdCc4AbbGY", + "number": 1, + "title": "test-milestone", + "description": "", + "creator": { + "login": "bitwiseman", + "id": 1958953, + "node_id": "MDQ6VXNlcjE5NTg5NTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1958953?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bitwiseman", + "html_url": "https://github.com/bitwiseman", + "followers_url": "https://api.github.com/users/bitwiseman/followers", + "following_url": "https://api.github.com/users/bitwiseman/following{/other_user}", + "gists_url": "https://api.github.com/users/bitwiseman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bitwiseman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bitwiseman/subscriptions", + "organizations_url": "https://api.github.com/users/bitwiseman/orgs", + "repos_url": "https://api.github.com/users/bitwiseman/repos", + "events_url": "https://api.github.com/users/bitwiseman/events{/privacy}", + "received_events_url": "https://api.github.com/users/bitwiseman/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2021-09-25T18:57:12Z", + "updated_at": "2021-09-25T18:57:37Z", + "due_on": "2021-09-16T00:00:00Z", + "closed_at": null + } +] \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/9-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/9-r_h_g_issues.json new file mode 100644 index 0000000000..3d08838451 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/__files/9-r_h_g_issues.json @@ -0,0 +1,113 @@ +{ + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488", + "repository_url": "https://api.github.com/repos/hub4j-test-org/github-api", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488/labels{/name}", + "comments_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488/comments", + "events_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488/events", + "html_url": "https://github.com/hub4j-test-org/github-api/issues/488", + "id": 4741896986, + "node_id": "I_kwDODFTdCc8AAAABGqObGg", + "number": 488, + "title": "Issue A1 for sort test", + "user": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7", + "html_url": "https://github.com/hub4j-test-org/github-api/milestone/7", + "labels_url": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7/labels", + "id": 16523772, + "node_id": "MI_kwDODFTdCc4A_CH8", + "number": 7, + "title": "Milestone Sort A", + "description": "First milestone", + "creator": { + "login": "gsmet", + "id": 1279749, + "node_id": "MDQ6VXNlcjEyNzk3NDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gsmet", + "html_url": "https://github.com/gsmet", + "followers_url": "https://api.github.com/users/gsmet/followers", + "following_url": "https://api.github.com/users/gsmet/following{/other_user}", + "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions", + "organizations_url": "https://api.github.com/users/gsmet/orgs", + "repos_url": "https://api.github.com/users/gsmet/repos", + "events_url": "https://api.github.com/users/gsmet/events{/privacy}", + "received_events_url": "https://api.github.com/users/gsmet/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2026-06-25T07:59:06Z", + "updated_at": "2026-06-25T07:59:09Z", + "due_on": "2025-06-01T00:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2026-06-25T07:59:09Z", + "updated_at": "2026-06-25T07:59:09Z", + "closed_at": null, + "assignee": null, + "author_association": "MEMBER", + "issue_field_values": [], + "type": null, + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": null, + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/1-orgs_hub4j-test-org.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/1-orgs_hub4j-test-org.json new file mode 100644 index 0000000000..b679b0fe4a --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/1-orgs_hub4j-test-org.json @@ -0,0 +1,47 @@ +{ + "id": "52de9170-60f6-4085-8b3e-2c5a61c79eff", + "name": "orgs_hub4j-test-org", + "request": { + "url": "/orgs/hub4j-test-org", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "1-orgs_hub4j-test-org.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:05 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"41dbc785ba90892da196b1337bc976897fab042446f4ee5eae6bf5c217b96418\"", + "Last-Modified": "Tue, 05 Aug 2025 00:53:03 GMT", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "admin:org, read:org, repo, user, write:org", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4957", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "43", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C14E:1483EF:3AA0546:38A0E24:6A3CDFC9" + } + }, + "uuid": "52de9170-60f6-4085-8b3e-2c5a61c79eff", + "persistent": true, + "insertionIndex": 1 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/10-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/10-r_h_g_issues.json new file mode 100644 index 0000000000..af45c71b72 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/10-r_h_g_issues.json @@ -0,0 +1,57 @@ +{ + "id": "6fccaf5d-b51b-4a9a-8446-cc3b72a91f5e", + "name": "repos_hub4j-test-org_github-api_issues", + "request": { + "url": "/repos/hub4j-test-org/github-api/issues", + "method": "POST", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"milestone\":7,\"assignees\":[],\"title\":\"Issue A2 for sort test\",\"labels\":[]}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 201, + "bodyFileName": "10-r_h_g_issues.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:10 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "\"cbfa8015c24a0f19cb4bb0bc6c42e3ca7b41dd2bd0cf94716fe8734f4a984e6a\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Deprecation": "Tue, 10 Mar 2026 00:00:00 GMT", + "Sunset": "Fri, 10 Mar 2028 00:00:00 GMT", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4895", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "105", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C18E:1483EF:3AA30BD:38A3764:6A3CDFCD", + "Link": "; rel=\"deprecation\"; type=\"text/html\"", + "Location": "https://api.github.com/repos/hub4j-test-org/github-api/issues/489" + } + }, + "uuid": "6fccaf5d-b51b-4a9a-8446-cc3b72a91f5e", + "persistent": true, + "insertionIndex": 10 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/11-r_h_g_issues_489.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/11-r_h_g_issues_489.json new file mode 100644 index 0000000000..d51fe434a3 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/11-r_h_g_issues_489.json @@ -0,0 +1,56 @@ +{ + "id": "e3d5f6d8-b350-4a97-bcdb-03ce4d9165fb", + "name": "repos_hub4j-test-org_github-api_issues_489", + "request": { + "url": "/repos/hub4j-test-org/github-api/issues/489", + "method": "PATCH", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"state\":\"closed\"}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 200, + "bodyFileName": "11-r_h_g_issues_489.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:11 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"dedd87bd4d06bfce14397460686278e5e32894819c7c5f4aa4fbbc6722e16108\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Deprecation": "Tue, 10 Mar 2026 00:00:00 GMT", + "Sunset": "Fri, 10 Mar 2028 00:00:00 GMT", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4894", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "106", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C196:1FD666:3AFE95E:38FDBF5:6A3CDFCE", + "Link": "; rel=\"deprecation\"; type=\"text/html\"" + } + }, + "uuid": "e3d5f6d8-b350-4a97-bcdb-03ce4d9165fb", + "persistent": true, + "insertionIndex": 11 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/12-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/12-r_h_g_issues.json new file mode 100644 index 0000000000..af23f961b3 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/12-r_h_g_issues.json @@ -0,0 +1,57 @@ +{ + "id": "4a7d5f5c-bef7-4b26-8fe0-75d050042637", + "name": "repos_hub4j-test-org_github-api_issues", + "request": { + "url": "/repos/hub4j-test-org/github-api/issues", + "method": "POST", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"milestone\":8,\"assignees\":[],\"title\":\"Issue B1 for sort test\",\"labels\":[]}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 201, + "bodyFileName": "12-r_h_g_issues.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:11 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "\"5871ad07e78dc332c24eed805e2f5edfe96a50562bb520befb219f0d9badb498\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Deprecation": "Tue, 10 Mar 2026 00:00:00 GMT", + "Sunset": "Fri, 10 Mar 2028 00:00:00 GMT", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4893", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "107", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "D3D4:13D7F2:396CA76:376754C:6A3CDFCF", + "Link": "; rel=\"deprecation\"; type=\"text/html\"", + "Location": "https://api.github.com/repos/hub4j-test-org/github-api/issues/490" + } + }, + "uuid": "4a7d5f5c-bef7-4b26-8fe0-75d050042637", + "persistent": true, + "insertionIndex": 12 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/13-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/13-r_h_g_milestones.json new file mode 100644 index 0000000000..ceba124f14 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/13-r_h_g_milestones.json @@ -0,0 +1,46 @@ +{ + "id": "be9cee05-47ef-4ed4-9a0e-0e92b0d94fdd", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones?state=open&sort=completeness&direction=asc", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "13-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:12 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"b93b45d2ea95ebbe1813c98d6b1559d80808c2c06951e00b22d3ade5432f828e\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4892", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "108", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "D3D8:291075:3FF9118:3E05451:6A3CDFD0" + } + }, + "uuid": "be9cee05-47ef-4ed4-9a0e-0e92b0d94fdd", + "persistent": true, + "insertionIndex": 13 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/14-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/14-r_h_g_milestones.json new file mode 100644 index 0000000000..d11c79511a --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/14-r_h_g_milestones.json @@ -0,0 +1,46 @@ +{ + "id": "c3933a9b-2e0b-41b5-ab9e-4427ddfd4ebf", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones?state=open&sort=completeness&direction=desc", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "14-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:12 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"6522d077d3125747126023fb9703bf07e8d11b22d2f49c6dee9716d11e060346\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4891", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "109", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "D3E4:291075:3FF95C8:3E058C3:6A3CDFD0" + } + }, + "uuid": "c3933a9b-2e0b-41b5-ab9e-4427ddfd4ebf", + "persistent": true, + "insertionIndex": 14 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/2-r_h_github-api.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/2-r_h_github-api.json new file mode 100644 index 0000000000..b4b389cbe7 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/2-r_h_github-api.json @@ -0,0 +1,47 @@ +{ + "id": "6a34a2d8-a58f-489a-951a-3758ab75c715", + "name": "repos_hub4j-test-org_github-api", + "request": { + "url": "/repos/hub4j-test-org/github-api", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "2-r_h_github-api.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:06 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"4922cf2cf93aefa6cc36fcf6c287feb054082ab32ca8d02f88be34f41a83bf4d\"", + "Last-Modified": "Fri, 22 Mar 2024 23:30:32 GMT", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4903", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "97", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C152:3C0AC5:3A24FA8:382CF08:6A3CDFCA" + } + }, + "uuid": "6a34a2d8-a58f-489a-951a-3758ab75c715", + "persistent": true, + "insertionIndex": 2 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/3-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/3-r_h_g_milestones.json new file mode 100644 index 0000000000..6abc45f979 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/3-r_h_g_milestones.json @@ -0,0 +1,54 @@ +{ + "id": "c9fc8fb6-9fb1-48ca-a422-02483d91c9e0", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones", + "method": "POST", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"description\":\"First milestone\",\"title\":\"Milestone Sort A\"}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 201, + "bodyFileName": "3-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:06 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "\"fd9d4b6915e2734f59480acda63faac6a6b9f7d7853651ad25a06a8ed220e5e7\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4902", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "98", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C154:38FA88:3A50130:3859644:6A3CDFCA", + "Location": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/7" + } + }, + "uuid": "c9fc8fb6-9fb1-48ca-a422-02483d91c9e0", + "persistent": true, + "insertionIndex": 3 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/4-r_h_g_milestones_7.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/4-r_h_g_milestones_7.json new file mode 100644 index 0000000000..57c6b35e1e --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/4-r_h_g_milestones_7.json @@ -0,0 +1,53 @@ +{ + "id": "e49926ca-0c41-4766-aaef-f5f5bc984c5f", + "name": "repos_hub4j-test-org_github-api_milestones_7", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones/7", + "method": "PATCH", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"due_on\":\"2025-06-01T00:00:00Z\"}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 200, + "bodyFileName": "4-r_h_g_milestones_7.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:07 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"299881571d4a7c42bf860eb284ff912f828e007deb9349a349886c51546b72be\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4901", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "99", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C15A:3B2047:3B4BB5F:3941F92:6A3CDFCA" + } + }, + "uuid": "e49926ca-0c41-4766-aaef-f5f5bc984c5f", + "persistent": true, + "insertionIndex": 4 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/5-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/5-r_h_g_milestones.json new file mode 100644 index 0000000000..ba1673f871 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/5-r_h_g_milestones.json @@ -0,0 +1,54 @@ +{ + "id": "21e9c794-d599-4926-b35c-a95c2a4b507c", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones", + "method": "POST", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"description\":\"Second milestone\",\"title\":\"Milestone Sort B\"}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 201, + "bodyFileName": "5-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:07 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "\"1ea7d4d538b25e39fe9152a78c10d18f999c0efc9b8e76610d93a3d3d41c7076\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4900", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "100", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C162:32CC7D:3BC239F:39ADD83:6A3CDFCB", + "Location": "https://api.github.com/repos/hub4j-test-org/github-api/milestones/8" + } + }, + "uuid": "21e9c794-d599-4926-b35c-a95c2a4b507c", + "persistent": true, + "insertionIndex": 5 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/6-r_h_g_milestones_8.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/6-r_h_g_milestones_8.json new file mode 100644 index 0000000000..7667b1a940 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/6-r_h_g_milestones_8.json @@ -0,0 +1,53 @@ +{ + "id": "0b0e08c9-a67f-403b-ae7a-8f0059f667ac", + "name": "repos_hub4j-test-org_github-api_milestones_8", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones/8", + "method": "PATCH", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"due_on\":\"2025-12-01T00:00:00Z\"}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 200, + "bodyFileName": "6-r_h_g_milestones_8.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:07 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"744085c450b3ffaccc0df7189dffbdb4499b1c477396d6ec426fd4aede1bbd44\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4899", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "101", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C16C:168D37:3BDEB52:39E8FC3:6A3CDFCB" + } + }, + "uuid": "0b0e08c9-a67f-403b-ae7a-8f0059f667ac", + "persistent": true, + "insertionIndex": 6 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/7-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/7-r_h_g_milestones.json new file mode 100644 index 0000000000..6f9380e1e4 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/7-r_h_g_milestones.json @@ -0,0 +1,46 @@ +{ + "id": "9ba3d5b4-9454-4f17-8f8f-4d4e63df0833", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones?state=open&sort=due-on&direction=asc", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "7-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:08 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"1ba97ff4442bbf49e4cec5ffa8a5c9bc4dd128ae6eff05cd4a287ced11d951a0\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4898", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "102", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C176:285D15:38FF1EB:3711F49:6A3CDFCC" + } + }, + "uuid": "9ba3d5b4-9454-4f17-8f8f-4d4e63df0833", + "persistent": true, + "insertionIndex": 7 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/8-r_h_g_milestones.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/8-r_h_g_milestones.json new file mode 100644 index 0000000000..83320f6cc6 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/8-r_h_g_milestones.json @@ -0,0 +1,46 @@ +{ + "id": "f1eae406-05fb-4001-9cff-b0baa66f3411", + "name": "repos_hub4j-test-org_github-api_milestones", + "request": { + "url": "/repos/hub4j-test-org/github-api/milestones?state=open&sort=due-on&direction=desc", + "method": "GET", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + } + }, + "response": { + "status": 200, + "bodyFileName": "8-r_h_g_milestones.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:08 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "W/\"f316947ff6e211a217ea410e587ceec9e1cfaa2bbaf33294c0c34dc7d2fc419f\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v3; format=json", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4897", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "103", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C184:38FA88:3A51729:385AB74:6A3CDFCC" + } + }, + "uuid": "f1eae406-05fb-4001-9cff-b0baa66f3411", + "persistent": true, + "insertionIndex": 8 +} \ No newline at end of file diff --git a/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/9-r_h_g_issues.json b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/9-r_h_g_issues.json new file mode 100644 index 0000000000..009a12b379 --- /dev/null +++ b/src/test/resources/org/kohsuke/github/GHMilestoneTest/wiremock/testListMilestonesWithSort/mappings/9-r_h_g_issues.json @@ -0,0 +1,57 @@ +{ + "id": "5c1619cb-e6e2-4e25-834f-fa9e2a018fd5", + "name": "repos_hub4j-test-org_github-api_issues", + "request": { + "url": "/repos/hub4j-test-org/github-api/issues", + "method": "POST", + "headers": { + "Accept": { + "equalTo": "application/vnd.github+json" + } + }, + "bodyPatterns": [ + { + "equalToJson": "{\"milestone\":7,\"assignees\":[],\"title\":\"Issue A1 for sort test\",\"labels\":[]}", + "ignoreArrayOrder": true, + "ignoreExtraElements": false + } + ] + }, + "response": { + "status": 201, + "bodyFileName": "9-r_h_g_issues.json", + "headers": { + "Date": "Thu, 25 Jun 2026 07:59:09 GMT", + "Content-Type": "application/json; charset=utf-8", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With", + "ETag": "\"6c301a8e95ebfef417f5c17c4c501c09e9e64f7886f607ac5d099cefb814e495\"", + "X-OAuth-Scopes": "admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, gist, notifications, project, repo, user, workflow, write:discussion", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Deprecation": "Tue, 10 Mar 2026 00:00:00 GMT", + "Sunset": "Fri, 10 Mar 2028 00:00:00 GMT", + "x-github-api-version-selected": "2022-11-28", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset, Warning", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "0", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Server": "github.com", + "X-RateLimit-Limit": "5000", + "X-RateLimit-Remaining": "4896", + "X-RateLimit-Reset": "1782377714", + "X-RateLimit-Used": "104", + "X-RateLimit-Resource": "core", + "X-GitHub-Request-Id": "C188:11D81C:3BD4898:39D65DD:6A3CDFCC", + "Link": "; rel=\"deprecation\"; type=\"text/html\"", + "Location": "https://api.github.com/repos/hub4j-test-org/github-api/issues/488" + } + }, + "uuid": "5c1619cb-e6e2-4e25-834f-fa9e2a018fd5", + "persistent": true, + "insertionIndex": 9 +} \ No newline at end of file