diff --git a/Extensions/Cloudflare.Zones/README.md b/Extensions/Cloudflare.Zones/README.md index 747a47c..9d40db1 100644 --- a/Extensions/Cloudflare.Zones/README.md +++ b/Extensions/Cloudflare.Zones/README.md @@ -20,6 +20,10 @@ This package contains the feature set of the _Domain/Zone Management_ section of - [List Zones](https://developers.cloudflare.com/api/resources/zones/methods/list/) +##### [Activation Check] + +- [Rerun The Activation Check](https://developers.cloudflare.com/api/resources/zones/subresources/activation_check/methods/trigger/) + @@ -35,3 +39,5 @@ Published under MIT License (see [choose a license]) [choose a license]: https://choosealicense.com/licenses/mit/ [Registrar]: https://developers.cloudflare.com/api/resources/registrar/ +[Zones]: https://developers.cloudflare.com/api/resources/zones/ +[Activation Check]: https://developers.cloudflare.com/api/resources/zones/subresources/activation_check/ diff --git a/Extensions/Cloudflare.Zones/ZonesExtensions.cs b/Extensions/Cloudflare.Zones/ZonesExtensions.cs index 2364afb..b61ca71 100644 --- a/Extensions/Cloudflare.Zones/ZonesExtensions.cs +++ b/Extensions/Cloudflare.Zones/ZonesExtensions.cs @@ -106,5 +106,21 @@ namespace AMWD.Net.Api.Cloudflare.Zones { return client.GetAsync>($"/zones", queryFilter: options, cancellationToken: cancellationToken); } + + /// + /// Triggeres a new activation check for a zone. + /// + /// + /// This can be triggered every 5 min for paygo/enterprise customers, every hour for FREE Zones. + /// + /// The instance. + /// The zone identifier. + /// A cancellation token used to propagate notification that this operation should be canceled. + public static Task> RerunActivationCheck(this ICloudflareClient client, string zoneId, CancellationToken cancellationToken = default) + { + zoneId.ValidateCloudflareId(); + + return client.PutAsync($"/zones/{zoneId}/activation_check", null, cancellationToken); + } } } diff --git a/UnitTests/Cloudflare.Zones.Tests/ZonesExtensions/RerunActivationCheckTest.cs b/UnitTests/Cloudflare.Zones.Tests/ZonesExtensions/RerunActivationCheckTest.cs new file mode 100644 index 0000000..488c163 --- /dev/null +++ b/UnitTests/Cloudflare.Zones.Tests/ZonesExtensions/RerunActivationCheckTest.cs @@ -0,0 +1,77 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AMWD.Net.Api.Cloudflare; +using AMWD.Net.Api.Cloudflare.Zones; +using Moq; + +namespace Cloudflare.Zones.Tests.ZonesExtensions +{ + [TestClass] + public class RerunActivationCheckTest + { + private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353"; + + private Mock _clientMock; + + private CloudflareResponse _response; + + private List<(string RequestPath, object Request)> _callbacks; + + [TestInitialize] + public void Initialize() + { + _callbacks = []; + + _response = new CloudflareResponse + { + Success = true, + Messages = [ + new ResponseInfo(1000, "Message 1") + ], + Errors = [ + new ResponseInfo(1000, "Error 1") + ], + Result = new Identifier + { + Id = ZoneId + } + }; + } + + [TestMethod] + public async Task ShouldRerunActivationCheck() + { + // Arrange + var client = GetClient(); + + // Act + var response = await client.RerunActivationCheck(ZoneId); + + // Assert + Assert.IsNotNull(response); + Assert.IsTrue(response.Success); + Assert.AreEqual(_response.Result, response.Result); + + Assert.AreEqual(1, _callbacks.Count); + + var callback = _callbacks.First(); + Assert.AreEqual($"/zones/{ZoneId}/activation_check", callback.RequestPath); + Assert.IsNull(callback.Request); + + _clientMock.Verify(m => m.PutAsync($"/zones/{ZoneId}/activation_check", null, It.IsAny()), Times.Once); + _clientMock.VerifyNoOtherCalls(); + } + + private ICloudflareClient GetClient() + { + _clientMock = new Mock(); + _clientMock + .Setup(m => m.PutAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((requestPath, request, _) => _callbacks.Add((requestPath, request))) + .ReturnsAsync(() => _response); + + return _clientMock.Object; + } + } +}