github-api icon indicating copy to clipboard operation
github-api copied to clipboard

Calling getRef().delete() does not respect the base URL set in .withEndpoint()

Open ajmalab opened this issue 1 year ago • 3 comments

Describe the bug Calling getRef().delete() does not respect the base URL set in .withEndpoint() when creating the OAuth client. It uses api.github.com by default. While this would work in production, it blocks the ability to test this endpoint using local mock servers.

To Reproduce Steps to reproduce the behavior:

  1. Create an OAuth client as follows
var githubClient = new GitHubBuilder().withOAuthToken("my-token").withEndpoint("http://localhost:8080").build();
  1. Call the method to delete a ref:
githubClient.getRepo("owner/repo").getRef("heads/my-branch").delete()
  1. If you inspect the request in a debugger, you will see that the constructed URL has the host https://api.github.com and not http://localhost:8080.

Expected behavior The getRef().delete() method should respect the base URL passed in via withEndpoint() like the other chained methods of getRepository().

Additional context Library version: 1.321

ajmalab avatar Oct 18 '24 16:10 ajmalab

@ajmalab
What is the JSON that is returned by the call to getRepo and getRef()? The library uses the returned urls to calculate the endpoint to call for delete().

It sounds like you're trying to run local test server. To do that you need to modify the response body to replace api.github.com with localhost:8080.

We use GitHubApiResponseTransformer:

https://github.com/hub4j/github-api/blob/6ea075b2e4994ddad644143de3214ff48749781f/src/test/java/org/kohsuke/github/GitHubWireMockRule.java#L567

Which then calls mapToMockGitHub which has a bunch of body string replacements:

https://github.com/hub4j/github-api/blob/6ea075b2e4994ddad644143de3214ff48749781f/src/test/java/org/kohsuke/github/GitHubWireMockRule.java#L516

bitwiseman avatar Oct 20 '24 23:10 bitwiseman

@bitwiseman I see, I'm currently getting around the issue by doing a similar transformation within my service. It has worked as intended in all other circumstances though.

Here's the returned response for getRef():

  "ref": "refs/heads/my-test-branch-1",
  "node_id": "MDM6UmVmcmVmcy9oZWFkcy9mZWF0dXJlQQ==",
  "url": "https://api.github.com/repos/dummy-org/example-repo/git/refs/heads/my-test-branch-1",
  "object": {
    "type": "commit",
    "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd",
    "url": "https://api.github.com/repos/dummy-org/example-repo/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd"
  }
}

ajmalab avatar Oct 24 '24 12:10 ajmalab

It sounds like you're saying the body information isn't consistent with your server URLs.

The scenario you're describing is out of scope for this library.

You are welcome to submit a PR to try and address it but we do not have the bandwidth.

bitwiseman avatar Oct 25 '24 00:10 bitwiseman