From 9727e9c3c824eefee4e8e0fd0cfd790f25a4f6ca Mon Sep 17 00:00:00 2001 From: Ewuji John Date: Thu, 10 Sep 2026 21:51:14 +0100 Subject: [PATCH] fix issues 226 --- .../JsonConverters/SearchItemConverter.cs | 2 +- .../Response/Search/UnknownSearchItem.cs | 13 +++++++++ ...rchResponseDeserializationScenarioTests.cs | 29 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/CompaniesHouse/Response/Search/UnknownSearchItem.cs diff --git a/src/CompaniesHouse/JsonConverters/SearchItemConverter.cs b/src/CompaniesHouse/JsonConverters/SearchItemConverter.cs index d8a49d2..e137841 100644 --- a/src/CompaniesHouse/JsonConverters/SearchItemConverter.cs +++ b/src/CompaniesHouse/JsonConverters/SearchItemConverter.cs @@ -28,7 +28,7 @@ public override SearchItem Read(ref Utf8JsonReader reader, Type typeToConvert, J "searchresults#company" => root.Deserialize(options)!, "searchresults#officer" => root.Deserialize(options)!, "searchresults#disqualified-officer" => root.Deserialize(options)!, - _ => throw new NotImplementedException($"Unknown search item kind \"{kind}\".") + _ => root.Deserialize(options)! }; return item; diff --git a/src/CompaniesHouse/Response/Search/UnknownSearchItem.cs b/src/CompaniesHouse/Response/Search/UnknownSearchItem.cs new file mode 100644 index 0000000..3acef50 --- /dev/null +++ b/src/CompaniesHouse/Response/Search/UnknownSearchItem.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace CompaniesHouse.Response.Search +{ + public class UnknownSearchItem : SearchItem + { + [JsonPropertyName("title")] + public string? Title { get; set; } + + [JsonPropertyName("description")] + public string? Description { get; set; } + } +} diff --git a/tests/CompaniesHouse.ScenarioTests/SearchResponseDeserializationScenarioTests.cs b/tests/CompaniesHouse.ScenarioTests/SearchResponseDeserializationScenarioTests.cs index db2db15..80bbba2 100644 --- a/tests/CompaniesHouse.ScenarioTests/SearchResponseDeserializationScenarioTests.cs +++ b/tests/CompaniesHouse.ScenarioTests/SearchResponseDeserializationScenarioTests.cs @@ -27,6 +27,17 @@ public void SearchAllPayload_DeserializesMixedCompanyAndOfficerItems() allItems[2].ShouldBeOfType(); } + [Fact] + public void SearchAllPayload_DeserializesUnknownKindAsGenericSearchItem() + { + var payload = JsonSerializer.Deserialize(UnknownKindSearchAllJson, CompaniesHouseJsonSerializerOptions.Default); + + payload.ShouldNotBeNull(); + var item = (payload.Items ?? [])[0]; + item.Kind.ShouldBe("searchresults#new-kind"); + item.ShouldBeOfType(); + } + [Fact] public void CompanySearchPayload_DeserializesAddressSnippetAndExternalRegistrationNumber() { @@ -163,6 +174,24 @@ public void DissolvedCompaniesPayload_DeserializesSearchTypeSpecificOptionalFiel } """; + private const string UnknownKindSearchAllJson = """ + { + "items": [ + { + "kind": "searchresults#new-kind", + "title": "NEW TYPE ITEM", + "description": "Fallback for an unknown search item kind", + "links": { "self": "/search/unknown" } + } + ], + "kind": "search#all", + "page_number": 1, + "items_per_page": 1, + "total_results": 1, + "start_index": 0 + } + """; + private const string CompanySearchJson = """ { "items": [