Skip to content

Commit 68ec53e

Browse files
Merge pull request #1276 from github/get-gh-database-id
Add call to get org database id
2 parents b5767d1 + a842577 commit 68ec53e

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

src/Octoshift/Services/GithubApi.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,31 @@ public virtual async Task<string> GetOrganizationId(string org)
225225
}
226226
}
227227

228+
public virtual async Task<string> GetOrganizationDatabaseId(string org)
229+
{
230+
var url = $"{_apiUrl}/graphql";
231+
232+
var payload = new
233+
{
234+
query = "query($login: String!) {organization(login: $login) { login, databaseId, name } }",
235+
variables = new { login = org }
236+
};
237+
238+
try
239+
{
240+
return await _retryPolicy.Retry(async () =>
241+
{
242+
var data = await _client.PostGraphQLAsync(url, payload);
243+
244+
return (string)data["data"]["organization"]["databaseId"];
245+
});
246+
}
247+
catch (Exception ex)
248+
{
249+
throw new OctoshiftCliException($"Failed to lookup the Organization database ID for organization '{org}'", ex);
250+
}
251+
}
252+
228253
public virtual async Task<string> GetEnterpriseId(string enterpriseName)
229254
{
230255
var url = $"{_apiUrl}/graphql";

src/OctoshiftCLI.Tests/Octoshift/Services/GithubApiTests.cs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,74 @@ public async Task GetOrganizationId_Retries_On_GQL_Error()
601601
result.Should().Be(orgId);
602602
}
603603

604+
[Fact]
605+
public async Task GetOrganizationDatabaseId_Returns_The_Database_Id()
606+
{
607+
// Arrange
608+
const string databaseId = "DATABASE_ID";
609+
610+
var url = $"https://api.github.com/graphql";
611+
var payload =
612+
$"{{\"query\":\"query($login: String!) {{organization(login: $login) {{ login, databaseId, name }} }}\",\"variables\":{{\"login\":\"{GITHUB_ORG}\"}}}}";
613+
var response = JObject.Parse($@"
614+
{{
615+
""data"": {{
616+
""organization"": {{
617+
""login"": ""{GITHUB_ORG}"",
618+
""name"": ""github"",
619+
""databaseId"": ""{databaseId}""
620+
}}
621+
}}
622+
}}");
623+
624+
_githubClientMock
625+
.Setup(m => m.PostGraphQLAsync(url, It.Is<object>(x => x.ToJson() == payload), null))
626+
.ReturnsAsync(response);
627+
628+
// Act
629+
var result = await _githubApi.GetOrganizationDatabaseId(GITHUB_ORG);
630+
631+
// Assert
632+
result.Should().Be(databaseId);
633+
}
634+
635+
[Fact]
636+
public async Task GetOrganizationDatabaseId_Retries_On_GQL_Error()
637+
{
638+
// Arrange
639+
const string databaseId = "DATABASE_ID";
640+
641+
var url = $"https://api.github.com/graphql";
642+
var payload =
643+
$"{{\"query\":\"query($login: String!) {{organization(login: $login) {{ login, databaseId, name }} }}\",\"variables\":{{\"login\":\"{GITHUB_ORG}\"}}}}";
644+
645+
var response = JObject.Parse($@"
646+
{{
647+
""data"":
648+
{{
649+
""organization"":
650+
{{
651+
""login"": ""{GITHUB_ORG}"",
652+
""databaseId"": ""{databaseId}"",
653+
""name"": ""github""
654+
}}
655+
}}
656+
}}");
657+
658+
_githubClientMock
659+
.SetupSequence(m => m.PostGraphQLAsync(url, It.Is<object>(x => x.ToJson() == payload), null))
660+
.ReturnsAsync(GQL_ERROR_RESPONSE)
661+
.ReturnsAsync(GQL_ERROR_RESPONSE)
662+
.ReturnsAsync(response);
663+
664+
// Act
665+
var result = await _githubApi.GetOrganizationDatabaseId(GITHUB_ORG);
666+
667+
// Assert
668+
result.Should().Be(databaseId);
669+
}
670+
671+
604672
[Fact]
605673
public async Task GetEnterpriseId_Returns_The_Enterprise_Id()
606674
{

0 commit comments

Comments
 (0)