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]