diff --git a/Dockerfile b/Dockerfile
index fbcc36e..937dd43 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
ARG CONFIGURATION="Release"
ARG NUGET_PACKAGE_VERSION="1.0.0"
ARG COMPANIES_HOUSE_API_KEY
-FROM mcr.microsoft.com/dotnet/sdk:7.0 AS restore
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS restore
ARG CONFIGURATION
@@ -21,7 +21,7 @@ COPY ./tests/CompaniesHouse.Tests/*.csproj ./tests/CompaniesHouse.Tests/
COPY ./samples/SampleProject/*.csproj ./samples/SampleProject/
RUN dotnet restore
-FROM restore as build
+FROM restore AS build
ARG CONFIGURATION
ARG NUGET_PACKAGE_VERSION
@@ -30,11 +30,11 @@ COPY ./tests/ ./tests/
COPY ./samples/ ./samples/
RUN dotnet build --configuration $CONFIGURATION --no-restore
-FROM build as test
+FROM build AS test
ARG COMPANIES_HOUSE_API_KEY
RUN dotnet test --logger trx --configuration $CONFIGURATION --no-build
-FROM build as pack
+FROM build AS pack
RUN mkdir -p artifacts
RUN dotnet pack --configuration Release -p:Version=${NUGET_PACKAGE_VERSION} --no-build --output ./artifacts
@@ -44,4 +44,4 @@ COPY --from=pack /artifacts/*.snupkg /artifacts/
COPY --from=test /tests/CompaniesHouse.Extensions.Microsoft.DependencyInjection.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Extensions.Microsoft.DependencyInjection.Tests/
COPY --from=test /tests/CompaniesHouse.IntegrationTests/TestResults/*.trx /TestResults/CompaniesHouse.IntegrationTests/
COPY --from=test /tests/CompaniesHouse.ScenarioTests/TestResults/*.trx /TestResults/CompaniesHouse.ScenarioTests/
-COPY --from=test /tests/CompaniesHouse.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Tests/
\ No newline at end of file
+COPY --from=test /tests/CompaniesHouse.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Tests/
diff --git a/src/CompaniesHouse.Extensions.Microsoft.DependencyInjection/CompaniesHouseClientServiceCollectionExtensions.cs b/src/CompaniesHouse.Extensions.Microsoft.DependencyInjection/CompaniesHouseClientServiceCollectionExtensions.cs
index f5d4472..f166c40 100644
--- a/src/CompaniesHouse.Extensions.Microsoft.DependencyInjection/CompaniesHouseClientServiceCollectionExtensions.cs
+++ b/src/CompaniesHouse.Extensions.Microsoft.DependencyInjection/CompaniesHouseClientServiceCollectionExtensions.cs
@@ -19,12 +19,9 @@ public static class CompaniesHouseClientServiceCollectionExtensions
/// Service collection
public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection services, string apiKey)
{
- return services.AddCompaniesHouseClient(opt =>
- {
- opt.ApiKey = apiKey;
- });
+ return services.AddCompaniesHouseClient(opt => { opt.ApiKey = apiKey; });
}
-
+
///
/// Registers the companies house client
///
@@ -69,7 +66,7 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
configure.Invoke(provider, options);
return options;
});
-
+
services.TryAddTransient(provider =>
{
var options = provider.GetRequiredService();
@@ -89,6 +86,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
services.TryAddTransient(provider =>
provider.GetService());
+ services.TryAddTransient(provider =>
+ provider.GetService());
services.TryAddTransient(provider =>
provider.GetService());
services.TryAddTransient(provider =>
@@ -103,8 +102,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
provider.GetService());
services.TryAddTransient(provider =>
provider.GetService());
- services.TryAddTransient(
- provider => provider.GetService());
+ services.TryAddTransient(provider =>
+ provider.GetService());
services.TryAddTransient(provider =>
provider.GetService());
services.TryAddTransient(provider =>
diff --git a/src/CompaniesHouse/CompaniesHouseClient.cs b/src/CompaniesHouse/CompaniesHouseClient.cs
index ecee2ca..3bf9692 100644
--- a/src/CompaniesHouse/CompaniesHouseClient.cs
+++ b/src/CompaniesHouse/CompaniesHouseClient.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Net.Http;
-using System.Threading;
-using System.Threading.Tasks;
+using System.Net.Http;
using CompaniesHouse.Request;
using CompaniesHouse.Response.Appointments;
using CompaniesHouse.Response.Charges;
@@ -58,6 +55,11 @@ public CompaniesHouseClient(ICompaniesHouseSettings settings)
{
return _companiesHouseSearchClient.SearchAsync(request, cancellationToken);
}
+
+ public Task> SearchCompanyAdvancedAsync(AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ return _companiesHouseSearchClient.SearchAsync(request, cancellationToken);
+ }
public Task> SearchOfficerAsync(SearchOfficerRequest request, CancellationToken cancellationToken = default(CancellationToken))
{
diff --git a/src/CompaniesHouse/HttpContentExtensions.cs b/src/CompaniesHouse/HttpContentExtensions.cs
index 2a3a62a..d32e58e 100644
--- a/src/CompaniesHouse/HttpContentExtensions.cs
+++ b/src/CompaniesHouse/HttpContentExtensions.cs
@@ -2,20 +2,25 @@
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
namespace CompaniesHouse
{
public static class HttpContentExtensions
{
+ public static readonly JsonSerializer Serializer = new()
+ {
+ Converters = { new StringEnumConverter() }
+ };
+
public static async Task ReadAsJsonAsync(this HttpContent content)
{
using var s = await content.ReadAsStreamAsync()
.ConfigureAwait(false);
using var sr = new StreamReader(s);
using var reader = new JsonTextReader(sr);
- var serializer = new JsonSerializer();
- return serializer.Deserialize(reader);
+ return Serializer.Deserialize(reader);
}
}
}
\ No newline at end of file
diff --git a/src/CompaniesHouse/ICompaniesHouseClient.cs b/src/CompaniesHouse/ICompaniesHouseClient.cs
index 909d32d..e6d58e0 100644
--- a/src/CompaniesHouse/ICompaniesHouseClient.cs
+++ b/src/CompaniesHouse/ICompaniesHouseClient.cs
@@ -2,6 +2,7 @@
{
public interface ICompaniesHouseClient :
ICompaniesHouseSearchCompanyClient,
+ ICompaniesHouseSearchCompanyAdvancedClient,
ICompaniesHouseSearchOfficerClient,
ICompaniesHouseSearchDisqualifiedOfficerClient,
ICompaniesHouseSearchAllClient,
diff --git a/src/CompaniesHouse/ICompaniesHouseSearchCompanyAdvancedClient.cs b/src/CompaniesHouse/ICompaniesHouseSearchCompanyAdvancedClient.cs
new file mode 100644
index 0000000..a158675
--- /dev/null
+++ b/src/CompaniesHouse/ICompaniesHouseSearchCompanyAdvancedClient.cs
@@ -0,0 +1,10 @@
+using CompaniesHouse.Request;
+using CompaniesHouse.Response.Search.CompanySearch;
+
+namespace CompaniesHouse;
+
+public interface ICompaniesHouseSearchCompanyAdvancedClient
+{
+ Task> SearchCompanyAdvancedAsync(
+ AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken));
+}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/AdvancedSearchCompanyRequest.cs b/src/CompaniesHouse/Request/AdvancedSearchCompanyRequest.cs
new file mode 100644
index 0000000..61550a4
--- /dev/null
+++ b/src/CompaniesHouse/Request/AdvancedSearchCompanyRequest.cs
@@ -0,0 +1,20 @@
+#nullable enable
+using CompaniesHouse.Response;
+using CompaniesHouse.Response.Search.CompanySearch;
+
+namespace CompaniesHouse.Request;
+
+public class AdvancedSearchCompanyRequest : SearchRequest
+{
+ public string? CompanyNameIncludes { get; set; }
+ public string? CompanyNameExcludes { get; set; }
+ public IReadOnlyCollection CompanyStatus { get; set; } = [];
+ public IReadOnlyCollection CompanySubtype { get; set; } = [];
+ public IReadOnlyCollection CompanyType { get; set; } = [];
+ public DateTime? DissolvedFrom { get; set; }
+ public DateTime? DissolvedTo { get; set; }
+ public DateTime? IncorporatedFrom { get; set; }
+ public DateTime? IncorporatedTo { get; set; }
+ public string? Location { get; set; }
+ public IReadOnlyCollection SicCodes { get; set; } = [];
+}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/IQuerySearchRequest.cs b/src/CompaniesHouse/Request/IQuerySearchRequest.cs
new file mode 100644
index 0000000..a051a75
--- /dev/null
+++ b/src/CompaniesHouse/Request/IQuerySearchRequest.cs
@@ -0,0 +1,6 @@
+namespace CompaniesHouse.Request;
+
+public interface IQuerySearchRequest : ISearchRequest
+{
+ string Query { get; }
+}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/ISearchRequest.cs b/src/CompaniesHouse/Request/ISearchRequest.cs
index 056dba0..759ebb1 100644
--- a/src/CompaniesHouse/Request/ISearchRequest.cs
+++ b/src/CompaniesHouse/Request/ISearchRequest.cs
@@ -2,8 +2,6 @@
public interface ISearchRequest
{
- string Query { get; }
-
int? ItemsPerPage { get; }
int? StartIndex { get; }
diff --git a/src/CompaniesHouse/Request/SearchAllRequest.cs b/src/CompaniesHouse/Request/SearchAllRequest.cs
index 39f1f53..e1b0c67 100644
--- a/src/CompaniesHouse/Request/SearchAllRequest.cs
+++ b/src/CompaniesHouse/Request/SearchAllRequest.cs
@@ -2,6 +2,6 @@
namespace CompaniesHouse.Request;
-public class SearchAllRequest : SearchRequest
+public class SearchAllRequest : QuerySearchRequest
{
}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/SearchCompanyRequest.cs b/src/CompaniesHouse/Request/SearchCompanyRequest.cs
index de47963..8799847 100644
--- a/src/CompaniesHouse/Request/SearchCompanyRequest.cs
+++ b/src/CompaniesHouse/Request/SearchCompanyRequest.cs
@@ -1,8 +1,9 @@
-using CompaniesHouse.Response.Search.CompanySearch;
+#nullable enable
+using CompaniesHouse.Response.Search.CompanySearch;
namespace CompaniesHouse.Request;
-public class SearchCompanyRequest : SearchRequest
+public class SearchCompanyRequest : QuerySearchRequest
{
- public string Restrictions { get; set; }
+ public string? Restrictions { get; set; }
}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/SearchDisqualifiedOfficerRequest.cs b/src/CompaniesHouse/Request/SearchDisqualifiedOfficerRequest.cs
index f741918..3bf5b92 100644
--- a/src/CompaniesHouse/Request/SearchDisqualifiedOfficerRequest.cs
+++ b/src/CompaniesHouse/Request/SearchDisqualifiedOfficerRequest.cs
@@ -2,6 +2,6 @@
namespace CompaniesHouse.Request;
-public class SearchDisqualifiedOfficerRequest : SearchRequest
+public class SearchDisqualifiedOfficerRequest : QuerySearchRequest
{
}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/SearchOfficerRequest.cs b/src/CompaniesHouse/Request/SearchOfficerRequest.cs
index 4fff6d2..44bbb13 100644
--- a/src/CompaniesHouse/Request/SearchOfficerRequest.cs
+++ b/src/CompaniesHouse/Request/SearchOfficerRequest.cs
@@ -2,6 +2,6 @@
namespace CompaniesHouse.Request;
-public class SearchOfficerRequest : SearchRequest
+public class SearchOfficerRequest : QuerySearchRequest
{
}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Request/SearchRequest.cs b/src/CompaniesHouse/Request/SearchRequest.cs
index 716c65f..e39a81a 100644
--- a/src/CompaniesHouse/Request/SearchRequest.cs
+++ b/src/CompaniesHouse/Request/SearchRequest.cs
@@ -1,9 +1,12 @@
namespace CompaniesHouse.Request
{
- public abstract class SearchRequest : ISearchRequest
+ public abstract class QuerySearchRequest : SearchRequest, IQuerySearchRequest
{
public string Query { get; set; } = "";
+ }
+ public abstract class SearchRequest : ISearchRequest
+ {
public int? ItemsPerPage { get; set; }
public int? StartIndex { get; set; }
diff --git a/src/CompaniesHouse/Response/CompanySubType.cs b/src/CompaniesHouse/Response/CompanySubType.cs
new file mode 100644
index 0000000..dd2fcae
--- /dev/null
+++ b/src/CompaniesHouse/Response/CompanySubType.cs
@@ -0,0 +1,14 @@
+using System.Runtime.Serialization;
+
+namespace CompaniesHouse.Response;
+
+public enum CompanySubType
+{
+ [EnumMember(Value = "")] None = 0,
+
+ [EnumMember(Value = "community-interest-company")]
+ CommunityInterestCompany,
+
+ [EnumMember(Value = "private-fund-limited-partnership")]
+ PrivateFundLimitedPartnership,
+}
\ No newline at end of file
diff --git a/src/CompaniesHouse/Response/Search/CompanySearch/Company.cs b/src/CompaniesHouse/Response/Search/CompanySearch/Company.cs
index 661b873..e08bd10 100644
--- a/src/CompaniesHouse/Response/Search/CompanySearch/Company.cs
+++ b/src/CompaniesHouse/Response/Search/CompanySearch/Company.cs
@@ -20,7 +20,11 @@ public class Company : SearchItem
[JsonProperty(PropertyName = "company_type")]
[JsonConverter(typeof(StringEnumConverter))]
public CompanyType CompanyType { get; set; }
-
+
+ [JsonProperty(PropertyName = "company_subtype")]
+ [JsonConverter(typeof(StringEnumConverter))]
+ public CompanySubType CompanySubType { get; set; }
+
[JsonProperty(PropertyName = "date_of_cessation")]
[JsonConverter(typeof(OptionalDateJsonConverter))]
public DateTime? DateOfCessation { get; set; }
diff --git a/src/CompaniesHouse/SearchUriBuilderFactory.cs b/src/CompaniesHouse/SearchUriBuilderFactory.cs
index 7a5a46c..32d3e7c 100644
--- a/src/CompaniesHouse/SearchUriBuilderFactory.cs
+++ b/src/CompaniesHouse/SearchUriBuilderFactory.cs
@@ -13,15 +13,26 @@ public ISearchUriBuilder Create() where TSearch : Sea
{
return (ISearchUriBuilder)new SearchCompanyUriBuilder("search/companies");
}
- else if (type == typeof(SearchOfficerRequest))
+
+ if (type == typeof(SearchOfficerRequest))
+ {
+ return (ISearchUriBuilder)new QuerySearchUriBuilder("search/officers");
+ }
+
+ if (type == typeof(SearchDisqualifiedOfficerRequest))
{
- return new SearchUriBuilder("search/officers");
- }else if (type == typeof(SearchDisqualifiedOfficerRequest))
+ return (ISearchUriBuilder)new QuerySearchUriBuilder(
+ "search/disqualified-officers");
+ }
+
+ if (type == typeof(SearchAllRequest))
{
- return new SearchUriBuilder("search/disqualified-officers");
- } else if (type == typeof(SearchAllRequest))
+ return (ISearchUriBuilder)new QuerySearchUriBuilder("search");
+ }
+
+ if (type == typeof(AdvancedSearchCompanyRequest))
{
- return new SearchUriBuilder("search");
+ return (ISearchUriBuilder)new AdvancedSearchCompanyUriBuilder("advanced-search/companies");
}
throw new InvalidOperationException();
diff --git a/src/CompaniesHouse/UriBuilders/AdvancedSearchCompanyUriBuilder.cs b/src/CompaniesHouse/UriBuilders/AdvancedSearchCompanyUriBuilder.cs
new file mode 100644
index 0000000..cec6712
--- /dev/null
+++ b/src/CompaniesHouse/UriBuilders/AdvancedSearchCompanyUriBuilder.cs
@@ -0,0 +1,30 @@
+using System.Text;
+using CompaniesHouse.Request;
+
+namespace CompaniesHouse.UriBuilders;
+
+public class AdvancedSearchCompanyUriBuilder : SearchUriBuilder
+{
+ public AdvancedSearchCompanyUriBuilder(string path) : base(path)
+ {
+ }
+
+ protected override string BuildQuery(AdvancedSearchCompanyRequest request)
+ {
+ var queryBuilder = new StringBuilder(base.BuildQuery(request));
+
+ AppendParameterIfValid(queryBuilder, "company_name_includes", request.CompanyNameIncludes, value => !string.IsNullOrWhiteSpace(value));
+ AppendParameterIfValid(queryBuilder, "company_name_excludes", request.CompanyNameExcludes, value => !string.IsNullOrWhiteSpace(value));
+ AppendParameterIfValid(queryBuilder, "company_status", request.CompanyStatus);
+ AppendParameterIfValid(queryBuilder, "company_subtype", request.CompanySubtype);
+ AppendParameterIfValid(queryBuilder, "company_type", request.CompanyType);
+ AppendParameterIfValid(queryBuilder, "dissolved_from", request.DissolvedFrom, value => value.HasValue);
+ AppendParameterIfValid(queryBuilder, "dissolved_to", request.DissolvedTo, value =>value.HasValue);
+ AppendParameterIfValid(queryBuilder, "incorporated_from", request.IncorporatedFrom, value =>value.HasValue);
+ AppendParameterIfValid(queryBuilder, "incorporated_to", request.IncorporatedTo, value => value.HasValue);
+ AppendParameterIfValid(queryBuilder, "location", request.Location, value => !string.IsNullOrWhiteSpace(value));
+ AppendParameterIfValid(queryBuilder, "sic_codes", request.SicCodes);
+
+ return queryBuilder.ToString();
+ }
+}
\ No newline at end of file
diff --git a/src/CompaniesHouse/UriBuilders/SearchCompanyUriBuilder.cs b/src/CompaniesHouse/UriBuilders/SearchCompanyUriBuilder.cs
index a647b48..73e8f95 100644
--- a/src/CompaniesHouse/UriBuilders/SearchCompanyUriBuilder.cs
+++ b/src/CompaniesHouse/UriBuilders/SearchCompanyUriBuilder.cs
@@ -3,7 +3,7 @@
namespace CompaniesHouse.UriBuilders;
-public class SearchCompanyUriBuilder : SearchUriBuilder
+public class SearchCompanyUriBuilder : QuerySearchUriBuilder
{
public SearchCompanyUriBuilder(string path) : base(path)
{
diff --git a/src/CompaniesHouse/UriBuilders/SearchUriBuilder.cs b/src/CompaniesHouse/UriBuilders/SearchUriBuilder.cs
index 689500e..6776827 100644
--- a/src/CompaniesHouse/UriBuilders/SearchUriBuilder.cs
+++ b/src/CompaniesHouse/UriBuilders/SearchUriBuilder.cs
@@ -1,8 +1,26 @@
using System.Text;
using CompaniesHouse.Request;
+using Newtonsoft.Json;
namespace CompaniesHouse.UriBuilders
{
+ public class QuerySearchUriBuilder : SearchUriBuilder
+ where TSearch : IQuerySearchRequest
+ {
+ public QuerySearchUriBuilder(string path) : base(path)
+ {
+ }
+
+ protected override string BuildQuery(TSearch request)
+ {
+ var queryBuilder = new StringBuilder(base.BuildQuery(request));
+
+ AppendParameterIfValid(queryBuilder, "q", request.Query, value => !string.IsNullOrWhiteSpace(value));
+
+ return queryBuilder.ToString();
+ }
+ }
+
public class SearchUriBuilder : ISearchUriBuilder where TSearch : ISearchRequest
{
private readonly string _path;
@@ -23,7 +41,7 @@ public Uri Build(TSearch request)
protected virtual string BuildQuery(TSearch request)
{
- var queryBuilder = new StringBuilder($"?q={Uri.EscapeDataString(request.Query)}");
+ var queryBuilder = new StringBuilder("?");
AppendParameterIfValid(queryBuilder, "items_per_page", request.ItemsPerPage, value => value.HasValue);
AppendParameterIfValid(queryBuilder, "start_index", request.StartIndex, value => value.HasValue);
@@ -31,17 +49,44 @@ protected virtual string BuildQuery(TSearch request)
return queryBuilder.ToString();
}
- protected void AppendParameterIfValid(StringBuilder builder, string parameterName, T parameterValue, Func isValid)
+ protected void AppendParameterIfValid(
+ StringBuilder builder,
+ string parameterName,
+ IReadOnlyCollection parameterValues)
+ {
+ foreach (var parameterValue in parameterValues)
+ {
+ AppendParameterIfValid(builder, parameterName, parameterValue, _ => true);
+ }
+ }
+
+ protected void AppendParameterIfValid(StringBuilder builder, string parameterName, T parameterValue,
+ Func isValid)
{
if (!isValid(parameterValue)) return;
var value = parameterValue switch
{
string s => Uri.EscapeDataString(s),
+ Enum @enum => GetEnumValue(@enum),
+ DateTime dateTime => dateTime.ToString("O"),
_ => parameterValue.ToString()
};
+ if (builder[builder.Length - 1] != '?')
+ {
+ builder.Append("&");
+ }
+
+ builder.Append($"{parameterName}={value}");
+ }
- builder.Append($"&{parameterName}={value}");
+ private static string GetEnumValue(Enum @enum)
+ {
+ using var stringWriter = new StringWriter();
+ using var textWriter = new JsonTextWriter(stringWriter);
+ HttpContentExtensions.Serializer.Serialize(textWriter, @enum, @enum.GetType());
+ var s = stringWriter.ToString();
+ return s.Substring(1, s.Length - 2); // Remove quotes
}
}
}
\ No newline at end of file
diff --git a/tests/CompaniesHouse.IntegrationTests/Keys.cs b/tests/CompaniesHouse.IntegrationTests/Keys.cs
index f27e30f..497210a 100644
--- a/tests/CompaniesHouse.IntegrationTests/Keys.cs
+++ b/tests/CompaniesHouse.IntegrationTests/Keys.cs
@@ -4,6 +4,17 @@ namespace CompaniesHouse.IntegrationTests
{
public static class Keys
{
- public static string ApiKey { get; } = Environment.GetEnvironmentVariable("COMPANIES_HOUSE_API_KEY");
+ public static string ApiKey
+ {
+ get
+ {
+ var key = Environment.GetEnvironmentVariable("COMPANIES_HOUSE_API_KEY");
+ if (string.IsNullOrEmpty(key))
+ {
+ throw new InvalidOperationException("COMPANIES_HOUSE_API_KEY environment variable is not set.");
+ }
+ return key;
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/tests/CompaniesHouse.IntegrationTests/Tests/SearchingTests/CompanySearchAdvancedTests.cs b/tests/CompaniesHouse.IntegrationTests/Tests/SearchingTests/CompanySearchAdvancedTests.cs
new file mode 100644
index 0000000..c9a0f3a
--- /dev/null
+++ b/tests/CompaniesHouse.IntegrationTests/Tests/SearchingTests/CompanySearchAdvancedTests.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Threading.Tasks;
+using CompaniesHouse.Request;
+using CompaniesHouse.Response.Search.CompanySearch;
+using NUnit.Framework;
+
+namespace CompaniesHouse.IntegrationTests.Tests.SearchingTests
+{
+ [TestFixture("brighouse computers")]
+ [TestFixture("British Gas")]
+ [TestFixture("Bay Horse")]
+ public class CompanySearchAdvancedTests
+ {
+ private readonly string _query;
+ private CompaniesHouseClient _client;
+ private CompaniesHouseClientResponse _result;
+
+ public CompanySearchAdvancedTests(string query)
+ {
+ _query = query;
+ }
+
+ [OneTimeSetUp]
+ public void GivenACompaniesHouseClient()
+ {
+ var settings = new CompaniesHouseSettings(Keys.ApiKey);
+
+ _client = new CompaniesHouseClient(settings);
+ }
+
+ [SetUp]
+ public async Task WhenSearchingForACompany()
+ {
+ _result = await _client.SearchCompanyAdvancedAsync(
+ new AdvancedSearchCompanyRequest
+ {
+ CompanyNameIncludes = _query, StartIndex = 0, ItemsPerPage = 100
+ })
+ .ConfigureAwait(false);
+ }
+
+ [Test]
+ public void ThenCompaniesAreReturned()
+ {
+ Assert.That(_result.Data.Companies, Is.Not.Empty);
+ }
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase+Thens.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase+Thens.cs
new file mode 100644
index 0000000..38216d8
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase+Thens.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ public abstract partial class AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ public class Thens
+ {
+ private readonly AdvancedSearchCompanyUriBuilderTestsBase _testBase;
+
+ public Thens(AdvancedSearchCompanyUriBuilderTestsBase testBase)
+ {
+ _testBase = testBase;
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheItemsPerPage()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("items_per_page"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheItemsPerPage()
+ {
+ var query = GetQuery();
+ Assert.That(query["items_per_page"].Single(), Is.EqualTo(_testBase.ItemsPerPage.ToString()));
+ }
+
+ public void TheUriQueryStringContainsTheStartIndex()
+ {
+ var query = GetQuery();
+ Assert.That(query["start_index"].Single(), Is.EqualTo(_testBase.StartIndex.ToString()));
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheStartIndex()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("start_index"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheCompanyNameIncludes()
+ {
+ var query = GetQuery();
+ Assert.That(query["company_name_includes"].Single(), Is.EqualTo(_testBase.CompanyNameIncludes));
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheCompanyNameIncludes()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_name_includes"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheCompanyNameExcludes()
+ {
+ var query = GetQuery();
+ Assert.That(query["company_name_excludes"].Single(), Is.EqualTo(_testBase.CompanyNameExcludes));
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheCompanyNameExcludes()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_name_excludes"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheCompanyStatus()
+ {
+ var query = GetQuery();
+ var expected = _testBase.CompanyStatus.Select(x => x.ToString().ToLowerInvariant()).ToArray();
+ Assert.That(query["company_status"], Is.EquivalentTo(expected));
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheCompanyStatus()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_status"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheCompanySubtype()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_subtype"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheCompanySubtype()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_subtype"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheCompanyType()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_type"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheCompanyType()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("company_type"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheDissolvedFrom()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("dissolved_from"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheDissolvedFrom()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("dissolved_from"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheDissolvedTo()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("dissolved_to"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheDissolvedTo()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("dissolved_to"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheIncorporatedFrom()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("incorporated_from"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheIncorporatedFrom()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("incorporated_from"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheIncorporatedTo()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("incorporated_to"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheIncorporatedTo()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("incorporated_to"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheLocation()
+ {
+ var query = GetQuery();
+ Assert.That(query["location"].Single(), Is.EqualTo(_testBase.Location));
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheLocation()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("location"), Is.False);
+ }
+
+ public void TheUriQueryStringContainsTheSicCodes()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("sic_codes"), Is.True);
+ }
+
+ public void TheUriQueryStringDoesNotContainsTheSicCodes()
+ {
+ var query = GetQuery();
+ Assert.That(query.Contains("sic_codes"), Is.False);
+ }
+
+ protected ILookup GetQuery()
+ {
+ return new Uri(_testBase._baseUri, _testBase._actualUri)
+ .ToString()
+ .Split('?')
+ .LastOrDefault("")
+ .Split('&', StringSplitOptions.RemoveEmptyEntries)
+ .ToLookup(GetKey, GetValue);
+
+ string GetKey(string keyValue) => keyValue.Split('=')[0];
+ string GetValue(string keyValue) => Uri.UnescapeDataString(keyValue.Split('=')[1]);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase.cs
new file mode 100644
index 0000000..5c6b552
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsBase.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using CompaniesHouse.Request;
+using CompaniesHouse.Response;
+using CompaniesHouse.UriBuilders;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ public abstract partial class AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ private AdvancedSearchCompanyUriBuilder _uriBuilder;
+ private Uri _actualUri;
+ private readonly Uri _baseUri = new Uri("http://testing123.co.uk/bla1/bla2/");
+
+ protected virtual int? ItemsPerPage { get; } = null;
+ protected virtual int? StartIndex { get; } = null;
+ protected virtual string CompanyNameIncludes { get; } = null;
+ protected virtual string CompanyNameExcludes { get; } = null;
+ protected virtual IReadOnlyCollection CompanyStatus { get; } = Array.Empty();
+ protected virtual IReadOnlyCollection CompanySubtype { get; } = Array.Empty();
+ protected virtual IReadOnlyCollection CompanyType { get; } = Array.Empty();
+ protected virtual DateTime? DissolvedFrom { get; } = null;
+ protected virtual DateTime? DissolvedTo { get; } = null;
+ protected virtual DateTime? IncorporatedFrom { get; } = null;
+ protected virtual DateTime? IncorporatedTo { get; } = null;
+ protected virtual string Location { get; } = null;
+ protected virtual IReadOnlyCollection SicCodes { get; } = Array.Empty();
+
+ private string _path;
+
+ [OneTimeSetUp]
+ public void GivenAnAdvancedSearchCompanyUriBuilder()
+ {
+ _path = "wat/wat/1";
+ _uriBuilder = new AdvancedSearchCompanyUriBuilder(_path);
+ }
+
+ [SetUp]
+ public void WhenBuildingUriWithAdvancedSearchCompanyRequest()
+ {
+ var request = new AdvancedSearchCompanyRequest
+ {
+ ItemsPerPage = ItemsPerPage,
+ StartIndex = StartIndex,
+ CompanyNameIncludes = CompanyNameIncludes,
+ CompanyNameExcludes = CompanyNameExcludes,
+ CompanyStatus = CompanyStatus,
+ CompanySubtype = CompanySubtype,
+ CompanyType = CompanyType,
+ DissolvedFrom = DissolvedFrom,
+ DissolvedTo = DissolvedTo,
+ IncorporatedFrom = IncorporatedFrom,
+ IncorporatedTo = IncorporatedTo,
+ Location = Location,
+ SicCodes = SicCodes
+ };
+
+ _actualUri = _uriBuilder.Build(request);
+ }
+
+ [Test]
+ public void ThenTheUriIsNotAbsolute()
+ {
+ Assert.That(_actualUri.IsAbsoluteUri, Is.False);
+ }
+
+ [Test]
+ public void ThenTheUriPathIsCorrect()
+ {
+ var uri = new Uri(_baseUri, _actualUri);
+ Assert.That(uri.AbsolutePath, Is.EqualTo($"/bla1/bla2/{_path}"));
+ }
+
+ public Thens Then => new Thens(this);
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameExcludes.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameExcludes.cs
new file mode 100644
index 0000000..9c89cb5
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameExcludes.cs
@@ -0,0 +1,18 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForCompanyNameExcludes : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override string CompanyNameExcludes { get; } = Guid.NewGuid().ToString();
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyNameIncludes() => Then.TheUriQueryStringDoesNotContainsTheCompanyNameIncludes();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheCompanyNameExcludes() => Then.TheUriQueryStringContainsTheCompanyNameExcludes();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameIncludes.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameIncludes.cs
new file mode 100644
index 0000000..b636101
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyNameIncludes.cs
@@ -0,0 +1,18 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForCompanyNameIncludes : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override string CompanyNameIncludes { get; } = Guid.NewGuid().ToString();
+
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheCompanyNameIncludes() => Then.TheUriQueryStringContainsTheCompanyNameIncludes();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyNameExcludes() => Then.TheUriQueryStringDoesNotContainsTheCompanyNameExcludes();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyStatus.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyStatus.cs
new file mode 100644
index 0000000..4006c38
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyStatus.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using CompaniesHouse.Response;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForCompanyStatus : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override IReadOnlyCollection CompanyStatus { get; } = new[] { Response.CompanyStatus.Active, Response.CompanyStatus.Dissolved };
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheCompanyStatus() => Then.TheUriQueryStringContainsTheCompanyStatus();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanySubtype() => Then.TheUriQueryStringDoesNotContainsTheCompanySubtype();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyType() => Then.TheUriQueryStringDoesNotContainsTheCompanyType();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanySubtype.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanySubtype.cs
new file mode 100644
index 0000000..59fcd44
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanySubtype.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+using CompaniesHouse.Response;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForCompanySubtype : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override IReadOnlyCollection CompanySubtype { get; } = new[] { Response.CompanySubType.CommunityInterestCompany };
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyStatus() => Then.TheUriQueryStringDoesNotContainsTheCompanyStatus();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheCompanySubtype() => Then.TheUriQueryStringContainsTheCompanySubtype();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyType() => Then.TheUriQueryStringDoesNotContainsTheCompanyType();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyType.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyType.cs
new file mode 100644
index 0000000..0a24e55
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForCompanyType.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+using CompaniesHouse.Response;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForCompanyType : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override IReadOnlyCollection CompanyType { get; } = new[] { Response.CompanyType.Ltd };
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyStatus() => Then.TheUriQueryStringDoesNotContainsTheCompanyStatus();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanySubtype() => Then.TheUriQueryStringDoesNotContainsTheCompanySubtype();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheCompanyType() => Then.TheUriQueryStringContainsTheCompanyType();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedFrom.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedFrom.cs
new file mode 100644
index 0000000..b5d098f
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedFrom.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForDissolvedFrom : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override DateTime? DissolvedFrom { get; } = new DateTime(2020, 1, 1);
+
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheDissolvedFrom() => Then.TheUriQueryStringContainsTheDissolvedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedTo() => Then.TheUriQueryStringDoesNotContainsTheDissolvedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedFrom() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedTo() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedTo();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedTo.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedTo.cs
new file mode 100644
index 0000000..536144d
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForDissolvedTo.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForDissolvedTo : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override DateTime? DissolvedTo { get; } = new DateTime(2023, 12, 31);
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedFrom() => Then.TheUriQueryStringDoesNotContainsTheDissolvedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheDissolvedTo() => Then.TheUriQueryStringContainsTheDissolvedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedFrom() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedTo() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedTo();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedFrom.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedFrom.cs
new file mode 100644
index 0000000..030e724
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedFrom.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForIncorporatedFrom : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override DateTime? IncorporatedFrom { get; } = new DateTime(2015, 1, 1);
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedFrom() => Then.TheUriQueryStringDoesNotContainsTheDissolvedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedTo() => Then.TheUriQueryStringDoesNotContainsTheDissolvedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheIncorporatedFrom() => Then.TheUriQueryStringContainsTheIncorporatedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedTo() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedTo();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedTo.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedTo.cs
new file mode 100644
index 0000000..9d98544
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForIncorporatedTo.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForIncorporatedTo : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override DateTime? IncorporatedTo { get; } = new DateTime(2022, 12, 31);
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedFrom() => Then.TheUriQueryStringDoesNotContainsTheDissolvedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedTo() => Then.TheUriQueryStringDoesNotContainsTheDissolvedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedFrom() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheIncorporatedTo() => Then.TheUriQueryStringContainsTheIncorporatedTo();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForItemsPerPage.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForItemsPerPage.cs
new file mode 100644
index 0000000..dc4386d
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForItemsPerPage.cs
@@ -0,0 +1,18 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForItemsPerPage : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override int? ItemsPerPage { get; } = new Random().Next();
+
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheItemsPerPage() => Then.TheUriQueryStringContainsTheItemsPerPage();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheStartIndex() => Then.TheUriQueryStringDoesNotContainsTheStartIndex();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForLocation.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForLocation.cs
new file mode 100644
index 0000000..5931ee6
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForLocation.cs
@@ -0,0 +1,18 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForLocation : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override string Location { get; } = "London";
+
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheLocation() => Then.TheUriQueryStringContainsTheLocation();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheSicCodes() => Then.TheUriQueryStringDoesNotContainsTheSicCodes();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForQuery.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForQuery.cs
new file mode 100644
index 0000000..472af8f
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForQuery.cs
@@ -0,0 +1,48 @@
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForQuery : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheItemsPerPage() => Then.TheUriQueryStringDoesNotContainsTheItemsPerPage();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheStartIndex() => Then.TheUriQueryStringDoesNotContainsTheStartIndex();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyNameIncludes() => Then.TheUriQueryStringDoesNotContainsTheCompanyNameIncludes();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyNameExcludes() => Then.TheUriQueryStringDoesNotContainsTheCompanyNameExcludes();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyStatus() => Then.TheUriQueryStringDoesNotContainsTheCompanyStatus();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanySubtype() => Then.TheUriQueryStringDoesNotContainsTheCompanySubtype();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheCompanyType() => Then.TheUriQueryStringDoesNotContainsTheCompanyType();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedFrom() => Then.TheUriQueryStringDoesNotContainsTheDissolvedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheDissolvedTo() => Then.TheUriQueryStringDoesNotContainsTheDissolvedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedFrom() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedFrom();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheIncorporatedTo() => Then.TheUriQueryStringDoesNotContainsTheIncorporatedTo();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheLocation() => Then.TheUriQueryStringDoesNotContainsTheLocation();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheSicCodes() => Then.TheUriQueryStringDoesNotContainsTheSicCodes();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForSicCodes.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForSicCodes.cs
new file mode 100644
index 0000000..ec26db2
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForSicCodes.cs
@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForSicCodes : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override IReadOnlyCollection SicCodes { get; } = new[] { "62012", "62020", "70221" };
+
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheLocation() => Then.TheUriQueryStringDoesNotContainsTheLocation();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheSicCodes() => Then.TheUriQueryStringContainsTheSicCodes();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForStartIndex.cs b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForStartIndex.cs
new file mode 100644
index 0000000..72878e0
--- /dev/null
+++ b/tests/CompaniesHouse.Tests/UriBuilders/AdvancedSearchCompanyUriBuilderTests/AdvancedSearchCompanyUriBuilderTestsForStartIndex.cs
@@ -0,0 +1,17 @@
+using System;
+using NUnit.Framework;
+
+namespace CompaniesHouse.Tests.UriBuilders.AdvancedSearchCompanyUriBuilderTests
+{
+ [TestFixture]
+ public class AdvancedSearchCompanyUriBuilderTestsForStartIndex : AdvancedSearchCompanyUriBuilderTestsBase
+ {
+ protected override int? StartIndex { get; } = new Random().Next();
+
+ [Test]
+ public void ThenTheUriQueryStringDoesNotContainsTheItemsPerPage() => Then.TheUriQueryStringDoesNotContainsTheItemsPerPage();
+
+ [Test]
+ public void ThenTheUriQueryStringContainsTheStartIndex() => Then.TheUriQueryStringContainsTheStartIndex();
+ }
+}
diff --git a/tests/CompaniesHouse.Tests/UriBuilders/SearchUriBuilderTests/SearchUriBuilderTestsBase.cs b/tests/CompaniesHouse.Tests/UriBuilders/SearchUriBuilderTests/SearchUriBuilderTestsBase.cs
index dbc4a32..02f715a 100644
--- a/tests/CompaniesHouse.Tests/UriBuilders/SearchUriBuilderTests/SearchUriBuilderTestsBase.cs
+++ b/tests/CompaniesHouse.Tests/UriBuilders/SearchUriBuilderTests/SearchUriBuilderTestsBase.cs
@@ -7,7 +7,7 @@ namespace CompaniesHouse.Tests.UriBuilders.SearchUriBuilderTests
{
public abstract partial class SearchUriBuilderTestsBase
{
- private SearchUriBuilder _uriBuilder;
+ private QuerySearchUriBuilder _uriBuilder;
private Uri _actualUri;
private readonly Uri _baseUri = new Uri("http://testing123.co.uk/bla1/bla2/");
@@ -24,7 +24,7 @@ public abstract partial class SearchUriBuilderTestsBase
public void GivenACompanySearchUriBuilder()
{
_path = "wat/wat/1";
- _uriBuilder = new SearchUriBuilder(_path);
+ _uriBuilder = new QuerySearchUriBuilder(_path);
}
[SetUp]