diff --git a/tests/OpenCode.Sdk.Tests/Common/Errors/DeclaredErrorTests.cs b/tests/OpenCode.Sdk.Tests/Common/Errors/DeclaredErrorTests.cs index 0b938b15..7f912c51 100644 --- a/tests/OpenCode.Sdk.Tests/Common/Errors/DeclaredErrorTests.cs +++ b/tests/OpenCode.Sdk.Tests/Common/Errors/DeclaredErrorTests.cs @@ -1,11 +1,15 @@ using System.Globalization; -using System.Net; using System.Text; using System.Text.Json; -using OpenCode.Sdk.Models; using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Config; +using OpenCode.Sdk.Tests.Credentials; +using OpenCode.Sdk.Tests.Debug; +using OpenCode.Sdk.Tests.Experimental; +using OpenCode.Sdk.Tests.Forms; using OpenCode.Sdk.Tests.Harness; using OpenCode.Sdk.Tests.Support; +using OpenCode.Sdk.Tests.Worktrees; namespace OpenCode.Sdk.Tests.Common.Errors; @@ -13,20 +17,12 @@ public sealed class DeclaredErrorTests { public static IEnumerable> EveryDoor() => [ - static () => new( - "worktree.create:400:InvalidRequestError", - new DeclaredErrorDoor( - nameof(WorktreesClient.CreateWorktreeAsync), - "worktree.create", - "post", - "/api/worktree", - static async (client, options) => await client.Worktrees.CreateWorktreeAsync( - new WorktreeCreateRequest { ProjectId = "prj_1", Directory = "/repo/feature" }, options)), - HttpStatusCode.BadRequest, - WireBodyData.InvalidRequestError, - "InvalidRequestError", - typeof(InvalidRequestError), - "#/paths/~1api~1worktree/post/responses/400/content/application~1json/schema/anyOf/1"), + .. WorktreesDeclaredErrors.Rows(), + .. ConfigDeclaredErrors.Rows(), + .. CredentialsDeclaredErrors.Rows(), + .. DebugDeclaredErrors.Rows(), + .. ExperimentalDeclaredErrors.Rows(), + .. FormsDeclaredErrors.Rows(), ]; [Test] diff --git a/tests/OpenCode.Sdk.Tests/Config/ConfigClientContractTests.cs b/tests/OpenCode.Sdk.Tests/Config/ConfigClientContractTests.cs index 2366197b..3ccd467f 100644 --- a/tests/OpenCode.Sdk.Tests/Config/ConfigClientContractTests.cs +++ b/tests/OpenCode.Sdk.Tests/Config/ConfigClientContractTests.cs @@ -25,31 +25,6 @@ public async Task GetShellsAsync_Should_Return_The_Bare_Typed_List() await Assert.That(request.RequestUri).IsEqualTo(new Uri("http://localhost:4096/api/config/shell")); } - [Test] - public async Task GetShellsAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Config.GetShellsAsync()) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } - - [Test] - public async Task GetShellsAsync_Should_Return_The_401_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var response = await scenario.Client.Config.GetShellsAsync(OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(401); - await Assert.That(response.Error).IsTypeOf(); - } - [Test] [Arguments("pwsh")] [Arguments(null)] @@ -69,31 +44,4 @@ public async Task UpdateConfigAsync_Should_Send_The_Required_Nullable_Shell(stri await Assert.That(body.RootElement.EnumerateObject().Count()).IsEqualTo(1); await Assert.That(body.RootElement.GetProperty("shell").GetString()).IsEqualTo(shell); } - - [Test] - public async Task UpdateConfigAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Experimental.UpdateConfigAsync( - new ExperimentalConfigUpdateRequest { Shell = null, })) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } - - [Test] - public async Task UpdateConfigAsync_Should_Return_The_401_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var response = await scenario.Client.Experimental.UpdateConfigAsync( - new ExperimentalConfigUpdateRequest { Shell = null, }, OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(401); - await Assert.That(response.Error).IsTypeOf(); - } } diff --git a/tests/OpenCode.Sdk.Tests/Config/ConfigDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Config/ConfigDeclaredErrors.cs new file mode 100644 index 00000000..e144d93f --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Config/ConfigDeclaredErrors.cs @@ -0,0 +1,67 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Config; + +public static class ConfigDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "config.shells:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(ConfigClient.GetShellsAsync), + "config.shells", + "get", + "/api/config/shell", + static async (client, options) => await client.Config.GetShellsAsync(options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1config~1shell/get/responses/400/content/application~1json/schema"), + static () => new( + "config.shells:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(ConfigClient.GetShellsAsync), + "config.shells", + "get", + "/api/config/shell", + static async (client, options) => await client.Config.GetShellsAsync(options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1config~1shell/get/responses/401/content/application~1json/schema"), + static () => new( + "experimental.config.update:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(ExperimentalClient.UpdateConfigAsync), + "experimental.config.update", + "patch", + "/api/experimental/config", + static async (client, options) => await client.Experimental.UpdateConfigAsync( + new ExperimentalConfigUpdateRequest { Shell = null, }, options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1experimental~1config/patch/responses/400/content/application~1json/schema"), + static () => new( + "experimental.config.update:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(ExperimentalClient.UpdateConfigAsync), + "experimental.config.update", + "patch", + "/api/experimental/config", + static async (client, options) => await client.Experimental.UpdateConfigAsync( + new ExperimentalConfigUpdateRequest { Shell = null, }, options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1experimental~1config/patch/responses/401/content/application~1json/schema"), + ]; +} diff --git a/tests/OpenCode.Sdk.Tests/Credentials/CredentialsClientContractTests.cs b/tests/OpenCode.Sdk.Tests/Credentials/CredentialsClientContractTests.cs index 5b26ca7b..cd4d0c44 100644 --- a/tests/OpenCode.Sdk.Tests/Credentials/CredentialsClientContractTests.cs +++ b/tests/OpenCode.Sdk.Tests/Credentials/CredentialsClientContractTests.cs @@ -39,25 +39,6 @@ await Assert.That(request.Body).IsEqualTo( "{\"integrationID\":\"openai\",\"label\":\"work\",\"value\":{\"type\":\"key\",\"key\":\"sk-test\"},\"activate\":true}"); } - [Test] - public async Task CreateCredentialAsync_Should_Return_The_Declared_409_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Conflict, WireBodyData.ConflictError); - - var response = await scenario.Client.Credentials.CreateCredentialAsync( - new CredentialCreateRequest - { - Id = "cred_1", - IntegrationId = "openai", - Value = new CredentialKey { Key = "sk-test" }, - }, - OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(409); - await Assert.That(response.Error).IsTypeOf(); - } - [Test] public async Task CreateCredentialAsync_Should_Send_A_Caller_Chosen_Id() { @@ -96,19 +77,6 @@ public async Task ListCredentialsAsync_Should_Read_Both_Value_Arms() await Assert.That(request.Body).IsNull(); } - [Test] - public async Task ListCredentialsAsync_Should_Throw_The_Declared_401_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Credentials.ListCredentialsAsync()) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(401); - await Assert.That(exception.Error).IsTypeOf(); - } - [Test] public async Task UpdateCredentialAsync_Should_Send_The_Patch_Body_On_The_Flat_Id_Route() { @@ -140,30 +108,4 @@ public async Task ActivateCredentialAsync_Should_Post_On_The_Flat_Id_Route() await Assert.That(request.Method.Method).IsEqualTo("POST"); await Assert.That(request.RequestUri).IsEqualTo(new Uri("http://localhost:4096/api/credential/cred_1/activate")); } - - [Test] - public async Task ActivateCredentialAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Credentials.ActivateCredentialAsync("cred_1")) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } - - [Test] - public async Task ActivateCredentialAsync_Should_Return_The_401_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var response = await scenario.Client.Credentials.ActivateCredentialAsync( - "cred_1", requestOptions: OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(401); - await Assert.That(response.Error).IsTypeOf(); - } } diff --git a/tests/OpenCode.Sdk.Tests/Credentials/CredentialsDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Credentials/CredentialsDeclaredErrors.cs new file mode 100644 index 00000000..173e2219 --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Credentials/CredentialsDeclaredErrors.cs @@ -0,0 +1,71 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Credentials; + +public static class CredentialsDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "credential.create:409:ConflictError", + new DeclaredErrorDoor( + nameof(CredentialsClient.CreateCredentialAsync), + "credential.create", + "post", + "/api/credential", + static async (client, options) => await client.Credentials.CreateCredentialAsync( + new CredentialCreateRequest + { + Id = "cred_1", + IntegrationId = "openai", + Value = new CredentialKey { Key = "sk-test" }, + }, options)), + HttpStatusCode.Conflict, + WireBodyData.ConflictError, + "ConflictError", + typeof(ConflictError), + "#/paths/~1api~1credential/post/responses/409/content/application~1json/schema"), + static () => new( + "credential.list:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(CredentialsClient.ListCredentialsAsync), + "credential.list", + "get", + "/api/credential", + static async (client, options) => await client.Credentials.ListCredentialsAsync(options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1credential/get/responses/401/content/application~1json/schema"), + static () => new( + "credential.activate:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(CredentialsClient.ActivateCredentialAsync), + "credential.activate", + "post", + "/api/credential/{credentialID}/activate", + static async (client, options) => await client.Credentials.ActivateCredentialAsync("cred_1", options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1credential~1{credentialID}~1activate/post/responses/400/content/application~1json/schema"), + static () => new( + "credential.activate:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(CredentialsClient.ActivateCredentialAsync), + "credential.activate", + "post", + "/api/credential/{credentialID}/activate", + static async (client, options) => await client.Credentials.ActivateCredentialAsync("cred_1", options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1credential~1{credentialID}~1activate/post/responses/401/content/application~1json/schema"), + ]; +} diff --git a/tests/OpenCode.Sdk.Tests/Debug/DebugClientContractTests.cs b/tests/OpenCode.Sdk.Tests/Debug/DebugClientContractTests.cs index 2ea7f63b..711ee6f9 100644 --- a/tests/OpenCode.Sdk.Tests/Debug/DebugClientContractTests.cs +++ b/tests/OpenCode.Sdk.Tests/Debug/DebugClientContractTests.cs @@ -1,5 +1,4 @@ using System.Net; -using OpenCode.Sdk.Models; using OpenCode.Sdk.Tests.Support; namespace OpenCode.Sdk.Tests.Debug; @@ -30,29 +29,4 @@ public async Task ListLocationsAsync_Should_Return_An_Empty_List() await Assert.That(response.Locations).IsEmpty(); } - - [Test] - public async Task ListLocationsAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Debug.ListLocationsAsync()) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } - - [Test] - public async Task ListLocationsAsync_Should_Return_The_401_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var response = await scenario.Client.Debug.ListLocationsAsync(requestOptions: OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(401); - await Assert.That(response.Error).IsTypeOf(); - } } diff --git a/tests/OpenCode.Sdk.Tests/Debug/DebugDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Debug/DebugDeclaredErrors.cs new file mode 100644 index 00000000..5a003e7e --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Debug/DebugDeclaredErrors.cs @@ -0,0 +1,39 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Debug; + +public static class DebugDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "debug.location.list:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(DebugClient.ListLocationsAsync), + "debug.location.list", + "get", + "/api/debug/location", + static async (client, options) => await client.Debug.ListLocationsAsync(requestOptions: options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1debug~1location/get/responses/400/content/application~1json/schema"), + static () => new( + "debug.location.list:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(DebugClient.ListLocationsAsync), + "debug.location.list", + "get", + "/api/debug/location", + static async (client, options) => await client.Debug.ListLocationsAsync(requestOptions: options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1debug~1location/get/responses/401/content/application~1json/schema"), + ]; +} diff --git a/tests/OpenCode.Sdk.Tests/Experimental/ExperimentalDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Experimental/ExperimentalDeclaredErrors.cs new file mode 100644 index 00000000..4029f738 --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Experimental/ExperimentalDeclaredErrors.cs @@ -0,0 +1,31 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Experimental; + +public static class ExperimentalDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "experimental.fs.write:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(ExperimentalClient.WriteFileAsync), + "experimental.fs.write", + "post", + "/api/experimental/fs/write", + static async (client, options) => + { + using var content = new MemoryStream([0x01]); + return await client.Experimental.WriteFileAsync( + new ExperimentalFsWriteRequest { Path = "a.bin" }, content, options); + }), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1experimental~1fs~1write/post/responses/400/content/application~1json/schema"), + ]; +} diff --git a/tests/OpenCode.Sdk.Tests/Experimental/FileWriteContractTests.cs b/tests/OpenCode.Sdk.Tests/Experimental/FileWriteContractTests.cs index 748cf143..b273c26c 100644 --- a/tests/OpenCode.Sdk.Tests/Experimental/FileWriteContractTests.cs +++ b/tests/OpenCode.Sdk.Tests/Experimental/FileWriteContractTests.cs @@ -26,19 +26,4 @@ await Assert.That(recorded.RequestUri!.AbsoluteUri) await Assert.That(response.File.Path).IsEqualTo("/repo/assets/logo.bin"); await Assert.That(response.Location.Directory).IsEqualTo(WireBodyData.ResolvedDirectory); } - - [Test] - public async Task WriteFileAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - using var content = new MemoryStream([0x01]); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Experimental.WriteFileAsync( - new ExperimentalFsWriteRequest { Path = "a.bin" }, content)) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } } diff --git a/tests/OpenCode.Sdk.Tests/Forms/FormsClientContractTests.cs b/tests/OpenCode.Sdk.Tests/Forms/FormsClientContractTests.cs index 0a1a687e..73e39adf 100644 --- a/tests/OpenCode.Sdk.Tests/Forms/FormsClientContractTests.cs +++ b/tests/OpenCode.Sdk.Tests/Forms/FormsClientContractTests.cs @@ -35,29 +35,4 @@ public async Task ListFormsAsync_Should_Return_An_Empty_List() await Assert.That(response.Forms).IsEmpty(); } - - [Test] - public async Task ListFormsAsync_Should_Throw_The_Declared_400_Error() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.BadRequest, WireBodyData.InvalidRequestError); - - var exception = await Assert - .That(async () => _ = await scenario.Client.Forms.ListFormsAsync()) - .Throws(); - - await Assert.That(exception!.Status).IsEqualTo(400); - await Assert.That(exception.Error).IsTypeOf(); - } - - [Test] - public async Task ListFormsAsync_Should_Return_The_401_Error_On_The_NoThrow_Spine() - { - using var scenario = ContractScenario.Responding(HttpStatusCode.Unauthorized, WireBodyData.UnauthorizedError); - - var response = await scenario.Client.Forms.ListFormsAsync(requestOptions: OpenCodeRequestOptions.NoThrow); - - await Assert.That(response.IsError).IsTrue(); - await Assert.That(response.Status).IsEqualTo(401); - await Assert.That(response.Error).IsTypeOf(); - } } diff --git a/tests/OpenCode.Sdk.Tests/Forms/FormsDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Forms/FormsDeclaredErrors.cs new file mode 100644 index 00000000..6635d4a8 --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Forms/FormsDeclaredErrors.cs @@ -0,0 +1,39 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Forms; + +public static class FormsDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "form.list:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(FormsClient.ListFormsAsync), + "form.list", + "get", + "/api/form", + static async (client, options) => await client.Forms.ListFormsAsync(requestOptions: options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1form/get/responses/400/content/application~1json/schema"), + static () => new( + "form.list:401:UnauthorizedError", + new DeclaredErrorDoor( + nameof(FormsClient.ListFormsAsync), + "form.list", + "get", + "/api/form", + static async (client, options) => await client.Forms.ListFormsAsync(requestOptions: options)), + HttpStatusCode.Unauthorized, + WireBodyData.UnauthorizedError, + "UnauthorizedError", + typeof(UnauthorizedError), + "#/paths/~1api~1form/get/responses/401/content/application~1json/schema"), + ]; +} diff --git a/tests/OpenCode.Sdk.Tests/Worktrees/WorktreesDeclaredErrors.cs b/tests/OpenCode.Sdk.Tests/Worktrees/WorktreesDeclaredErrors.cs new file mode 100644 index 00000000..4132ce3f --- /dev/null +++ b/tests/OpenCode.Sdk.Tests/Worktrees/WorktreesDeclaredErrors.cs @@ -0,0 +1,27 @@ +using System.Net; +using OpenCode.Sdk.Models; +using OpenCode.Sdk.Tests.Common.Support; +using OpenCode.Sdk.Tests.Support; + +namespace OpenCode.Sdk.Tests.Worktrees; + +public static class WorktreesDeclaredErrors +{ + public static IEnumerable> Rows() => + [ + static () => new( + "worktree.create:400:InvalidRequestError", + new DeclaredErrorDoor( + nameof(WorktreesClient.CreateWorktreeAsync), + "worktree.create", + "post", + "/api/worktree", + static async (client, options) => await client.Worktrees.CreateWorktreeAsync( + new WorktreeCreateRequest { ProjectId = "prj_1", Directory = "/repo/feature" }, options)), + HttpStatusCode.BadRequest, + WireBodyData.InvalidRequestError, + "InvalidRequestError", + typeof(InvalidRequestError), + "#/paths/~1api~1worktree/post/responses/400/content/application~1json/schema/anyOf/1"), + ]; +} diff --git a/tools/jscpd/tests.baseline.json b/tools/jscpd/tests.baseline.json index 86ca1a8e..fa6c116c 100644 --- a/tools/jscpd/tests.baseline.json +++ b/tools/jscpd/tests.baseline.json @@ -3,28 +3,24 @@ "fingerprints": { "0020688adbb7ffea": 1, "00342d539c7b0bf9": 1, - "00aab1347c60e619": 1, "01417d72ad1b123c": 1, "01b50a050ff5cb57": 1, - "02c449784785f5e1": 1, + "01dcc53ff3eec92e": 1, + "0281a275a0fcf9f5": 1, + "02d421174ecab381": 1, "030445ef25b69be7": 1, "030b9be65c2b2225": 1, "032245d683ed5066": 1, "0341de072c280e0e": 2, "03f0da59b2a78217": 1, "047178ad85b36704": 1, - "053cf7003742af8b": 1, - "05990412764d4af8": 1, "059dcd6e0a494338": 1, - "05bec1db549b3145": 1, "060d60ecdc435655": 1, - "0646131256062ec7": 1, - "06963808d80f8635": 1, + "06656fd8e84d7308": 1, "06f41df1aeaf1cd9": 1, "073ba1f3be6c91d0": 1, "073d220255049f78": 1, "081ae509f53be7a5": 1, - "08419195c9d82a48": 1, "08c890a54f4dc2a8": 1, "08f771f140cb08bb": 1, "0915fed6b837aff8": 1, @@ -34,61 +30,52 @@ "098fb3bcb2fb04a3": 1, "09cdd0045baeeb79": 1, "0a0c79f212dac8aa": 1, + "0a3c56da01d57546": 1, "0a6e5c2d3b8c81ff": 1, "0a83952fafd4de0d": 1, "0b1dd9528bf9f4d7": 1, - "0bf07eca2ad5d37a": 1, "0c4aa6cdd20ff426": 1, "0c53a2dd00579986": 1, "0c6ad1b72d1c5abd": 1, "0cee267a64eb44dc": 1, "0d494a1b361ea0f6": 1, "0d59c107c28482f6": 1, - "0e3563f01a4c7340": 1, "0ed982ddb7f8699d": 1, - "0edc37ae240b7c35": 1, "0ef0fc8554074249": 1, "0f55f7d7adfa2f82": 1, "0faa099538e4e7a0": 1, "0fcc7cca1b6402dd": 1, - "0ffa9abf9d9e844e": 1, "10003a5ebdb1faa9": 1, "1035e50fc18d0089": 1, "10ae734f6c09cd4d": 1, + "10b1f125bff80a24": 1, "113cc076f3fdaac2": 1, "116939c0012f36db": 1, "118f6000645c9441": 1, "11bf507ea1387ebc": 1, "11e6156620b2560f": 1, - "11ee0180b37b5d87": 1, "125ee26a2b20b167": 1, "13211ae1b77d178e": 1, - "1363ad233bb49d6b": 1, "139a4466552f7894": 1, "13ad4ac3b5dbd5d7": 1, "13fa62aa808a28cb": 1, - "141c9b35d283a1cc": 1, "14284878346f6672": 1, - "144da272b2295a00": 1, "14f3cf459e8fd59e": 1, "14f4b594979ef4be": 1, - "15f6943efefbba82": 1, + "1541fbb4d4169e3b": 1, "15f72a1f46f3211c": 1, - "16581e5dac5d2421": 1, "171c27993e2f8380": 1, "17537e2a94773132": 1, + "17ab2b36ae54f58c": 1, + "1893ade463908aa8": 1, "18b20d9b8321f296": 1, "1909d5d413d0fafa": 1, - "196f4000011d069a": 1, - "198316bae932a25a": 1, "1af631b28fef999f": 1, "1b00c86157f39774": 1, "1b17fdf1bf126048": 1, "1b4f0f0a741b6050": 1, "1b54291af2e1e368": 1, - "1be556ac421cb7ec": 1, "1c1e187804bcbe79": 1, - "1d5da73d305a0798": 1, "1de0e7ea7cfbd872": 1, "1e9a2448f05cb633": 1, "1ee3129fd27ce7fc": 1, @@ -99,9 +86,7 @@ "20f47cefc98df1f0": 1, "210bbefc7e3a3805": 1, "2168c4bc0179c8db": 1, - "2179550e5407130d": 1, "21fecd279dd4bb07": 1, - "2237d7645b5fdfe5": 1, "22516ea0ae540c5d": 1, "227c14e04277d803": 1, "227dd03cf78a874e": 1, @@ -123,56 +108,53 @@ "289e70c9f4f42e6b": 1, "28d4e0800dd0bcb2": 1, "28dc26ce0d1fa7ec": 1, - "294a68123ffbfe27": 1, "29e2d3f4c6ced0a9": 1, "2a2ea864e10f10a0": 1, - "2a6fba049050425f": 1, "2bef63e501d18ed2": 1, "2cce43ebc1614860": 1, "2cd64c5a0bd7b129": 1, "2d01f1bea1f9ea7e": 1, "2d0c7764aa30effc": 1, - "2e10753f9a336f97": 1, "2e6446a9c3e54be2": 1, "2ebc929ec99531d7": 1, "2ef093de84b22985": 1, "2fa52323893c6990": 1, "2fce9f9be54d9810": 1, "2fcfde38c702a305": 1, + "2fd59fd21a10a274": 1, "30024875e03c93af": 1, "303aee7f7b8af88f": 1, "3081885a80a22be3": 1, "3095017bef402cf6": 1, + "30bb2b9ad95556f7": 1, "30c6457c90ba767e": 1, + "30ced3581af45822": 1, + "30cf7167ef1b22a3": 1, "31079b601cabad85": 1, "325aedadc9c51610": 1, - "32a22f84426c274c": 1, "32a53e20ee7c711b": 1, - "338595f92b8c9b2c": 1, + "34000b667aa1909e": 1, "34812987b8a4a722": 1, - "34ff66db689cfea4": 1, + "34fcf0ae76620da9": 1, "350995582d58fa70": 1, "365bc439e50e1c16": 1, "366c2d108bd284de": 1, "36c9a7fe23bd443f": 1, + "371c4674c25c1ba2": 1, "3787bbf8fd3bb831": 1, - "379f472c314886ca": 1, "37e7cf7d45ffba52": 1, "381a9b351137f9ca": 1, "3882460d4ac3aa39": 1, "395bcea3b3a0f37b": 1, - "39981a4a4d340082": 4, + "39d2972d41c80376": 1, + "3a246ada37b9d048": 1, "3a31a52bec51fb1d": 1, "3a87c8a45e85cc43": 1, - "3a8ac0fd2e0c79a7": 1, "3aa741762878529d": 1, - "3b290eb15830d924": 1, "3b4ee00b9fd149f5": 1, "3b71e78270640ef3": 1, "3c605c52befef8a8": 1, "3c72e0db609061c0": 1, - "3ca9e998947ac50c": 1, - "3d55c26e1ecea078": 1, "3d9c303176f75e03": 1, "3dd4aea62c719f68": 1, "3dec5ec598cf3e79": 1, @@ -185,10 +167,9 @@ "3f1d04fcf9712e5d": 1, "3f3dbe95e1417a1b": 3, "3f95418f86463b66": 1, - "40385632dadab4ac": 1, + "40dcbe1aa5ea0aa6": 1, "41005cc85152f877": 1, "410855c256ca33cf": 1, - "411bf938cdbb8b64": 1, "411f04f073e9ad3f": 1, "4192fdb04dccceeb": 1, "4202e901bcb4f8ba": 1, @@ -197,11 +178,11 @@ "442313bd038e5928": 1, "44259b731f378b4b": 1, "4489253ca84315db": 1, - "46ca0d8e7e3a35ba": 1, "479fdc49d7da2d6e": 1, "47c6dec036a94d60": 1, "47d341670708569a": 1, "482c654299e74350": 1, + "483ed1bb08a9eef3": 1, "48c83373cc2d7d8d": 1, "492f8010b57edfcf": 1, "49432516d8bdce34": 1, @@ -218,11 +199,13 @@ "4e9f7bbcbfcdf308": 1, "50c75dddf97e272d": 1, "50c8491cd38b65bf": 1, + "51fb3f0dec051296": 1, "51fe16f43bda14c9": 1, "523b54f16719c5d5": 1, "52c3af1ca095f904": 1, "54a00ea64bca1d6f": 1, "54a6b2a26aec6926": 1, + "54b81fbb791e6864": 1, "54b9c19635b2d532": 1, "554f27198300c077": 1, "557d9ce8017ed9e9": 1, @@ -233,12 +216,13 @@ "567e66ef84568376": 2, "573c75d83c9a3c95": 1, "57470feca6bbb65f": 1, - "57ed9a2b57cf3418": 1, "57f025d61c1ae125": 1, "580bb3a45cc1aa00": 1, + "582bada14b0680c6": 1, "5890b6797611cdbf": 1, "58cf3aedc0f4f1c5": 1, "58df2dce6a57ddc3": 1, + "592128a9b607f5ab": 1, "5977e81f73804251": 1, "5ae402699aab9b4f": 1, "5b5f89cf29e631cb": 1, @@ -248,35 +232,29 @@ "5c10d3e20ff8a618": 1, "5c956c46330fb9c3": 1, "5cb2e7e9a7e11a37": 1, - "5d4b7662ce8a11ef": 1, "5d5ef92942ea8a4b": 1, - "5dc4ace824586d3d": 1, + "5de3f61eebf4f087": 1, "5e13371fd2b2249a": 1, "5f5853703072392b": 1, "5f76879862027b63": 1, - "5fb568ba7ba65e9e": 1, "5fc40824eff9ddbe": 1, "5fce21230688a4cc": 1, "5fea5678f28a491f": 1, - "6168f0be77f3d62e": 1, - "61aec69f93ee31a3": 1, "61e86a6218889bef": 1, "620efa04847bf466": 1, "621414e77f14a6ae": 1, "627b537ce0eab7f7": 1, "62e4b3096108aa49": 1, - "634f7d1273f299c5": 1, "63726760a9f9dac3": 1, "638060fdb01ef26f": 1, "63ccee6cade2a08c": 1, - "63cfa7e6ae3eeca8": 1, - "63d25b3e282d370c": 1, "645f364bb0fb02ea": 1, "647d48d7086c2f8d": 1, - "656fb8b6f18ddd4f": 1, + "64c07f90ee3979fc": 1, "65c592402d3c35db": 1, "666a7f0d59bdfda9": 1, "673cdefbc0e27446": 1, + "674b01d92c72d2fa": 1, "67f863244c398a2e": 1, "686f4cbec8a0fd92": 1, "687d5ab065e65e16": 1, @@ -286,15 +264,15 @@ "6b1a411c7888c5c6": 1, "6b53f281286caa87": 1, "6b5b7b4be4793cb7": 1, - "6b916dc4fa22b135": 1, "6ba2cd7a4868cb82": 1, "6bbbe6bbf34d4b4a": 1, "6bc1a56f488e732f": 1, + "6c143e6d5b470a14": 1, "6c383a49efeb60f2": 1, "6c8b4fa34ddcf1cf": 1, - "6ca6666a4adca176": 1, "6cc50d702b0cf2cf": 1, "6ce49ad646f4a55d": 1, + "6ce7d068cf7d63e8": 1, "6d2315e42adf5051": 1, "6d348ca9871cd43b": 1, "6e28853461e0f610": 1, @@ -305,7 +283,9 @@ "6ed8b7b89c38fd7f": 1, "6ee3e67f6a10362e": 1, "6efa92670898d4c4": 1, + "6fd6a008b9edbcad": 1, "7015815c99e52132": 1, + "706c80b864b19699": 1, "70b546f19e61694e": 1, "70e78f68bbb3f8b1": 1, "710c8abd019e2510": 1, @@ -318,20 +298,18 @@ "7438b1eeebb9c879": 1, "74ab566488e0a7b5": 1, "74bad6b365aeb9ef": 1, - "74de226107a47ba9": 1, + "753b739aff6551a0": 1, "755f26525b4fa26d": 1, "75aa297e7148b393": 1, "75e50c1abd5451b7": 1, "7635ce12f398b4fe": 1, - "766be0553c361cb9": 1, "76c1f1da5348b1b2": 1, - "76d04a6e44d1a740": 1, "774ec2e63be4fa1d": 1, "776de12b3d238a95": 1, - "78e8a6e0e1dacf98": 2, "7931cdb3741c2bb8": 1, "7943699770a884f4": 1, "796944d81a86d537": 1, + "7979ae4cefb88a17": 1, "7ab4fed3be6bca2c": 1, "7b16854634035afe": 1, "7b29c98f174c4aad": 1, @@ -342,11 +320,12 @@ "7da92939d4cdca00": 1, "7e09a30a918c9d2f": 1, "7ea14f75d7412427": 1, + "7eda659709115c79": 1, "7eda9e729d5869ca": 1, + "7ee9b7831ad8eeb9": 1, "7f8b8b1b7f8ac7c9": 1, "7ffcd9e9160f6b45": 1, "80cc7036ff095cb9": 1, - "80df9c5748306399": 1, "813356530d4e26c5": 1, "81ceb8987ba6c6e3": 1, "822934d2e089a207": 1, @@ -354,18 +333,13 @@ "829f99957c9b8f6f": 1, "82b68fdd16b7897c": 1, "82d68551f5be56b4": 1, - "839acebb16d2ae08": 1, "83cf50adb5c58985": 1, "84029d744b2215c7": 1, - "8440cd90df9d40a2": 1, - "8472d20a9e5c98f3": 1, - "849beb4a35a19b02": 1, "852958b905b8447d": 1, "852e00262bbefd12": 1, "859240ba1081004a": 1, "86629d252be8ae75": 1, "868313d60a5b083d": 1, - "86bb15479fb1c054": 1, "86c12e9faa8ad5f5": 1, "86fe3739deb7f33a": 1, "87158a808785d646": 1, @@ -374,13 +348,12 @@ "88490cc5463a3f5b": 1, "8990b0dcf557805f": 1, "89b40759e47ca8db": 1, - "89da94f6e3a69c7d": 1, "8a46989d4cc28dc2": 1, "8a7412eb78a37817": 1, "8a7e47959ada7043": 1, "8adcbd3f74c61e25": 1, + "8c76e81987466f89": 1, "8d130dcf8156d446": 1, - "8d45b44c776767ac": 1, "8dbef398f2f6ca1a": 1, "8dc9324256cda03a": 1, "8dec8c75da2a3305": 1, @@ -389,6 +362,7 @@ "8eac88e1c62578f7": 1, "8fb533df3ad5143e": 1, "8fcd5cc8f352b66c": 1, + "8fe075c7a07d77c5": 1, "90832cdd704dea7f": 1, "90911bb723015f18": 1, "90e2d0b4e68471be": 1, @@ -399,53 +373,39 @@ "923328e81f42dd0a": 1, "926d6280af25895e": 1, "92a23a8351ac6f5b": 1, - "93b9870af2c85e3c": 1, "93c7ffbef646d5bd": 1, - "943a5cceaaa0085d": 1, "94c3b038871234a4": 1, "950d14b87d7527d0": 1, "9676160daa1042e5": 1, "96af7cbd3e81daa0": 1, - "970216ae9df36cc1": 1, - "97067486c6a61874": 1, "9720751d6958956a": 1, - "972157a5302e9a7e": 1, "97413e8ff5b212d1": 1, - "9807478b48fb6f6a": 1, + "9857d1c8d34efbc3": 1, "98c9c3613c3d13da": 1, "98cf46d5ad809549": 1, "99234a03fbba27b8": 1, "99a67420ab2fdabd": 2, "99ab2f421483cca1": 1, - "99c1a94c67d2d719": 1, + "99d5a509c3e89f68": 1, "9a6d3e40660da4b5": 1, "9afaad4e059435eb": 1, "9b108a480389775d": 1, "9b714ea3ac0f8456": 1, "9b74c90c792496fd": 1, - "9b8eeada912f2fdb": 1, "9c209e8b6e1de814": 1, "9cb8a77612db0cc1": 1, "9cfd4908ab13a49c": 1, "9e3047781f98341c": 1, "9e6b559433dd1ad6": 1, "9ef5a8b0fb2c88e7": 1, - "9f5ef72c7dadba05": 1, "9fafa1f7c850803c": 1, - "a135f302ef98694b": 1, - "a1479175d09b61f9": 1, "a184ce7305097ded": 1, - "a2215818eb2b9264": 1, "a26cf9c1d71dd814": 1, "a2808814144175fa": 1, - "a2e0b515450c40c9": 1, "a304d611f14b1879": 1, - "a4dd036b8a4ee2c6": 1, "a4fe4a3bc845b057": 1, "a5397ab292d68e09": 1, "a5830a7e1b5d7975": 1, - "a58ea3d2f30dafb0": 1, - "a60791ba6ca05ea3": 1, "a644bdfbe6ec0044": 1, "a6ed47cf441cb578": 1, "a6f52664bc5db802": 1, @@ -453,13 +413,13 @@ "a7842c59f67aee3e": 1, "a7ce419852c3f4bb": 1, "a888b3cdad3d452d": 1, - "a9346b5654c885e9": 1, "a97d033336de820c": 1, "aa6af3c307cb3b1b": 1, "aa8c5d1539d3f39d": 1, "aac0860cac7db3e7": 1, "ab7663e0d5d61f22": 1, "abde2f4fe3b18cbc": 1, + "ac7e74bc96f5e3e2": 1, "ad57d9f03fc15ff1": 1, "aeab9ff4f97a36dc": 1, "aed35329e94d587d": 1, @@ -474,20 +434,20 @@ "b26ec09aa9c7d788": 1, "b4f1d187378630d2": 1, "b516fc87f57ff552": 1, - "b550ded1432f76f0": 1, "b56ef55aaf8bf7ba": 1, "b5ceb714638fb885": 1, "b671cd12c012a4b4": 1, "b6bc29c1437990b3": 1, "b6c6cd8bcb747bad": 1, - "b6daa0dba760d28d": 1, "b743264b7bbe4cc8": 1, "b75d56bd3c856ce4": 1, "b7bc3b0fc7ddd824": 1, "b8a1c1219d14b2ef": 1, + "b8be2338cae1b8ef": 1, "b914a2a0e162a6cf": 1, "b94d40e5ff48eda4": 1, "b9a2eed0186fe069": 1, + "b9bfa4f18870b9ac": 1, "ba1b81c7dacd299e": 1, "ba50dc522914af62": 1, "ba8d50bcd5dc7b3d": 1, @@ -500,34 +460,35 @@ "bd643f472e0aade2": 1, "bda28c725d186ab6": 1, "be0798753bf869c4": 1, + "be135361a689e451": 1, "be5d978af35181b1": 1, + "bf543efb3bf179b7": 1, + "bf770211d6bd31c8": 1, "c045ab0efa440e92": 1, "c0489425c5faec0f": 1, "c088cecf620e0f51": 1, "c0d167f4b47c21a7": 1, - "c11f44fc91e4017b": 1, + "c157d27a8b5765a1": 1, "c15cc20a8eb5b54e": 1, "c16ea8d19b585fb5": 1, "c194aa2d8a81a46b": 1, - "c1a2f7a561dac4db": 1, "c1aefaf779852373": 1, "c2a7b415518d2198": 1, "c377e5bc7e557f04": 1, - "c3d10f9320c71fb3": 1, - "c4e680d4321eb064": 1, "c59efd159d199356": 1, "c661cc78e1086df2": 1, "c6cce4bd6bf12d59": 1, + "c7337d0c6bea8644": 1, + "c91931715dd5082a": 1, + "c91fb1cb08b23e1c": 1, "c99b81e4ed3d76fb": 1, "c99b9aa8b9c89f27": 1, - "c9a68b22b15b2c4f": 1, "ca23d20b55a208df": 1, "ca52433f79ca9adf": 1, "cb72f4a5d460e4a8": 1, "ccc29e43c6a46325": 1, "cd14fbe400cc8d59": 1, "cd3551439395039c": 1, - "cda54e7da5f453e6": 1, "cdaf08c0a23a79fc": 1, "cdb94ac71ed58e49": 1, "ce8da66742f7122d": 1, @@ -535,24 +496,27 @@ "ceed549c863ce378": 1, "d13f1005c59d1243": 1, "d20c4d175159aa90": 1, - "d2b2d3f4d2d12da2": 1, + "d2c06a0c703438be": 1, "d342abdc73d730f0": 1, "d3b20c2767eef0a5": 1, "d4c8152dde214d7d": 1, "d5292d9905239a48": 1, + "d63808fd25912f20": 1, "d6a35efc223b35f0": 1, "d6ea4ed36005aa7c": 1, "d74223b54c1e2a1b": 1, + "d7469c3929718224": 1, "d7907d003a1d9fca": 1, + "d7951c97c2de818f": 1, "d829295842cacb52": 1, "d8472070574df3a0": 1, "d8ad9bee4beede6f": 1, "d9240b039fa378ae": 1, "d9554bbd56ab21a4": 1, "d98319a346958e32": 1, - "db4877ca7222c2ec": 1, "dbbafe3c109191e2": 1, "dbfef984a824b22e": 1, + "dd1bb0d0c2b16718": 1, "ddab192463f1ade4": 1, "de1435ae5e214376": 1, "de25b177ad221b80": 1, @@ -564,25 +528,25 @@ "e2ee78e03bfc94f9": 1, "e31e8d8bd1534204": 1, "e373307cca6d534f": 1, - "e3dddcb1f62c19b8": 1, "e445d35591b55a12": 1, "e4bc846ba130e160": 1, "e4c2843bfae3d310": 1, "e539609f53bb27d3": 1, "e59cfed574cd3816": 1, "e6460fb624a61900": 1, - "e73051f32d6330a4": 1, + "e7a6b9d06ebbf88b": 1, "e7e34567eac6357c": 1, "e824191acfff90d2": 1, "e82d1f2daab210ec": 1, "e841f14c1576be4d": 1, "e880470757e4f716": 1, "e9a4f95d6cc5b939": 1, + "eab34e08a59a2311": 1, "eaee9a41a0b130d0": 1, "eb0bbed02f67f613": 1, "ebec59933509b551": 1, "ebfeb862351f9538": 1, - "ec70223fd77aa9a2": 1, + "ec785bc2c1102cd0": 1, "ecefd42b73bc5e3c": 1, "ed10c82591b10abb": 1, "ed54a54bce71c168": 1, @@ -591,40 +555,42 @@ "ee052f70f2294a6c": 1, "ee1129d359884ce0": 1, "ee67ec3f21f2f9ce": 1, + "ee87169143e7aa75": 1, "ef106fb1d88f9f46": 1, - "ef2bdbe0fd231d31": 1, "ef308469d0166e41": 1, - "ef66f66d99229104": 1, "efef2b484435e6b7": 1, "f05e80092b0c0382": 1, "f102cbf1fab8a3d9": 1, + "f176cdac923927ee": 1, "f1812b941eb02542": 1, + "f1a3c57f33f8ce46": 1, "f1f7493a31b45480": 1, "f23a5dc8edef52e2": 1, "f279b2bb369cd7f1": 1, "f29076103ef900ac": 1, + "f30c07e6eec3d0d8": 1, "f366e666acd97894": 1, "f37319ef3f0e2c88": 1, "f3bfe6c708e83755": 1, "f3caece08093c884": 1, "f3d16a0490547ad5": 1, "f3dce7104ce46e6e": 1, + "f471bd1f58c00225": 1, "f47aa4755d742c49": 1, "f495e9854c7890f3": 1, + "f4b1049c2de5b4b5": 1, "f520e28c48e38582": 1, "f55fe2c61cba9980": 1, "f56fbb7ea258b2f9": 1, "f5ec696c51e41367": 1, "f668e8d378c310b8": 1, - "f71d2a3fb6a86a0c": 1, "f742e38e8b79f879": 1, "f79fd5643e4c8d70": 1, "f86d15fdd5782fbd": 1, "f92cfe72d5df13f4": 1, "f97e3c6571c051bf": 1, "f981c9a75c497712": 1, - "fa60d0adeedc899a": 1, - "fbac979cdba09e94": 1, + "fa95e7b4ee1bc5ae": 1, "fc541ae4aa953e03": 1, "fd0c45c2afe9457e": 1, "fd0d3c8ea8788bd8": 1,