Changed folder structure, added explicit nullable for extensions.

This commit is contained in:
2024-10-31 13:07:39 +01:00
parent eadd35ac09
commit 935632df27
45 changed files with 1121 additions and 214 deletions

View File

@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare.Zones.Cache.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones;
using Moq;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Cache
{
@@ -21,7 +20,7 @@ namespace Cloudflare.Zones.Tests.Cache
private CloudflareResponse<ZoneIdResponse> _response;
private List<(string RequestPath, PurgeRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
private List<(string RequestPath, InternalPurgeCacheRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
@@ -90,7 +89,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -111,8 +110,8 @@ namespace Cloudflare.Zones.Tests.Cache
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<ZoneIdResponse, PurgeRequest>(It.IsAny<string>(), It.IsAny<PurgeRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, PurgeRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.Setup(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>(It.IsAny<string>(), It.IsAny<InternalPurgeCacheRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalPurgeCacheRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare.Zones.Cache.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones;
using Moq;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Cache
{
@@ -21,7 +20,7 @@ namespace Cloudflare.Zones.Tests.Cache
private CloudflareResponse<ZoneIdResponse> _response;
private List<(string RequestPath, PurgeRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
private List<(string RequestPath, InternalPurgeCacheRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
@@ -93,7 +92,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -114,8 +113,8 @@ namespace Cloudflare.Zones.Tests.Cache
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<ZoneIdResponse, PurgeRequest>(It.IsAny<string>(), It.IsAny<PurgeRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, PurgeRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.Setup(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>(It.IsAny<string>(), It.IsAny<InternalPurgeCacheRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalPurgeCacheRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare.Zones.Cache.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones;
using Moq;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Cache
{
@@ -21,7 +20,7 @@ namespace Cloudflare.Zones.Tests.Cache
private CloudflareResponse<ZoneIdResponse> _response;
private List<(string RequestPath, PurgeRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
private List<(string RequestPath, InternalPurgeCacheRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
@@ -91,7 +90,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -112,8 +111,8 @@ namespace Cloudflare.Zones.Tests.Cache
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<ZoneIdResponse, PurgeRequest>(It.IsAny<string>(), It.IsAny<PurgeRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, PurgeRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.Setup(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>(It.IsAny<string>(), It.IsAny<InternalPurgeCacheRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalPurgeCacheRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare.Zones.Cache.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones;
using Moq;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Cache
{
@@ -21,7 +20,7 @@ namespace Cloudflare.Zones.Tests.Cache
private CloudflareResponse<ZoneIdResponse> _response;
private List<(string RequestPath, PurgeRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
private List<(string RequestPath, InternalPurgeCacheRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
@@ -58,8 +57,8 @@ namespace Cloudflare.Zones.Tests.Cache
// Arrange
var list = new List<ZonePurgeCachedUrlRequest>
{
new ZonePurgeCachedUrlRequest { Url = "https://example.com/foo.txt" },
new ZonePurgeCachedUrlRequest { Url = "https://example.com/bar.baz" },
new("https://example.com/foo.txt"),
new("https://example.com/bar.baz"),
};
var client = GetClient();
@@ -90,7 +89,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -100,8 +99,8 @@ namespace Cloudflare.Zones.Tests.Cache
// Arrange
var list = new List<ZonePurgeCachedUrlRequest>
{
new ZonePurgeCachedUrlRequest { Url = "https://example.com/foo.txt", Headers = new Dictionary<string, string> { { "X-Test1", "Test" } } },
new ZonePurgeCachedUrlRequest { Url = "https://example.com/bar.baz", Headers = new Dictionary<string, string> { { "X-Test2", "Test" } } },
new("https://example.com/foo.txt") { Headers = new Dictionary<string, string> { { "X-Test1", "Test" } } },
new("https://example.com/bar.baz") { Headers = new Dictionary<string, string> { { "X-Test2", "Test" } } },
};
var client = GetClient();
@@ -134,7 +133,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -155,8 +154,8 @@ namespace Cloudflare.Zones.Tests.Cache
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<ZoneIdResponse, PurgeRequest>(It.IsAny<string>(), It.IsAny<PurgeRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, PurgeRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.Setup(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>(It.IsAny<string>(), It.IsAny<InternalPurgeCacheRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalPurgeCacheRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -5,7 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Cache.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Cache
@@ -20,7 +20,7 @@ namespace Cloudflare.Zones.Tests.Cache
private CloudflareResponse<ZoneIdResponse> _response;
private List<(string RequestPath, PurgeRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
private List<(string RequestPath, InternalPurgeCacheRequest Request, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
@@ -81,7 +81,7 @@ namespace Cloudflare.Zones.Tests.Cache
Assert.IsNull(callback.QueryFilter);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, PurgeRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<PurgeRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>($"zones/{ZoneId}/purge_cache", It.IsAny<InternalPurgeCacheRequest>(), null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -89,8 +89,8 @@ namespace Cloudflare.Zones.Tests.Cache
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<ZoneIdResponse, PurgeRequest>(It.IsAny<string>(), It.IsAny<PurgeRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, PurgeRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.Setup(m => m.PostAsync<ZoneIdResponse, InternalPurgeCacheRequest>(It.IsAny<string>(), It.IsAny<InternalPurgeCacheRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalPurgeCacheRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, queryFilter, _) => _callbacks.Add((requestPath, request, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
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.DnsSettings
{
[TestClass]
public class ShowDnsSettingsTest
{
private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353";
private Mock<ICloudflareClient> _clientMock;
private CloudflareResponse<ZoneDnsSetting> _response;
private List<(string RequestPath, IQueryParameterFilter QueryFilter)> _callbacks;
[TestInitialize]
public void Initialize()
{
_callbacks = [];
_response = new CloudflareResponse<ZoneDnsSetting>
{
Success = true,
Messages = [
new ResponseInfo
{
Code = 1000,
Message = "Message 1",
}
],
Errors = [
new ResponseInfo
{
Code = 1000,
Message = "Error 1",
}
],
Result = new ZoneDnsSetting
{
FlattenAllCnames = false,
FoundationDns = false,
MultiProvider = false,
Nameservers = new Nameserver
{
Type = NameserverType.CloudflareStandard,
},
NameserverTtl = 86400,
SecondaryOverrides = false,
SOA = new StartOfAuthority
(
expire: 604800,
minimumTtl: 1800,
primaryNameserver: "kristina.ns.cloudflare.com",
refresh: 10000,
retry: 2400,
zoneAdministrator: "admin.example.com",
ttl: 3600
),
Mode = ZoneMode.DnsOnly
}
};
}
[TestMethod]
public async Task ShouldGetDnsSetting()
{
// Arrange
var client = GetClient();
// Act
var response = await client.ShowZoneDnsSettings(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}/dns_settings", callback?.RequestPath);
Assert.IsNull(callback?.QueryFilter);
_clientMock?.Verify(m => m.GetAsync<ZoneDnsSetting>($"zones/{ZoneId}/dns_settings", null, It.IsAny<CancellationToken>()), Times.Once);
_clientMock?.VerifyNoOtherCalls();
}
private ICloudflareClient GetClient()
{
if (_response == null) throw new InvalidOperationException();
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.GetAsync<ZoneDnsSetting>(It.IsAny<string>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, IQueryParameterFilter, CancellationToken>((requestPath, queryFilter, _) => _callbacks?.Add((requestPath, queryFilter)))
.ReturnsAsync(() => _response);
return _clientMock.Object;
}
}
}

View File

@@ -0,0 +1,355 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.DnsSettings
{
[TestClass]
public class UpdateDnsSettingsTest
{
private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353";
private Mock<ICloudflareClient> _clientMock;
private CloudflareResponse<ZoneDnsSetting> _response;
private List<(string RequestPath, InternalUpdateDnsSettingsRequest Request)> _callbacks;
private UpdateDnsSettingsRequest _request;
[TestInitialize]
public void Initialize()
{
_callbacks = [];
_response = new CloudflareResponse<ZoneDnsSetting>
{
Success = true,
Messages = [
new ResponseInfo
{
Code = 1000,
Message = "Message 1",
}
],
Errors = [
new ResponseInfo
{
Code = 1000,
Message = "Error 1",
}
],
Result = new ZoneDnsSetting
{
FlattenAllCnames = false,
FoundationDns = false,
MultiProvider = false,
Nameservers = new Nameserver
{
Type = NameserverType.CloudflareStandard,
},
NameserverTtl = 86400,
SecondaryOverrides = false,
SOA = new StartOfAuthority
(
expire: 604800,
minimumTtl: 1800,
primaryNameserver: "kristina.ns.cloudflare.com",
refresh: 10000,
retry: 2400,
zoneAdministrator: "admin.example.com",
ttl: 3600
),
Mode = ZoneMode.DnsOnly
}
};
_request = new UpdateDnsSettingsRequest(ZoneId)
{
FlattenAllCnames = true,
FoundationDns = false,
MultiProvider = false,
Nameservers = new Nameserver
{
Type = NameserverType.CloudflareRandom
},
NameserverTtl = 86400,
SecondaryOverrides = false,
SOA = new StartOfAuthority
(
expire: 604800,
minimumTtl: 1800,
primaryNameserver: "ns1.example.org",
refresh: 28800,
retry: 3600,
ttl: 43200,
zoneAdministrator: "admin.example.org"
),
Mode = ZoneMode.Standard
};
}
[TestMethod]
public async Task ShouldUpdateDnsSettingsFull()
{
// Arrange
if (_request == null) throw new InvalidOperationException();
var client = GetClient();
// Act
var response = await client.UpdateZoneDnsSettings(_request);
// 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}/dns_settings", callback?.RequestPath);
Assert.IsNotNull(callback?.Request);
Assert.IsTrue(callback?.Request.FlattenAllCnames);
Assert.IsFalse(callback?.Request.FoundationDns);
Assert.IsFalse(callback?.Request.MultiProvider);
Assert.IsNotNull(callback?.Request.Nameservers);
Assert.AreEqual(NameserverType.CloudflareRandom, callback?.Request.Nameservers.Type);
Assert.AreEqual(86400, callback?.Request.NameserverTtl);
Assert.IsFalse(callback?.Request.SecondaryOverrides);
Assert.IsNotNull(callback?.Request.Soa);
Assert.AreEqual(604800, callback?.Request.Soa.Expire);
Assert.AreEqual(1800, callback?.Request.Soa.MinimumTtl);
Assert.AreEqual("ns1.example.org", callback?.Request.Soa.PrimaryNameserver);
Assert.AreEqual(28800, callback?.Request.Soa.Refresh);
Assert.AreEqual(3600, callback?.Request.Soa.Retry);
Assert.AreEqual(43200, callback?.Request.Soa.Ttl);
Assert.AreEqual("admin.example.org", callback?.Request.Soa.ZoneAdministrator);
Assert.AreEqual(ZoneMode.Standard, callback?.Request.Mode);
_clientMock?.Verify(m => m.PatchAsync<ZoneDnsSetting, InternalUpdateDnsSettingsRequest>($"zones/{ZoneId}/dns_settings", It.IsAny<InternalUpdateDnsSettingsRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock?.VerifyNoOtherCalls();
}
[TestMethod]
public async Task ShouldUpdateDnsSettingsNone()
{
// Arrange
var request = new UpdateDnsSettingsRequest(ZoneId);
var client = GetClient();
// Act
var response = await client.UpdateZoneDnsSettings(request);
// 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}/dns_settings", callback?.RequestPath);
Assert.IsNotNull(callback?.Request);
Assert.IsNull(callback?.Request.FlattenAllCnames);
Assert.IsNull(callback?.Request.FoundationDns);
Assert.IsNull(callback?.Request.MultiProvider);
Assert.IsNull(callback?.Request.Nameservers);
Assert.IsNull(callback?.Request.NameserverTtl);
Assert.IsNull(callback?.Request.SecondaryOverrides);
Assert.IsNull(callback?.Request.Soa);
Assert.IsNull(callback?.Request.Mode);
_clientMock?.Verify(m => m.PatchAsync<ZoneDnsSetting, InternalUpdateDnsSettingsRequest>($"zones/{ZoneId}/dns_settings", It.IsAny<InternalUpdateDnsSettingsRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock?.VerifyNoOtherCalls();
}
[TestMethod]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidMode()
{
// Arrange
if (_request == null) throw new InvalidOperationException();
_request.Mode = 0;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[TestMethod]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidNameserverType()
{
// Arrange
if (_request == null || _request.Nameservers == null) throw new InvalidOperationException();
_request.Nameservers.Type = 0;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(29)]
[DataRow(86401)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidNameserverTtl(int ttl)
{
// Arrange
if (_request == null) throw new InvalidOperationException();
_request.NameserverTtl = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(86399)]
[DataRow(2419201)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidSoaExpire(int ttl)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.Expire = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(59)]
[DataRow(86401)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidSoaMinimumTtl(int ttl)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.MinimumTtl = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(null)]
[DataRow("")]
[DataRow(" ")]
[ExpectedException(typeof(ArgumentNullException))]
public async Task ShouldThrowArgumentNullExceptionForMissingSoaNameserver(string nameserver)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.PrimaryNameserver = nameserver;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentNullException
}
[DataTestMethod]
[DataRow(599)]
[DataRow(86401)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidSoaRefresh(int ttl)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.Refresh = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(599)]
[DataRow(86401)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidSoaRetry(int ttl)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.Retry = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(299)]
[DataRow(86401)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public async Task ShouldThrowArgumentOutOfRangeExceptionForInvalidSoaTtl(int ttl)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.Ttl = ttl;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentOutOfRangeException
}
[DataTestMethod]
[DataRow(null)]
[DataRow("")]
[DataRow(" ")]
[ExpectedException(typeof(ArgumentNullException))]
public async Task ShouldThrowArgumentNullExceptionForMissingSoaAdministrator(string admin)
{
// Arrange
if (_request == null || _request.SOA == null) throw new InvalidOperationException();
_request.SOA.ZoneAdministrator = admin;
var client = GetClient();
// Act
await client.UpdateZoneDnsSettings(_request);
// Assert - ArgumentNullException
}
private ICloudflareClient GetClient()
{
if (_response == null) throw new InvalidOperationException();
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PatchAsync<ZoneDnsSetting, InternalUpdateDnsSettingsRequest>(It.IsAny<string>(), It.IsAny<InternalUpdateDnsSettingsRequest>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalUpdateDnsSettingsRequest, CancellationToken>((requestPath, request, _) => _callbacks?.Add((requestPath, request)))
.ReturnsAsync(() => _response);
return _clientMock.Object;
}
}
}

View File

@@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Filters;
using Moq;
namespace Cloudflare.Zones.Tests.Hold
@@ -12,8 +13,8 @@ namespace Cloudflare.Zones.Tests.Hold
[TestClass]
public class CreateZoneHoldTest
{
private readonly DateTime _date = new(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353";
private readonly DateTime DateTime = new(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private Mock<ICloudflareClient> _clientMock;
@@ -46,7 +47,7 @@ namespace Cloudflare.Zones.Tests.Hold
Result = new ZoneHold
{
Hold = true,
HoldAfter = DateTime,
HoldAfter = _date,
IncludeSubdomains = "true"
}
};

View File

@@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Filters;
using Moq;
namespace Cloudflare.Zones.Tests.Hold
@@ -12,8 +13,8 @@ namespace Cloudflare.Zones.Tests.Hold
[TestClass]
public class DeleteZoneHoldTest
{
private readonly DateTime _date = new(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353";
private readonly DateTime Date = new(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private Mock<ICloudflareClient> _clientMock;
@@ -46,7 +47,7 @@ namespace Cloudflare.Zones.Tests.Hold
Result = new ZoneHold
{
Hold = true,
HoldAfter = Date,
HoldAfter = _date,
IncludeSubdomains = "true"
}
};
@@ -86,7 +87,7 @@ namespace Cloudflare.Zones.Tests.Hold
var client = GetClient();
// Act
var response = await client.DeleteZoneHold(ZoneId, holdAfter: Date);
var response = await client.DeleteZoneHold(ZoneId, holdAfter: _date);
// Assert
Assert.IsNotNull(response);
@@ -100,7 +101,7 @@ namespace Cloudflare.Zones.Tests.Hold
Assert.IsNotNull(callback.QueryFilter);
Assert.IsInstanceOfType<DeleteZoneHoldFilter>(callback.QueryFilter);
Assert.AreEqual(Date, ((DeleteZoneHoldFilter)callback.QueryFilter).HoldAfter);
Assert.AreEqual(_date, ((DeleteZoneHoldFilter)callback.QueryFilter).HoldAfter);
_clientMock.Verify(m => m.DeleteAsync<ZoneHold>($"zones/{ZoneId}/hold", It.IsAny<DeleteZoneHoldFilter>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
@@ -124,7 +125,7 @@ namespace Cloudflare.Zones.Tests.Hold
public void ShouldReturnQueryParameter()
{
// Arrange
var filter = new DeleteZoneHoldFilter { HoldAfter = Date };
var filter = new DeleteZoneHoldFilter { HoldAfter = _date };
// Act
var dict = filter.GetQueryParameters();

View File

@@ -12,8 +12,8 @@ namespace Cloudflare.Zones.Tests.Hold
[TestClass]
public class GetZoneHoldTest
{
private readonly DateTime _date = new DateTime(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private const string ZoneId = "023e105f4ecef8ad9ca31a8372d0c353";
private readonly DateTime DateTime = new DateTime(2024, 10, 10, 20, 30, 40, 0, DateTimeKind.Utc);
private Mock<ICloudflareClient> _clientMock;
@@ -46,7 +46,7 @@ namespace Cloudflare.Zones.Tests.Hold
Result = new ZoneHold
{
Hold = true,
HoldAfter = DateTime,
HoldAfter = _date,
IncludeSubdomains = "false"
}
};

View File

@@ -5,7 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Zones.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Zones
@@ -19,7 +19,7 @@ namespace Cloudflare.Zones.Tests.Zones
private CloudflareResponse<Zone> _response;
private List<(string RequestPath, CreateRequest Request)> _callbacks;
private List<(string RequestPath, InternalCreateZoneRequest Request)> _callbacks;
private CreateZoneRequest _request;
@@ -47,7 +47,7 @@ namespace Cloudflare.Zones.Tests.Zones
],
Result = new Zone
{
Id = "023e105f4ecef8ad9ca31a8372d0c353",
Id = ZoneId,
Account = new AccountBase
{
Id = "023e105f4ecef8ad9ca31a8372d0c353",
@@ -97,18 +97,16 @@ namespace Cloudflare.Zones.Tests.Zones
}
};
_request = new CreateZoneRequest
{
AccountId = "023e105f4ecef8ad9ca31a8372d0c353",
Name = "example.com",
Type = ZoneType.Full
};
_request = new CreateZoneRequest("023e105f4ecef8ad9ca31a8372d0c353", "example.com");
}
[TestMethod]
public async Task ShouldReturnCreatedZone()
[DataTestMethod]
[DataRow(null)]
[DataRow(ZoneType.Full)]
public async Task ShouldReturnCreatedZone(ZoneType? type)
{
// Arrange
_request.Type = type;
var client = GetClient();
// Act
@@ -129,7 +127,7 @@ namespace Cloudflare.Zones.Tests.Zones
Assert.AreEqual(_request.Name, callback.Request.Name);
Assert.AreEqual(_request.Type, callback.Request.Type);
_clientMock.Verify(m => m.PostAsync<Zone, CreateRequest>("zones", It.IsAny<CreateRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PostAsync<Zone, InternalCreateZoneRequest>("zones", It.IsAny<InternalCreateZoneRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -182,8 +180,8 @@ namespace Cloudflare.Zones.Tests.Zones
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PostAsync<Zone, CreateRequest>(It.IsAny<string>(), It.IsAny<CreateRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, CreateRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, _, _) => _callbacks.Add((requestPath, request)))
.Setup(m => m.PostAsync<Zone, InternalCreateZoneRequest>(It.IsAny<string>(), It.IsAny<InternalCreateZoneRequest>(), It.IsAny<IQueryParameterFilter>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalCreateZoneRequest, IQueryParameterFilter, CancellationToken>((requestPath, request, _, _) => _callbacks.Add((requestPath, request)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -5,7 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using AMWD.Net.Api.Cloudflare;
using AMWD.Net.Api.Cloudflare.Zones;
using AMWD.Net.Api.Cloudflare.Zones.Zones.InternalRequests;
using AMWD.Net.Api.Cloudflare.Zones.Internals.Requests;
using Moq;
namespace Cloudflare.Zones.Tests.Zones
@@ -19,7 +19,7 @@ namespace Cloudflare.Zones.Tests.Zones
private CloudflareResponse<Zone> _response;
private List<(string RequestPath, EditRequest Request)> _callbacks;
private List<(string RequestPath, InternalEditZoneRequest Request)> _callbacks;
private EditZoneRequest _request;
@@ -97,9 +97,8 @@ namespace Cloudflare.Zones.Tests.Zones
}
};
_request = new EditZoneRequest
_request = new EditZoneRequest(ZoneId)
{
Id = ZoneId,
Type = ZoneType.Full,
VanityNameServers = ["ns1.example.org", "ns2.example.org"]
};
@@ -129,7 +128,7 @@ namespace Cloudflare.Zones.Tests.Zones
Assert.AreEqual(_request.Type.Value, callback.Request.Type.Value);
Assert.IsNull(callback.Request.VanityNameServers);
_clientMock.Verify(m => m.PatchAsync<Zone, EditRequest>($"zones/{ZoneId}", It.IsAny<EditRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PatchAsync<Zone, InternalEditZoneRequest>($"zones/{ZoneId}", It.IsAny<InternalEditZoneRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -160,7 +159,7 @@ namespace Cloudflare.Zones.Tests.Zones
Assert.IsTrue(callback.Request.VanityNameServers.Contains("ns1.example.org"));
Assert.IsTrue(callback.Request.VanityNameServers.Contains("ns2.example.org"));
_clientMock.Verify(m => m.PatchAsync<Zone, EditRequest>($"zones/{ZoneId}", It.IsAny<EditRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.Verify(m => m.PatchAsync<Zone, InternalEditZoneRequest>($"zones/{ZoneId}", It.IsAny<InternalEditZoneRequest>(), It.IsAny<CancellationToken>()), Times.Once);
_clientMock.VerifyNoOtherCalls();
}
@@ -196,8 +195,8 @@ namespace Cloudflare.Zones.Tests.Zones
{
_clientMock = new Mock<ICloudflareClient>();
_clientMock
.Setup(m => m.PatchAsync<Zone, EditRequest>(It.IsAny<string>(), It.IsAny<EditRequest>(), It.IsAny<CancellationToken>()))
.Callback<string, EditRequest, CancellationToken>((requestPath, request, _) => _callbacks.Add((requestPath, request)))
.Setup(m => m.PatchAsync<Zone, InternalEditZoneRequest>(It.IsAny<string>(), It.IsAny<InternalEditZoneRequest>(), It.IsAny<CancellationToken>()))
.Callback<string, InternalEditZoneRequest, CancellationToken>((requestPath, request, _) => _callbacks.Add((requestPath, request)))
.ReturnsAsync(() => _response);
return _clientMock.Object;

View File

@@ -178,12 +178,12 @@ namespace Cloudflare.Zones.Tests.Zones
{
AccountId = "023e105f4ecef8ad9ca31a8372d0c353",
AccountName = "Example Account Name",
MatchType = FilterMatchType.Any,
Match = FilterMatchType.Any,
Name = "example.com",
PerPage = 13,
Page = 5,
OrderBy = ZonesOrderBy.AccountName,
OrderDirection = SortDirection.Descending,
Direction = SortDirection.Descending,
Status = ZoneStatus.Active
};
@@ -261,7 +261,7 @@ namespace Cloudflare.Zones.Tests.Zones
// Arrange
var filter = new ListZonesFilter
{
OrderDirection = 0
Direction = 0
};
// Act
@@ -278,7 +278,7 @@ namespace Cloudflare.Zones.Tests.Zones
// Arrange
var filter = new ListZonesFilter
{
MatchType = 0
Match = 0
};
// Act