From d7fd6656229c87b7ef7de62aae97095fbfae1cae Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Mon, 3 Jul 2023 18:01:24 -0400 Subject: [PATCH] [Breaking Change]: Fix DeploymentStatus IDs Overflowing (#2736) --- Octokit.Tests/Models/DeploymentStatusTests.cs | 52 +++++++++++++++++++ Octokit/Models/Response/DeploymentStatus.cs | 4 +- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/Octokit.Tests/Models/DeploymentStatusTests.cs b/Octokit.Tests/Models/DeploymentStatusTests.cs index 8f24a681cc..dd402b8f7b 100644 --- a/Octokit.Tests/Models/DeploymentStatusTests.cs +++ b/Octokit.Tests/Models/DeploymentStatusTests.cs @@ -51,5 +51,57 @@ public void CanDeserialize() Assert.Equal(DateTimeOffset.Parse("2012-07-20T01:19:13Z"), actual.UpdatedAt); Assert.Equal("Deploy request from hubot", actual.Description); } + + [Fact] + public void CanDeserialize64BitId() + { + const string json = @"{ + ""url"": ""https://api.github.com/repos/tgstation/TerraGov-Marine-Corps/deployments/965900823/statuses/2151661540"", + ""id"": 2151661540, + ""node_id"": ""DES_kwDOCXi6sc6AP7_k"", + ""state"": ""in_progress"", + ""creator"": { + ""login"": ""comfyorange"", + ""id"": 61334995, + ""node_id"": ""MDQ6VXNlcjYxMzM0OTk1"", + ""avatar_url"": ""https://avatars.githubusercontent.com/u/61334995?v=4"", + ""gravatar_id"": """", + ""url"": ""https://api.github.com/users/comfyorange"", + ""html_url"": ""https://github.com/comfyorange"", + ""followers_url"": ""https://api.github.com/users/comfyorange/followers"", + ""following_url"": ""https://api.github.com/users/comfyorange/following{/other_user}"", + ""gists_url"": ""https://api.github.com/users/comfyorange/gists{/gist_id}"", + ""starred_url"": ""https://api.github.com/users/comfyorange/starred{/owner}{/repo}"", + ""subscriptions_url"": ""https://api.github.com/users/comfyorange/subscriptions"", + ""organizations_url"": ""https://api.github.com/users/comfyorange/orgs"", + ""repos_url"": ""https://api.github.com/users/comfyorange/repos"", + ""events_url"": ""https://api.github.com/users/comfyorange/events{/privacy}"", + ""received_events_url"": ""https://api.github.com/users/comfyorange/received_events"", + ""type"": ""User"", + ""site_admin"": false + }, + ""description"": ""The project is being deployed"", + ""environment"": ""TGS: TGMC"", + ""target_url"": """", + ""created_at"": ""2023-06-29T19:10:55Z"", + ""updated_at"": ""2023-06-29T19:10:55Z"", + ""deployment_url"": ""https://api.github.com/repos/tgstation/TerraGov-Marine-Corps/deployments/965900823"", + ""repository_url"": ""https://api.github.com/repos/tgstation/TerraGov-Marine-Corps"", + ""environment_url"": """", + ""log_url"": """", + ""performed_via_github_app"": null + }"; + + var actual = new SimpleJsonSerializer().Deserialize(json); + + Assert.Equal(2151661540, actual.Id); + Assert.Equal("https://api.github.com/repos/tgstation/TerraGov-Marine-Corps/deployments/965900823/statuses/2151661540", actual.Url); + Assert.Equal(DeploymentState.InProgress, actual.State); + Assert.Null(actual.Payload); + Assert.Equal(String.Empty, actual.TargetUrl); + Assert.Equal(DateTimeOffset.Parse("2023-06-29T19:10:55Z"), actual.CreatedAt); + Assert.Equal(DateTimeOffset.Parse("2023-06-29T19:10:55Z"), actual.UpdatedAt); + Assert.Equal("The project is being deployed", actual.Description); + } } } diff --git a/Octokit/Models/Response/DeploymentStatus.cs b/Octokit/Models/Response/DeploymentStatus.cs index 1936e63c35..39044637fe 100644 --- a/Octokit/Models/Response/DeploymentStatus.cs +++ b/Octokit/Models/Response/DeploymentStatus.cs @@ -11,7 +11,7 @@ public class DeploymentStatus { public DeploymentStatus() { } - public DeploymentStatus(int id, string nodeId, string url, DeploymentState state, User creator, IReadOnlyDictionary payload, string targetUrl, string logUrl, string environmentUrl, DateTimeOffset createdAt, DateTimeOffset updatedAt, string description) + public DeploymentStatus(long id, string nodeId, string url, DeploymentState state, User creator, IReadOnlyDictionary payload, string targetUrl, string logUrl, string environmentUrl, DateTimeOffset createdAt, DateTimeOffset updatedAt, string description) { Id = id; NodeId = nodeId; @@ -30,7 +30,7 @@ public DeploymentStatus(int id, string nodeId, string url, DeploymentState state /// /// Id of this deployment status. /// - public int Id { get; private set; } + public long Id { get; private set; } /// /// GraphQL Node Id