diff --git a/src/CloudFlare.NET/CloudFlareClient.cs b/src/CloudFlare.NET/CloudFlareClient.cs index ec5c22e..9708375 100644 --- a/src/CloudFlare.NET/CloudFlareClient.cs +++ b/src/CloudFlare.NET/CloudFlareClient.cs @@ -36,6 +36,15 @@ public Task> GetZonesAsync(CancellationToken cancellationTok return Client.GetZonesAsync(cancellationToken, auth); } + /// + public Task GetZoneAsync( + IdentifierTag zoneId, + CancellationToken cancellationToken, + CloudFlareAuth auth = null) + { + return Client.GetZoneAsync(zoneId, cancellationToken, auth); + } + /// public Task> GetDnsRecordsAsync( IdentifierTag zoneId, diff --git a/src/CloudFlare.NET/DnsRecordClientExtensions.cs b/src/CloudFlare.NET/DnsRecordClientExtensions.cs index 91b8f6a..f6004c9 100644 --- a/src/CloudFlare.NET/DnsRecordClientExtensions.cs +++ b/src/CloudFlare.NET/DnsRecordClientExtensions.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Text; using System.Threading; using System.Threading.Tasks; @@ -15,7 +14,7 @@ public static class DnsRecordClientExtensions /// /// Gets the zones for the subscription. /// - /// The zones for the subscription. + /// public static Task> GetDnsRecordsAsync( this IDnsRecordClient client, IdentifierTag zoneId, diff --git a/src/CloudFlare.NET/HttpClientDnsRecordExtensions.cs b/src/CloudFlare.NET/HttpClientDnsRecordExtensions.cs index 1f4e0e3..35fffe0 100644 --- a/src/CloudFlare.NET/HttpClientDnsRecordExtensions.cs +++ b/src/CloudFlare.NET/HttpClientDnsRecordExtensions.cs @@ -16,6 +16,7 @@ public static class HttpClientDnsRecordExtensions /// /// Gets the zones for the account specified by the details. /// + /// public static async Task> GetDnsRecordsAsync( this HttpClient client, IdentifierTag zoneId, diff --git a/src/CloudFlare.NET/HttpClientZoneExtensions.cs b/src/CloudFlare.NET/HttpClientZoneExtensions.cs index 129c197..fee7537 100644 --- a/src/CloudFlare.NET/HttpClientZoneExtensions.cs +++ b/src/CloudFlare.NET/HttpClientZoneExtensions.cs @@ -14,24 +14,52 @@ public static class HttpClientZoneExtensions { /// - /// Gets the base address of the CloudFlare API. + /// Gets the zones for the account specified by the details. /// - public static Uri ZonesUri { get; } = new Uri(CloudFlareConstants.BaseUri, "zones"); + /// + public static async Task> GetZonesAsync( + this HttpClient client, + CancellationToken cancellationToken, + CloudFlareAuth auth) + { + if (client == null) + throw new ArgumentNullException(nameof(client)); + if (auth == null) + throw new ArgumentNullException(nameof(auth)); + + Uri uri = new Uri(CloudFlareConstants.BaseUri, "zones"); + var request = new HttpRequestMessage(HttpMethod.Get, uri); + request.AddAuth(auth); + + HttpResponseMessage response = + await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken) + .ConfigureAwait(false); + + return (await response + .GetResultAsync>(cancellationToken) + .ConfigureAwait(false)) + .Result; + } /// /// Gets the zones for the account specified by the details. /// - public static async Task> GetZonesAsync( + /// + public static async Task GetZoneAsync( this HttpClient client, + IdentifierTag zoneId, CancellationToken cancellationToken, CloudFlareAuth auth) { if (client == null) throw new ArgumentNullException(nameof(client)); + if (zoneId == null) + throw new ArgumentNullException(nameof(zoneId)); if (auth == null) throw new ArgumentNullException(nameof(auth)); - var request = new HttpRequestMessage(HttpMethod.Get, ZonesUri); + Uri uri = new Uri(CloudFlareConstants.BaseUri, $"zones/{zoneId}"); + var request = new HttpRequestMessage(HttpMethod.Get, uri); request.AddAuth(auth); HttpResponseMessage response = @@ -39,7 +67,7 @@ await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancel .ConfigureAwait(false); return (await response - .GetResultAsync>(cancellationToken) + .GetResultAsync(cancellationToken) .ConfigureAwait(false)) .Result; } diff --git a/src/CloudFlare.NET/IZoneClient.cs b/src/CloudFlare.NET/IZoneClient.cs index 2d63b44..b037da2 100644 --- a/src/CloudFlare.NET/IZoneClient.cs +++ b/src/CloudFlare.NET/IZoneClient.cs @@ -15,7 +15,13 @@ public interface IZoneClient /// /// Gets the zones for the subscription. /// - /// The zones for the subscription. + /// Task> GetZonesAsync(CancellationToken cancellationToken, CloudFlareAuth auth = null); + + /// + /// Gets the zone with the specified . + /// + /// + Task GetZoneAsync(IdentifierTag zoneId, CancellationToken cancellationToken, CloudFlareAuth auth); } } diff --git a/src/CloudFlare.NET/ZoneClientExtensions.cs b/src/CloudFlare.NET/ZoneClientExtensions.cs index 8b55b48..1a5670e 100644 --- a/src/CloudFlare.NET/ZoneClientExtensions.cs +++ b/src/CloudFlare.NET/ZoneClientExtensions.cs @@ -14,7 +14,7 @@ public static class ZoneClientExtensions /// /// Gets the zones for the subscription. /// - /// The zones for the subscription. + /// public static Task> GetZonesAsync(this IZoneClient client, CloudFlareAuth auth = null) { if (client == null) @@ -22,5 +22,22 @@ public static Task> GetZonesAsync(this IZoneClient client, C return client.GetZonesAsync(CancellationToken.None, auth); } + + /// + /// Gets the zones for the subscription. + /// + /// + public static Task GetZoneAsync( + this IZoneClient client, + IdentifierTag zoneId, + CloudFlareAuth auth = null) + { + if (zoneId == null) + throw new ArgumentNullException(nameof(zoneId)); + if (client == null) + throw new ArgumentNullException(nameof(client)); + + return client.GetZoneAsync(zoneId, CancellationToken.None, auth); + } } } diff --git a/src/Tests/CloudFlare.NET.Tests/ZoneClientExtensionsSpec.cs b/src/Tests/CloudFlare.NET.Tests/ZoneClientExtensionsSpec.cs index 3c8e64e..ac0b82b 100644 --- a/src/Tests/CloudFlare.NET.Tests/ZoneClientExtensionsSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/ZoneClientExtensionsSpec.cs @@ -34,4 +34,29 @@ public class When_getting_zones : FixtureContext It should_return_the_zones = () => _actual.ShouldBeTheSameAs(_expected); } + + [Subject(typeof(ZoneClientExtensions))] + public class When_getting_a_zone : FixtureContext + { + static Mock _zoneClientMock; + static IdentifierTag _zoneId; + static CloudFlareAuth _auth; + static Zone _expected; + static Zone _actual; + + Establish context = () => + { + _zoneClientMock = _fixture.Create>(); + _auth = _fixture.Create(); + _expected = _fixture.Create(); + _zoneId = _expected.Id; + _zoneClientMock + .Setup(c => c.GetZoneAsync(_zoneId, CancellationToken.None, _auth)) + .ReturnsAsync(_expected); + }; + + Because of = () => _actual = _zoneClientMock.Object.GetZoneAsync(_zoneId, _auth).Await(); + + It should_return_the_zones = () => _actual.ShouldBeTheSameAs(_expected); + } }