From f6556b21b76ed7b363dee246bed2257b0b9b75e9 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Fri, 4 Sep 2015 15:24:39 +0100 Subject: [PATCH 01/10] Added Zone Settings class structure --- src/CloudFlare.NET/CloudFlare.NET.csproj | 5 +++ .../DnsRecordClient.Interface.cs | 2 +- src/CloudFlare.NET/ZoneClient.Interface.cs | 2 +- src/CloudFlare.NET/ZoneSetting.cs | 30 +++++++++++++ src/CloudFlare.NET/ZoneSettingBase.cs | 45 +++++++++++++++++++ .../ZoneSettingsClient.Interface.cs | 14 ++++++ .../ZoneSettingsClientExtensions.cs | 13 ++++++ .../ZoneSettingsHttpClientExtensions.cs | 15 +++++++ .../CloudFlare.NET.Tests/RequiresArgNullEx.cs | 1 + 9 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/CloudFlare.NET/ZoneSetting.cs create mode 100644 src/CloudFlare.NET/ZoneSettingBase.cs create mode 100644 src/CloudFlare.NET/ZoneSettingsClient.Interface.cs create mode 100644 src/CloudFlare.NET/ZoneSettingsClientExtensions.cs create mode 100644 src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs diff --git a/src/CloudFlare.NET/CloudFlare.NET.csproj b/src/CloudFlare.NET/CloudFlare.NET.csproj index ef1542f..194ee97 100644 --- a/src/CloudFlare.NET/CloudFlare.NET.csproj +++ b/src/CloudFlare.NET/CloudFlare.NET.csproj @@ -98,6 +98,11 @@ + + + + + diff --git a/src/CloudFlare.NET/DnsRecordClient.Interface.cs b/src/CloudFlare.NET/DnsRecordClient.Interface.cs index b62e304..a83e4e9 100644 --- a/src/CloudFlare.NET/DnsRecordClient.Interface.cs +++ b/src/CloudFlare.NET/DnsRecordClient.Interface.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; /// - /// The CloudFlare DNS records for a zone API Client. + /// The CloudFlare DNS record API Client. /// /// public interface IDnsRecordClient diff --git a/src/CloudFlare.NET/ZoneClient.Interface.cs b/src/CloudFlare.NET/ZoneClient.Interface.cs index 6298ba6..a8bc78e 100644 --- a/src/CloudFlare.NET/ZoneClient.Interface.cs +++ b/src/CloudFlare.NET/ZoneClient.Interface.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; /// - /// The CloudFlare API Client. + /// The CloudFlare Zone API Client. /// /// public interface IZoneClient diff --git a/src/CloudFlare.NET/ZoneSetting.cs b/src/CloudFlare.NET/ZoneSetting.cs new file mode 100644 index 0000000..15f6b22 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSetting.cs @@ -0,0 +1,30 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Newtonsoft.Json; + + /// + /// A Zone setting changes how the Zone works in relation to caching, security, or other features of CloudFlare. + /// + /// The type of the . + /// + public class ZoneSetting : ZoneSettingBase + { + /// + /// Initializes a new instance of the class. + /// + public ZoneSetting(string id, TValue value, bool editable, DateTimeOffset modifiedOn) + : base(id, editable, modifiedOn) + { + Value = value; + } + + /// + /// Value of the zone setting. + /// + [JsonProperty("value")] + public TValue Value { get; } + } +} diff --git a/src/CloudFlare.NET/ZoneSettingBase.cs b/src/CloudFlare.NET/ZoneSettingBase.cs new file mode 100644 index 0000000..9cf2ff6 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSettingBase.cs @@ -0,0 +1,45 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Newtonsoft.Json; + + /// + /// The base class for all Zone settings. + /// + /// + public abstract class ZoneSettingBase + { + /// + /// Initializes a new instance of the class. + /// + protected ZoneSettingBase(string id, bool editable, DateTimeOffset modifiedOn) + { + if (id == null) + throw new ArgumentNullException(nameof(id)); + + Id = id; + Editable = editable; + ModifiedOn = modifiedOn; + } + + /// + /// ID of the zone setting. + /// + [JsonProperty("id")] + public string Id { get; } + + /// + /// Value of the zone setting. + /// + [JsonProperty("editable")] + public bool Editable { get; } + + /// + /// last time this setting was modified. + /// + [JsonProperty("modified_on")] + public DateTimeOffset ModifiedOn { get; } + } +} diff --git a/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs b/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs new file mode 100644 index 0000000..01422f1 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs @@ -0,0 +1,14 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + + /// + /// The CloudFlare Zone Settings API Client. + /// + /// + public interface IZoneSettingsClient + { + } +} diff --git a/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs new file mode 100644 index 0000000..a586468 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs @@ -0,0 +1,13 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + + /// + /// Helper extension methods on . + /// + public class ZoneSettingsClientExtensions + { + } +} diff --git a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs new file mode 100644 index 0000000..25bed76 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs @@ -0,0 +1,15 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net.Http; + + /// + /// Extension methods on to wrap the Zone APIs + /// + /// + public class ZoneSettingsHttpClientExtensions + { + } +} diff --git a/src/Tests/CloudFlare.NET.Tests/RequiresArgNullEx.cs b/src/Tests/CloudFlare.NET.Tests/RequiresArgNullEx.cs index cdd944f..3706780 100644 --- a/src/Tests/CloudFlare.NET.Tests/RequiresArgNullEx.cs +++ b/src/Tests/CloudFlare.NET.Tests/RequiresArgNullEx.cs @@ -15,6 +15,7 @@ public class RequiresArgNullEx [Exclude(Method = "op_Equality")] [Exclude(Method = "op_Inequality")] [Exclude(Type = typeof(CloudFlareClient), Method = "GetAllPagedResultsAsync")] + [Substitute(typeof(ZoneSetting<>), typeof(ZoneSetting))] public Task CloudFlare(MethodData method) { return method.Execute(); From 45742d51edbb7941fe0f8a0d0f23cbad1adb1107 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Fri, 4 Sep 2015 17:41:38 +0100 Subject: [PATCH 02/10] Implemented Get all zone settings https://api.cloudflare.com/#zone-settings-get-all-zone-settings --- src/CloudFlare.NET/CloudFlare.NET.csproj | 6 + .../DnsRecordHttpClientExtensions.cs | 2 +- src/CloudFlare.NET/SettingCacheLevelTypes.cs | 24 ++ src/CloudFlare.NET/SettingOnOffTypes.cs | 23 ++ .../SettingSecurityLevelTypes.cs | 26 ++ src/CloudFlare.NET/SettingSslTypes.cs | 25 ++ .../ZoneDevelopmentModeSetting.cs | 38 +++ src/CloudFlare.NET/ZoneSetting.cs | 2 +- src/CloudFlare.NET/ZoneSettingBase.cs | 4 +- .../ZoneSettingsClient.Implementation.cs | 21 ++ .../ZoneSettingsClient.Interface.cs | 10 + .../ZoneSettingsClientExtensions.cs | 20 +- .../ZoneSettingsHttpClientExtensions.cs | 93 +++++++- .../CloudFlare.NET.IntegrationTests.csproj | 5 + .../ZonesSettingsSpec.cs | 29 +++ .../app.config | 2 +- .../packages.config | 1 + .../CloudFlare.NET.Tests.csproj | 2 + .../Serialization/SampleJson.cs | 19 +- .../Serialization/ZoneSettings.json | 224 ++++++++++++++++++ .../ZoneSettingsClientSpec.cs | 73 ++++++ 21 files changed, 634 insertions(+), 15 deletions(-) create mode 100644 src/CloudFlare.NET/SettingCacheLevelTypes.cs create mode 100644 src/CloudFlare.NET/SettingOnOffTypes.cs create mode 100644 src/CloudFlare.NET/SettingSecurityLevelTypes.cs create mode 100644 src/CloudFlare.NET/SettingSslTypes.cs create mode 100644 src/CloudFlare.NET/ZoneDevelopmentModeSetting.cs create mode 100644 src/CloudFlare.NET/ZoneSettingsClient.Implementation.cs create mode 100644 src/Tests/CloudFlare.NET.IntegrationTests/ZonesSettingsSpec.cs create mode 100644 src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json create mode 100644 src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs diff --git a/src/CloudFlare.NET/CloudFlare.NET.csproj b/src/CloudFlare.NET/CloudFlare.NET.csproj index 194ee97..4cb6eca 100644 --- a/src/CloudFlare.NET/CloudFlare.NET.csproj +++ b/src/CloudFlare.NET/CloudFlare.NET.csproj @@ -91,15 +91,21 @@ + + + + + + diff --git a/src/CloudFlare.NET/DnsRecordHttpClientExtensions.cs b/src/CloudFlare.NET/DnsRecordHttpClientExtensions.cs index 6f06b87..36fe6fa 100644 --- a/src/CloudFlare.NET/DnsRecordHttpClientExtensions.cs +++ b/src/CloudFlare.NET/DnsRecordHttpClientExtensions.cs @@ -14,7 +14,7 @@ public static class DnsRecordHttpClientExtensions { /// - /// Gets the zones for the account specified by the details. + /// Gets the DNS records for the zone with the specified . /// /// public static Task>> GetDnsRecordsAsync( diff --git a/src/CloudFlare.NET/SettingCacheLevelTypes.cs b/src/CloudFlare.NET/SettingCacheLevelTypes.cs new file mode 100644 index 0000000..0949216 --- /dev/null +++ b/src/CloudFlare.NET/SettingCacheLevelTypes.cs @@ -0,0 +1,24 @@ +namespace CloudFlare.NET +{ + using System.Diagnostics.CodeAnalysis; + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + + // ReSharper disable InconsistentNaming +#pragma warning disable 1591 + + /// + /// The values of Cache Level setting. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", + Justification = "Names are self-explanatory.")] + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter", + Justification = "Named to match serialized values.")] + [JsonConverter(typeof(StringEnumConverter))] + public enum SettingCacheLevelTypes + { + basic, + simplified, + aggressive, + } +} diff --git a/src/CloudFlare.NET/SettingOnOffTypes.cs b/src/CloudFlare.NET/SettingOnOffTypes.cs new file mode 100644 index 0000000..a4ed21f --- /dev/null +++ b/src/CloudFlare.NET/SettingOnOffTypes.cs @@ -0,0 +1,23 @@ +namespace CloudFlare.NET +{ + using System.Diagnostics.CodeAnalysis; + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + + // ReSharper disable InconsistentNaming +#pragma warning disable 1591 + + /// + /// The values of an on/off setting. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", + Justification = "Names are self-explanatory.")] + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter", + Justification = "Named to match serialized values.")] + [JsonConverter(typeof(StringEnumConverter))] + public enum SettingOnOffTypes + { + off, + on, + } +} diff --git a/src/CloudFlare.NET/SettingSecurityLevelTypes.cs b/src/CloudFlare.NET/SettingSecurityLevelTypes.cs new file mode 100644 index 0000000..1225aa8 --- /dev/null +++ b/src/CloudFlare.NET/SettingSecurityLevelTypes.cs @@ -0,0 +1,26 @@ +namespace CloudFlare.NET +{ + using System.Diagnostics.CodeAnalysis; + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + + // ReSharper disable InconsistentNaming +#pragma warning disable 1591 + + /// + /// The values of Cache Level setting. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", + Justification = "Names are self-explanatory.")] + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter", + Justification = "Named to match serialized values.")] + [JsonConverter(typeof(StringEnumConverter))] + public enum SettingSecurityLevelTypes + { + essentially_off, + low, + medium, + high, + under_attack, + } +} diff --git a/src/CloudFlare.NET/SettingSslTypes.cs b/src/CloudFlare.NET/SettingSslTypes.cs new file mode 100644 index 0000000..ad58d1e --- /dev/null +++ b/src/CloudFlare.NET/SettingSslTypes.cs @@ -0,0 +1,25 @@ +namespace CloudFlare.NET +{ + using System.Diagnostics.CodeAnalysis; + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + + // ReSharper disable InconsistentNaming +#pragma warning disable 1591 + + /// + /// The values of Cache Level setting. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", + Justification = "Names are self-explanatory.")] + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter", + Justification = "Named to match serialized values.")] + [JsonConverter(typeof(StringEnumConverter))] + public enum SettingSslTypes + { + off, + flexible, + full, + full_strict, + } +} diff --git a/src/CloudFlare.NET/ZoneDevelopmentModeSetting.cs b/src/CloudFlare.NET/ZoneDevelopmentModeSetting.cs new file mode 100644 index 0000000..b104320 --- /dev/null +++ b/src/CloudFlare.NET/ZoneDevelopmentModeSetting.cs @@ -0,0 +1,38 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Newtonsoft.Json; + + /// + /// Development Mode temporarily allows you to enter development mode for your websites if you need to make changes + /// to your site. This will bypass CloudFlare's accelerated cache and slow down your site, but is useful if you are + /// making changes to cacheable content (like images, css, or JavaScript) and would like to see those changes right + /// away. Once entered, development mode will last for 3 hours and then automatically toggle off. + /// + /// + public class ZoneDevelopmentModeSetting : ZoneSetting + { + /// + /// Initializes a new instance of the class. + /// + public ZoneDevelopmentModeSetting( + string id, + SettingOnOffTypes value, + bool editable, + DateTimeOffset? modifiedOn, + int timeRemaining) + : base(id, value, editable, modifiedOn) + { + TimeRemaining = timeRemaining; + } + + /// + /// The interval (in seconds) from when development mode expires (positive integer) or last expired (negative + /// integer) for the domain. If development mode has never been enabled, this value is false. + /// + [JsonProperty("time_remaining")] + public int TimeRemaining { get; } + } +} diff --git a/src/CloudFlare.NET/ZoneSetting.cs b/src/CloudFlare.NET/ZoneSetting.cs index 15f6b22..d9a8721 100644 --- a/src/CloudFlare.NET/ZoneSetting.cs +++ b/src/CloudFlare.NET/ZoneSetting.cs @@ -15,7 +15,7 @@ public class ZoneSetting : ZoneSettingBase /// /// Initializes a new instance of the class. /// - public ZoneSetting(string id, TValue value, bool editable, DateTimeOffset modifiedOn) + public ZoneSetting(string id, TValue value, bool editable, DateTimeOffset? modifiedOn) : base(id, editable, modifiedOn) { Value = value; diff --git a/src/CloudFlare.NET/ZoneSettingBase.cs b/src/CloudFlare.NET/ZoneSettingBase.cs index 9cf2ff6..14cb061 100644 --- a/src/CloudFlare.NET/ZoneSettingBase.cs +++ b/src/CloudFlare.NET/ZoneSettingBase.cs @@ -14,7 +14,7 @@ public abstract class ZoneSettingBase /// /// Initializes a new instance of the class. /// - protected ZoneSettingBase(string id, bool editable, DateTimeOffset modifiedOn) + protected ZoneSettingBase(string id, bool editable, DateTimeOffset? modifiedOn) { if (id == null) throw new ArgumentNullException(nameof(id)); @@ -40,6 +40,6 @@ protected ZoneSettingBase(string id, bool editable, DateTimeOffset modifiedOn) /// last time this setting was modified. /// [JsonProperty("modified_on")] - public DateTimeOffset ModifiedOn { get; } + public DateTimeOffset? ModifiedOn { get; } } } diff --git a/src/CloudFlare.NET/ZoneSettingsClient.Implementation.cs b/src/CloudFlare.NET/ZoneSettingsClient.Implementation.cs new file mode 100644 index 0000000..26f71b4 --- /dev/null +++ b/src/CloudFlare.NET/ZoneSettingsClient.Implementation.cs @@ -0,0 +1,21 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + /// + public partial class CloudFlareClient : IZoneSettingsClient + { + /// + public Task> GetAllZoneSettingsAsync( + IdentifierTag zoneId, + CancellationToken cancellationToken, + CloudFlareAuth auth = null) + { + return _client.GetAllZoneSettingsAsync(zoneId, cancellationToken, auth ?? _auth); + } + } +} diff --git a/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs b/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs index 01422f1..bb02cdd 100644 --- a/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs +++ b/src/CloudFlare.NET/ZoneSettingsClient.Interface.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; using System.Linq; + using System.Threading; + using System.Threading.Tasks; /// /// The CloudFlare Zone Settings API Client. @@ -10,5 +12,13 @@ /// public interface IZoneSettingsClient { + /// + /// Gets the zone settings for the zone with the specified . + /// + /// + Task> GetAllZoneSettingsAsync( + IdentifierTag zoneId, + CancellationToken cancellationToken, + CloudFlareAuth auth = null); } } diff --git a/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs index a586468..165a78a 100644 --- a/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs +++ b/src/CloudFlare.NET/ZoneSettingsClientExtensions.cs @@ -3,11 +3,29 @@ using System; using System.Collections.Generic; using System.Linq; + using System.Threading; + using System.Threading.Tasks; /// /// Helper extension methods on . /// - public class ZoneSettingsClientExtensions + public static class ZoneSettingsClientExtensions { + /// + /// Gets the zone settings for the zone with the specified . + /// + /// + public static Task> GetAllZoneSettingsAsync( + this IZoneSettingsClient client, + IdentifierTag zoneId, + CloudFlareAuth auth = null) + { + if (client == null) + throw new ArgumentNullException(nameof(client)); + if (zoneId == null) + throw new ArgumentNullException(nameof(zoneId)); + + return client.GetAllZoneSettingsAsync(zoneId, CancellationToken.None, auth); + } } } diff --git a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs index 25bed76..ea68f05 100644 --- a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs +++ b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs @@ -4,12 +4,103 @@ using System.Collections.Generic; using System.Linq; using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using Newtonsoft.Json.Linq; /// /// Extension methods on to wrap the Zone APIs /// /// - public class ZoneSettingsHttpClientExtensions + public static class ZoneSettingsHttpClientExtensions { + /// + /// Gets the zone settings for the zone with the specified . + /// + /// + public static async Task> GetAllZoneSettingsAsync( + this HttpClient client, + IdentifierTag zoneId, + CancellationToken cancellationToken, + CloudFlareAuth auth) + { + if (zoneId == null) + throw new ArgumentNullException(nameof(zoneId)); + + Uri uri = new Uri(CloudFlareConstants.BaseUri, $"zones/{zoneId}/settings"); + + JArray jsonSettings = await client.GetCloudFlareResultAsync(uri, auth, cancellationToken); + + return GetZoneSetting(jsonSettings.Cast()); + } + + private static IEnumerable GetZoneSetting(IEnumerable jsons) + { + if (jsons == null) + throw new ArgumentNullException(nameof(jsons)); + + foreach (JObject json in jsons) + { + JToken idToken = json["id"]; + if (idToken == null) + { + throw new ArgumentException($"The setting does not have an id property.\n{json}", nameof(json)); + } + + string id = idToken.Value(); + + switch (id) + { + case "advanced_ddos": + case "always_online": + case "browser_check": + case "origin_error_page_pass_thru": + case "sort_query_string_for_cache": + case "email_obfuscation": + case "hotlink_protection": + case "ip_geolocation": + case "ipv6": + case "mirage": + case "polish": + case "prefetch_preload": + case "pseudo_ipv4": + case "response_buffering": + case "rocket_loader": + case "server_side_exclude": + case "tls_client_auth": + case "true_client_ip_header": + case "waf": + case "tls_1_2_only": + yield return json.ToObject>(); + break; + case "browser_cache_ttl": + case "challenge_ttl": + case "edge_cache_ttl": + case "max_upload": + yield return json.ToObject>(); + break; + case "cache_level": + yield return json.ToObject>(); + break; + case "security_level": + yield return json.ToObject>(); + break; + case "ssl": + yield return json.ToObject>(); + break; + case "development_mode": + yield return json.ToObject(); + break; + case "minify": + case "mobile_redirect": + case "security_header": + yield return json.ToObject>(); + break; + default: + yield return json.ToObject>(); + break; + } + } + } } } diff --git a/src/Tests/CloudFlare.NET.IntegrationTests/CloudFlare.NET.IntegrationTests.csproj b/src/Tests/CloudFlare.NET.IntegrationTests/CloudFlare.NET.IntegrationTests.csproj index be78d21..c2680b7 100644 --- a/src/Tests/CloudFlare.NET.IntegrationTests/CloudFlare.NET.IntegrationTests.csproj +++ b/src/Tests/CloudFlare.NET.IntegrationTests/CloudFlare.NET.IntegrationTests.csproj @@ -43,6 +43,10 @@ True + + ..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll + True + @@ -60,6 +64,7 @@ + diff --git a/src/Tests/CloudFlare.NET.IntegrationTests/ZonesSettingsSpec.cs b/src/Tests/CloudFlare.NET.IntegrationTests/ZonesSettingsSpec.cs new file mode 100644 index 0000000..ae58989 --- /dev/null +++ b/src/Tests/CloudFlare.NET.IntegrationTests/ZonesSettingsSpec.cs @@ -0,0 +1,29 @@ +namespace CloudFlare.NET +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Machine.Specifications; + + [Subject("Zone Settings")] + public class ZonesSettingsSpec + { + static IZoneSettingsClient _client; + static CloudFlareAuth _auth; + static Zone _zone; + static IReadOnlyList _response; + + Establish context = () => + { + var client = new CloudFlareClient(); + _auth = new CloudFlareAuth(Helper.AuthEmail, Helper.AuthKey); + CloudFlareResponse> response = client.GetZonesAsync(_auth).Await(); + _zone = response.Result.First(); + _client = client; + }; + + Because of = () => _response = _client.GetAllZoneSettingsAsync(_zone.Id, _auth).Await().AsTask.Result.ToList(); + + It should_return_the_zone_settings = () => _response.ShouldNotBeEmpty(); + } +} diff --git a/src/Tests/CloudFlare.NET.IntegrationTests/app.config b/src/Tests/CloudFlare.NET.IntegrationTests/app.config index d0b54db..823e8aa 100644 --- a/src/Tests/CloudFlare.NET.IntegrationTests/app.config +++ b/src/Tests/CloudFlare.NET.IntegrationTests/app.config @@ -4,7 +4,7 @@ - + diff --git a/src/Tests/CloudFlare.NET.IntegrationTests/packages.config b/src/Tests/CloudFlare.NET.IntegrationTests/packages.config index 2162fcf..506685b 100644 --- a/src/Tests/CloudFlare.NET.IntegrationTests/packages.config +++ b/src/Tests/CloudFlare.NET.IntegrationTests/packages.config @@ -5,4 +5,5 @@ + \ No newline at end of file diff --git a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj index 3fe1187..7508b8e 100644 --- a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj @@ -130,6 +130,7 @@ + @@ -138,6 +139,7 @@ + diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs index fb2f137..53273d1 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs @@ -8,7 +8,8 @@ internal class SampleJson { - public static JObject Load(string fileName) + public static TJson Load(string fileName) + where TJson : JToken { Stream stream = typeof(SampleJson).Assembly.GetManifestResourceStream(typeof(SampleJson), $"{fileName}.json"); @@ -21,20 +22,22 @@ public static JObject Load(string fileName) using (var sr = new StreamReader(stream)) { string json = sr.ReadToEnd(); - return JObject.Parse(json); + return (TJson)JToken.Parse(json); } } - public static JObject DnsRecord => Load(nameof(DnsRecord)); + public static JObject DnsRecord => Load(nameof(DnsRecord)); - public static JObject DnsRecordMinimal => Load(nameof(DnsRecordMinimal)); + public static JObject DnsRecordMinimal => Load(nameof(DnsRecordMinimal)); - public static JObject ErrorResponse => Load(nameof(ErrorResponse)); + public static JObject ErrorResponse => Load(nameof(ErrorResponse)); - public static JObject SuccessResponse => Load(nameof(SuccessResponse)); + public static JObject SuccessResponse => Load(nameof(SuccessResponse)); - public static JObject Zone => Load(nameof(Zone)); + public static JObject Zone => Load(nameof(Zone)); - public static JObject ZoneMinimal => Load(nameof(ZoneMinimal)); + public static JObject ZoneMinimal => Load(nameof(ZoneMinimal)); + + public static JArray ZoneSettings => Load(nameof(ZoneSettings)); } } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json new file mode 100644 index 0000000..37398b7 --- /dev/null +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json @@ -0,0 +1,224 @@ +[ + { + "id": "advanced_ddos", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "always_online", + "value": "on", + "modified_on": null, + "editable": true + }, + { + "id": "browser_cache_ttl", + "value": 14400, + "modified_on": null, + "editable": true + }, + { + "id": "browser_check", + "value": "on", + "modified_on": null, + "editable": true + }, + { + "id": "cache_level", + "value": "aggressive", + "modified_on": null, + "editable": true + }, + { + "id": "challenge_ttl", + "value": 1800, + "modified_on": null, + "editable": true + }, + { + "id": "development_mode", + "value": "off", + "modified_on": null, + "editable": true + }, + { + "id": "edge_cache_ttl", + "value": 7200, + "modified_on": null, + "editable": true + }, + { + "id": "email_obfuscation", + "value": "on", + "modified_on": null, + "editable": true + }, + { + "id": "hotlink_protection", + "modified_on": null, + "value": "off", + "editable": true + }, + { + "id": "ip_geolocation", + "value": "on", + "modified_on": null, + "editable": true + }, + { + "id": "ipv6", + "value": "on", + "modified_on": "2015-08-19T10:05:27.442217Z", + "editable": true + }, + { + "id": "max_upload", + "value": 100, + "modified_on": null, + "editable": true + }, + { + "id": "minify", + "value": { + "css": "off", + "html": "off", + "js": "off" + }, + "modified_on": null, + "editable": true + }, + { + "id": "mirage", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "mobile_redirect", + "value": { + "status": "off", + "mobile_subdomain": null, + "strip_uri": false + }, + "modified_on": null, + "editable": true + }, + { + "id": "origin_error_page_pass_thru", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "polish", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "prefetch_preload", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "pseudo_ipv4", + "value": "off", + "modified_on": null, + "editable": true + }, + { + "id": "response_buffering", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "rocket_loader", + "value": "off", + "modified_on": null, + "editable": true + }, + { + "id": "security_header", + "modified_on": null, + "value": { + "strict_transport_security": { + "enabled": false, + "max_age": 0, + "include_subdomains": false, + "preload": false, + "nosniff": true + } + }, + "editable": true + }, + { + "id": "security_level", + "value": "medium", + "modified_on": null, + "editable": true + }, + { + "id": "server_side_exclude", + "value": "on", + "modified_on": null, + "editable": true + }, + { + "id": "sort_query_string_for_cache", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "ssl", + "value": "full", + "modified_on": "2015-08-19T10:17:00.167959Z", + "certificate_status": "active", + "editable": true + }, + { + "id": "tls_1_2_only", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "tls_client_auth", + "value": "off", + "modified_on": null, + "editable": true + }, + { + "id": "true_client_ip_header", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "waf", + "value": "off", + "modified_on": null, + "editable": false + }, + { + "id": "xxx_test1", + "value": "F3FE5A47-B1F8-479B-BB7B-15784F1066EF", + "modified_on": null, + "editable": false + }, + { + "id": "xxx_test2", + "value": { + "value1": "809E381F-5A63-4BD9-B804-C803F4C607F8", + "value2": { + "inner_value1": false, + "inner_value2": 0, + "inner_value3": "1200D69A-AA92-4E56-84BE-51968B76B964" + } + }, + "modified_on": null, + "editable": false + } +] \ No newline at end of file diff --git a/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs b/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs new file mode 100644 index 0000000..5894bbd --- /dev/null +++ b/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs @@ -0,0 +1,73 @@ +namespace CloudFlare.NET.ZoneSettingsClientSpec +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net.Http; + using CloudFlare.NET.Serialization; + using Machine.Specifications; + using Newtonsoft.Json.Linq; + using Ploeh.AutoFixture; + + [Subject("ZoneSettingsClient")] + public class When_getting_zone_settings : RequestContext + { + static IdentifierTag _zoneId; + static JArray _source; + static IReadOnlyList _actual; + static Uri _expectedRequestUri; + + Establish context = () => + { + _source = SampleJson.ZoneSettings; + var response = new CloudFlareResponse(true, _source); + _zoneId = _fixture.Create(); + _handler.SetResponseContent(response); + _expectedRequestUri = new Uri(CloudFlareConstants.BaseUri, $"zones/{_zoneId}/settings"); + }; + + Because of = () => _actual = _sut.GetAllZoneSettingsAsync(_zoneId, _auth).Await().AsTask.Result.ToList(); + + Behaves_like authenticated_request_behaviour; + + It should_make_a_GET_request = () => _handler.Request.Method.ShouldEqual(HttpMethod.Get); + + It should_request_the_zone_settings_endpoint + = () => _handler.Request.RequestUri.ShouldEqual(_expectedRequestUri); + + It should_return_the_expected_zone_settings = () => _actual.Count.ShouldEqual(_source.Count); + + It should_be_only_2_test_generic_types = + () => _actual.Count(s => s.GetType() == typeof(ZoneSetting)).ShouldEqual(2); + + It should_return_the_test_simple_type = + () => _actual.Single(s => s.Id == "xxx_test1").ShouldBeOfExactType>(); + + It should_return_the_test_comples_type = + () => _actual.Single(s => s.Id == "xxx_test2").ShouldBeOfExactType>(); + } + + [Subject("ZoneSettingsClient")] + public class When_getting_dnsRecords_and_an_error_occurs : ErredRequestContext + { + static IdentifierTag _zoneId; + static Uri _expectedRequestUri; + + Establish context = () => + { + _zoneId = _fixture.Create(); + _expectedRequestUri = new Uri(CloudFlareConstants.BaseUri, $"zones/{_zoneId}/settings"); + }; + + Because of = () => _exception = Catch.Exception(() => _sut.GetAllZoneSettingsAsync(_zoneId, _auth).Await()); + + Behaves_like authenticated_request_behaviour; + + Behaves_like erred_request_behaviour; + + It should_make_a_GET_request = () => _handler.Request.Method.ShouldEqual(HttpMethod.Get); + + It should_request_the_zone_settings_endpoint + = () => _handler.Request.RequestUri.ShouldEqual(_expectedRequestUri); + } +} From 9d723ffd34f1a7bb9c40f303ba064c04e6903482 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 16:08:46 +0100 Subject: [PATCH 03/10] Test consistency --- .../DnsRecordGetParametersSpec.cs | 7 +----- .../Serialization/DnsRecordSpec.cs | 16 +++++-------- .../ErrorResponseSerializationSpec.cs | 8 +++---- .../SuccessResponseSerializationSpec.cs | 8 +++---- .../Serialization/ZoneGetParametersSpec.cs | 7 +----- .../Serialization/ZoneSpec.cs | 23 ++++++------------- 6 files changed, 21 insertions(+), 48 deletions(-) diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordGetParametersSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordGetParametersSpec.cs index 0fcc8c4..504be99 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordGetParametersSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordGetParametersSpec.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Net.Http; using Machine.Specifications; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Ploeh.AutoFixture; @@ -37,11 +36,7 @@ public class When_serializing_and_deserializing : FixtureContext Establish context = () => _expected = _fixture.Create(); - Because of = () => - { - var serializeObject = JsonConvert.SerializeObject(_expected); - _actual = JObject.FromObject(_expected).ToObject(); - }; + Because of = () => _actual = JObject.FromObject(_expected).ToObject(); It should_retain_all_properties = () => _actual.AsLikeness().ShouldEqual(_expected); } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordSpec.cs index c96d81e..1eff993 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/DnsRecordSpec.cs @@ -13,11 +13,9 @@ public class When_deserializing protected static JObject _json; protected static DnsRecord _sut; - Because of = () => - { - _json = SampleJson.DnsRecord; - _sut = _json.ToObject(); - }; + Establish context = () => _json = SampleJson.DnsRecord; + + Because of = () => _sut = _json.ToObject(); Behaves_like identifier_deserialize_behavior; @@ -50,11 +48,9 @@ public class When_deserializing_minimal protected static JObject _json; protected static DnsRecord _sut; - Because of = () => - { - _json = SampleJson.DnsRecordMinimal; - _sut = _json.ToObject(); - }; + Establish context = () => _json = SampleJson.DnsRecordMinimal; + + Because of = () => _sut = _json.ToObject(); Behaves_like identifier_deserialize_behavior; diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ErrorResponseSerializationSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ErrorResponseSerializationSpec.cs index 5b8a142..27a3b9e 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ErrorResponseSerializationSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ErrorResponseSerializationSpec.cs @@ -12,11 +12,9 @@ public class When_deserializing_error_response static JObject _json; static CloudFlareResponseBase _sut; - Because of = () => - { - _json = SampleJson.ErrorResponse; - _sut = _json.ToObject(); - }; + Establish context = () => _json = SampleJson.ErrorResponse; + + Because of = () => _sut = _json.ToObject(); It should_deserialize_success = () => _sut.Success.ShouldEqual(_json["success"].Value()); diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/SuccessResponseSerializationSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/SuccessResponseSerializationSpec.cs index 3167632..41cf3d5 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/SuccessResponseSerializationSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/SuccessResponseSerializationSpec.cs @@ -12,11 +12,9 @@ public class When_deserializing_success_response static JObject _json; static CloudFlareResponse _sut; - Because of = () => - { - _json = SampleJson.SuccessResponse; - _sut = _json.ToObject>(); - }; + Establish context = () => _json = SampleJson.SuccessResponse; + + Because of = () => _sut = _json.ToObject>(); It should_deserialize_result = () => _sut.Result["id"].ShouldEqual(_json["result"]["id"]); diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneGetParametersSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneGetParametersSpec.cs index 3203819..54e7046 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneGetParametersSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneGetParametersSpec.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Net.Http; using Machine.Specifications; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Ploeh.AutoFixture; @@ -35,11 +34,7 @@ public class When_serializing_and_deserializing : FixtureContext Establish context = () => _expected = _fixture.Create(); - Because of = () => - { - var serializeObject = JsonConvert.SerializeObject(_expected); - _actual = JObject.FromObject(_expected).ToObject(); - }; + Because of = () => _actual = JObject.FromObject(_expected).ToObject(); It should_retain_all_properties = () => _actual.AsLikeness().ShouldEqual(_expected); } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSpec.cs index 52d4148..250e3bf 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSpec.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Linq; using Machine.Specifications; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Ploeh.AutoFixture; @@ -14,11 +13,9 @@ public class When_deserializing protected static JObject _json; protected static Zone _sut; - Because of = () => - { - _json = SampleJson.Zone; - _sut = _json.ToObject(); - }; + Establish context = () => _json = SampleJson.Zone; + + Because of = () => _sut = _json.ToObject(); Behaves_like identifier_deserialize_behavior; @@ -51,11 +48,9 @@ public class When_deserializing_minimal protected static JObject _json; protected static Zone _sut; - Because of = () => - { - _json = SampleJson.ZoneMinimal; - _sut = _json.ToObject(); - }; + Establish context = () => _json = SampleJson.ZoneMinimal; + + Because of = () => _sut = _json.ToObject(); Behaves_like identifier_deserialize_behavior; @@ -105,11 +100,7 @@ public class When_serializing_and_deserializing : FixtureContext Establish context = () => _expected = _fixture.Create(); - Because of = () => - { - var serializeObject = JsonConvert.SerializeObject(_expected); - _actual = JObject.FromObject(_expected).ToObject(); - }; + Because of = () => _actual = JObject.FromObject(_expected).ToObject(); It should_retain_all_properties = () => _actual.AsLikeness().ShouldEqual(_expected); } From 7755632b9c74e007f9d0b9a8e020d785c42cd2ef Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 16:31:45 +0100 Subject: [PATCH 04/10] Added zone setting unit tests --- src/CloudFlare.NET/ZoneSettingBase.cs | 2 + .../CloudFlare.NET.Tests.csproj | 1 + .../Serialization/SampleJson.cs | 3 + .../Serialization/ZoneSettingSpec.cs | 60 +++++++++++++++++++ .../Serialization/ZoneSettings.json | 2 +- 5 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs diff --git a/src/CloudFlare.NET/ZoneSettingBase.cs b/src/CloudFlare.NET/ZoneSettingBase.cs index 14cb061..d3e2dfe 100644 --- a/src/CloudFlare.NET/ZoneSettingBase.cs +++ b/src/CloudFlare.NET/ZoneSettingBase.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; + using CloudFlare.NET.Serialization; using Newtonsoft.Json; /// @@ -40,6 +41,7 @@ protected ZoneSettingBase(string id, bool editable, DateTimeOffset? modifiedOn) /// last time this setting was modified. /// [JsonProperty("modified_on")] + [JsonConverter(typeof(IsoDateTimeOffsetConverter))] public DateTimeOffset? ModifiedOn { get; } } } diff --git a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj index 7508b8e..903dd0e 100644 --- a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj @@ -126,6 +126,7 @@ + diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs index 53273d1..e7ecd96 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs @@ -39,5 +39,8 @@ public static TJson Load(string fileName) public static JObject ZoneMinimal => Load(nameof(ZoneMinimal)); public static JArray ZoneSettings => Load(nameof(ZoneSettings)); + + public static JObject ZoneSettingTest1 + => ZoneSettings.Cast().Single(s => s["id"].Value() == "xxx_test1"); } } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs new file mode 100644 index 0000000..997f20b --- /dev/null +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs @@ -0,0 +1,60 @@ +namespace CloudFlare.NET.Serialization.ZoneSettingSpec +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Machine.Specifications; + using Newtonsoft.Json.Linq; + using Ploeh.AutoFixture; + + [Subject(typeof(ZoneSetting<>))] + public class When_serializing : FixtureContext + { + static ZoneSetting _sut; + static JObject _json; + + Establish context = () => _sut = _fixture.Create>(); + + Because of = () => _json = JObject.FromObject(_sut); + + It should_serialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); + + It should_serialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); + + It should_serialize_modified_on = () => _sut.ModifiedOn.ShouldEqual(_json["modified_on"].Value()); + + It should_serialize_value = () => _sut.Value.ShouldEqual(_json["value"].Value()); + } + + [Subject(typeof(ZoneSetting<>))] + public class When_serializing_and_deserializing : FixtureContext + { + static ZoneSetting _expected; + static ZoneSetting _actual; + + Establish context = () => _expected = _fixture.Create>(); + + Because of = () => _actual = JObject.FromObject(_expected).ToObject>(); + + It should_retain_all_properties = () => _actual.AsLikeness().ShouldEqual(_expected); + } + + [Subject(typeof(ZoneSetting<>))] + public class When_deserializing + { + static JObject _json; + static ZoneSetting _sut; + + Establish context = () => _json = SampleJson.ZoneSettingTest1; + + Because of = () => _sut = _json.ToObject>(); + + It should_deserialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); + + It should_deserialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); + + It should_deserialize_modified_on = () => _sut.ModifiedOn.ShouldEqual(_json["modified_on"].Value()); + + It should_deserialize_value = () => _sut.Value.ShouldEqual(_json["value"].Value()); + } +} diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json index 37398b7..29d92b0 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json @@ -205,7 +205,7 @@ { "id": "xxx_test1", "value": "F3FE5A47-B1F8-479B-BB7B-15784F1066EF", - "modified_on": null, + "modified_on": "2001-02-03T04:05:06.789Z", "editable": false }, { From d1b765afc3f9bc5963943739f7905552c3255b9f Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 18:08:40 +0100 Subject: [PATCH 05/10] Added Zone development mode setting unit tests --- .../CloudFlare.NET.Tests.csproj | 1 + .../Serialization/BehaviorTemplates.cs | 30 ++++++++++ .../Serialization/SampleJson.cs | 3 + .../ZoneDevelopmentModeSettingSpec.cs | 58 +++++++++++++++++++ .../Serialization/ZoneSettingSpec.cs | 20 ++----- .../Serialization/ZoneSettings.json | 5 +- 6 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 src/Tests/CloudFlare.NET.Tests/Serialization/ZoneDevelopmentModeSettingSpec.cs diff --git a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj index 903dd0e..7b8be55 100644 --- a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj @@ -125,6 +125,7 @@ + diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/BehaviorTemplates.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/BehaviorTemplates.cs index e3b4aaf..7b5134d 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/BehaviorTemplates.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/BehaviorTemplates.cs @@ -54,6 +54,36 @@ public class ModifiedSerializeBehavior It should_serialize_modified_on_for_ISO8601 = () => _json["modified_on"].ToString().ShouldEndWith("Z"); } + [Behaviors] + public class ZoneSettingDeserializeBehavior + { + protected static JObject _json; + protected static ZoneSettingBase _sut; + + It should_deserialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); + + It should_deserialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); + + It should_deserialize_modified_on = () => _sut.ModifiedOn.ShouldEqual(_json["modified_on"].Value()); + } + + [Behaviors] + public class ZoneSettingSerializeBehavior + { + protected static JObject _json; + protected static ZoneSettingBase _sut; + + It should_serialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); + + It should_serialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); + + It should_serialize_modified_on = + () => _sut.ModifiedOn.GetValueOrDefault().UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK") + .ShouldEqual(_json["modified_on"].Value()); + + It should_serialize_modified_on_for_ISO8601 = () => _json["modified_on"].ToString().ShouldEndWith("Z"); + } + [Behaviors] public class PagedParametersSerializeBehavior where TOrder : struct diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs index e7ecd96..bd0b948 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs @@ -40,6 +40,9 @@ public static TJson Load(string fileName) public static JArray ZoneSettings => Load(nameof(ZoneSettings)); + public static JObject ZoneSettingDevelopmentMode + => ZoneSettings.Cast().Single(s => s["id"].Value() == "development_mode"); + public static JObject ZoneSettingTest1 => ZoneSettings.Cast().Single(s => s["id"].Value() == "xxx_test1"); } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneDevelopmentModeSettingSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneDevelopmentModeSettingSpec.cs new file mode 100644 index 0000000..bbbe6db --- /dev/null +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneDevelopmentModeSettingSpec.cs @@ -0,0 +1,58 @@ +namespace CloudFlare.NET.Serialization.ZoneDevelopmentModeSettingSpec +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Machine.Specifications; + using Newtonsoft.Json.Linq; + using Ploeh.AutoFixture; + + [Subject(typeof(ZoneDevelopmentModeSetting))] + public class When_serializing : FixtureContext + { + protected static ZoneDevelopmentModeSetting _sut; + protected static JObject _json; + + Establish context = () => _sut = _fixture.Create(); + + Because of = () => _json = JObject.FromObject(_sut); + + Behaves_like zone_setting_serialize_behavior; + + It should_serialize_value = () => _sut.Value.ToString().ShouldEqual(_json["value"].Value()); + + It should_serialize_time_remaining + = () => _sut.TimeRemaining.ToString().ShouldEqual(_json["time_remaining"].Value()); + } + + [Subject(typeof(ZoneDevelopmentModeSetting))] + public class When_serializing_and_deserializing : FixtureContext + { + static ZoneDevelopmentModeSetting _expected; + static ZoneDevelopmentModeSetting _actual; + + Establish context = () => _expected = _fixture.Create(); + + Because of = () => _actual = JObject.FromObject(_expected).ToObject(); + + It should_retain_all_properties = () => _actual.AsLikeness().ShouldEqual(_expected); + } + + [Subject(typeof(ZoneDevelopmentModeSetting))] + public class When_deserializing + { + protected static JObject _json; + protected static ZoneDevelopmentModeSetting _sut; + + Establish context = () => _json = SampleJson.ZoneSettingDevelopmentMode; + + Because of = () => _sut = _json.ToObject(); + + Behaves_like zone_setting_deserialize_behavior; + + It should_deserialize_value = () => _sut.Value.ToString().ShouldEqual(_json["value"].Value()); + + It should_deserialize_time_remaining + = () => _sut.TimeRemaining.ToString().ShouldEqual(_json["time_remaining"].Value()); + } +} diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs index 997f20b..276f8a5 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingSpec.cs @@ -10,18 +10,14 @@ [Subject(typeof(ZoneSetting<>))] public class When_serializing : FixtureContext { - static ZoneSetting _sut; - static JObject _json; + protected static ZoneSetting _sut; + protected static JObject _json; Establish context = () => _sut = _fixture.Create>(); Because of = () => _json = JObject.FromObject(_sut); - It should_serialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); - - It should_serialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); - - It should_serialize_modified_on = () => _sut.ModifiedOn.ShouldEqual(_json["modified_on"].Value()); + Behaves_like zone_setting_serialize_behavior; It should_serialize_value = () => _sut.Value.ShouldEqual(_json["value"].Value()); } @@ -42,18 +38,14 @@ public class When_serializing_and_deserializing : FixtureContext [Subject(typeof(ZoneSetting<>))] public class When_deserializing { - static JObject _json; - static ZoneSetting _sut; + protected static JObject _json; + protected static ZoneSetting _sut; Establish context = () => _json = SampleJson.ZoneSettingTest1; Because of = () => _sut = _json.ToObject>(); - It should_deserialize_id = () => _sut.Id.ShouldEqual(_json["id"].Value()); - - It should_deserialize_editable = () => _sut.Editable.ShouldEqual(_json["editable"].Value()); - - It should_deserialize_modified_on = () => _sut.ModifiedOn.ShouldEqual(_json["modified_on"].Value()); + Behaves_like zone_setting_deserialize_behavior; It should_deserialize_value = () => _sut.Value.ShouldEqual(_json["value"].Value()); } diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json index 29d92b0..ee36230 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettings.json @@ -38,8 +38,9 @@ { "id": "development_mode", "value": "off", - "modified_on": null, - "editable": true + "modified_on": "2001-02-03T04:05:06.789Z", + "editable": true, + "time_remaining": 1234 }, { "id": "edge_cache_ttl", From 4aea6523e18d3e0e75e24449457c28cbdb1d6dba Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 18:21:22 +0100 Subject: [PATCH 06/10] Fixed missing ConfigureAwait(false) --- src/CloudFlare.NET/HttpClientExtensions.cs | 2 +- src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs | 3 ++- src/cloudflare.net.sln.DotSettings | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/CloudFlare.NET/HttpClientExtensions.cs b/src/CloudFlare.NET/HttpClientExtensions.cs index a069aff..b400747 100644 --- a/src/CloudFlare.NET/HttpClientExtensions.cs +++ b/src/CloudFlare.NET/HttpClientExtensions.cs @@ -102,7 +102,7 @@ public static async Task GetCloudFlareResultAsync( where T : class { CloudFlareResponse cloudFlareResponse = - await client.GetCloudFlareResponseAsync(uri, auth, cancellationToken); + await client.GetCloudFlareResponseAsync(uri, auth, cancellationToken).ConfigureAwait(false); return cloudFlareResponse.Result; } diff --git a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs index ea68f05..ccdb77f 100644 --- a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs +++ b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs @@ -29,7 +29,8 @@ public static async Task> GetAllZoneSettingsAsync( Uri uri = new Uri(CloudFlareConstants.BaseUri, $"zones/{zoneId}/settings"); - JArray jsonSettings = await client.GetCloudFlareResultAsync(uri, auth, cancellationToken); + JArray jsonSettings = await client.GetCloudFlareResultAsync(uri, auth, cancellationToken) + .ConfigureAwait(false); return GetZoneSetting(jsonSettings.Cast()); } diff --git a/src/cloudflare.net.sln.DotSettings b/src/cloudflare.net.sln.DotSettings index 6727876..27c8026 100644 --- a/src/cloudflare.net.sln.DotSettings +++ b/src/cloudflare.net.sln.DotSettings @@ -1,4 +1,5 @@  + ERROR True System System.Collections.Generic From 70abfcc4f859d46da3fa1963971d135746be4d41 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 21:04:13 +0100 Subject: [PATCH 07/10] Test error condition when identifying zone settings --- .../ZoneSettingsHttpClientExtensions.cs | 2 +- .../CloudFlare.NET.Tests.csproj | 1 + .../DnsRecordClientSpec.cs | 2 +- .../Serialization/SampleJson.cs | 2 ++ .../Serialization/ZoneSettingsErred.json | 7 +++++ .../ZoneSettingsClientSpec.cs | 29 ++++++++++++++++++- 6 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingsErred.json diff --git a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs index ccdb77f..5e041f7 100644 --- a/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs +++ b/src/CloudFlare.NET/ZoneSettingsHttpClientExtensions.cs @@ -45,7 +45,7 @@ private static IEnumerable GetZoneSetting(IEnumerable JToken idToken = json["id"]; if (idToken == null) { - throw new ArgumentException($"The setting does not have an id property.\n{json}", nameof(json)); + throw new InvalidOperationException($"The setting does not have an id property.\n{json}"); } string id = idToken.Value(); diff --git a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj index 7b8be55..1317787 100644 --- a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj @@ -142,6 +142,7 @@ + diff --git a/src/Tests/CloudFlare.NET.Tests/DnsRecordClientSpec.cs b/src/Tests/CloudFlare.NET.Tests/DnsRecordClientSpec.cs index 6efc45d..7f015b5 100644 --- a/src/Tests/CloudFlare.NET.Tests/DnsRecordClientSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/DnsRecordClientSpec.cs @@ -175,7 +175,7 @@ public class When_getting_all_dns_records_with_parameters : GetAllResultsContext } [Subject("DnsRecordClient")] - public class When_getting_dnsRecords_and_an_error_occurs : ErredRequestContext + public class When_getting_dns_records_and_an_error_occurs : ErredRequestContext { static IdentifierTag _zoneId; static Uri _expectedRequestUri; diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs index bd0b948..266770d 100644 --- a/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/SampleJson.cs @@ -40,6 +40,8 @@ public static TJson Load(string fileName) public static JArray ZoneSettings => Load(nameof(ZoneSettings)); + public static JArray ZoneSettingsErred => Load(nameof(ZoneSettingsErred)); + public static JObject ZoneSettingDevelopmentMode => ZoneSettings.Cast().Single(s => s["id"].Value() == "development_mode"); diff --git a/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingsErred.json b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingsErred.json new file mode 100644 index 0000000..776555a --- /dev/null +++ b/src/Tests/CloudFlare.NET.Tests/Serialization/ZoneSettingsErred.json @@ -0,0 +1,7 @@ +[ + { + "value": "This setting has no id.", + "modified_on": "2001-02-03T04:05:06.789Z", + "editable": false + } +] \ No newline at end of file diff --git a/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs b/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs index 5894bbd..9394c59 100644 --- a/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs +++ b/src/Tests/CloudFlare.NET.Tests/ZoneSettingsClientSpec.cs @@ -48,7 +48,7 @@ It should_request_the_zone_settings_endpoint } [Subject("ZoneSettingsClient")] - public class When_getting_dnsRecords_and_an_error_occurs : ErredRequestContext + public class When_getting_zone_settings_and_an_error_occurs : ErredRequestContext { static IdentifierTag _zoneId; static Uri _expectedRequestUri; @@ -70,4 +70,31 @@ public class When_getting_dnsRecords_and_an_error_occurs : ErredRequestContext It should_request_the_zone_settings_endpoint = () => _handler.Request.RequestUri.ShouldEqual(_expectedRequestUri); } + + [Subject("ZoneSettingsClient")] + public class When_getting_zone_settings_and_a_setting_has_no_id : RequestContext + { + static IdentifierTag _zoneId; + static Uri _expectedRequestUri; + static Exception _exception; + + Establish context = () => + { + var response = new CloudFlareResponse(true, SampleJson.ZoneSettingsErred); + _zoneId = _fixture.Create(); + _handler.SetResponseContent(response); + _expectedRequestUri = new Uri(CloudFlareConstants.BaseUri, $"zones/{_zoneId}/settings"); + }; + + Because of = () => _exception = Catch.Exception( + () => _sut.GetAllZoneSettingsAsync(_zoneId, _auth).Await().AsTask.Result.ToList()); + + It should_throw_an_InvalidOperationException = + () => _exception.ShouldBeOfExactType(); + + Behaves_like authenticated_request_behaviour; + + It should_request_the_zone_settings_endpoint + = () => _handler.Request.RequestUri.ShouldEqual(_expectedRequestUri); + } } From 4dfb417cea85677abe6aae0110be136f8c32c3e7 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 21:13:52 +0100 Subject: [PATCH 08/10] Updated the NuGet paackages --- .../CloudFlare.NET.Tests.csproj | 16 ++++++++-------- src/Tests/CloudFlare.NET.Tests/app.config | 2 +- src/Tests/CloudFlare.NET.Tests/packages.config | 10 +++++----- .../CloudFlare.NET.Yaml.Tests.csproj | 16 ++++++++-------- src/Tests/CloudFlare.NET.Yaml.Tests/app.config | 2 +- .../CloudFlare.NET.Yaml.Tests/packages.config | 8 ++++---- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj index 1317787..d39d879 100644 --- a/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Tests/CloudFlare.NET.Tests.csproj @@ -61,20 +61,20 @@ ..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll True - - ..\..\packages\AutoFixture.3.31.3\lib\net40\Ploeh.AutoFixture.dll + + ..\..\packages\AutoFixture.3.33.0\lib\net40\Ploeh.AutoFixture.dll True - - ..\..\packages\AutoFixture.AutoMoq.3.31.1\lib\net40\Ploeh.AutoFixture.AutoMoq.dll + + ..\..\packages\AutoFixture.AutoMoq.3.33.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll True - - ..\..\packages\AutoFixture.Xunit.3.31.0\lib\net40\Ploeh.AutoFixture.Xunit.dll + + ..\..\packages\AutoFixture.Xunit.3.33.0\lib\net40\Ploeh.AutoFixture.Xunit.dll True - - ..\..\packages\SemanticComparison.3.31.0\lib\net40\Ploeh.SemanticComparison.dll + + ..\..\packages\SemanticComparison.3.33.0\lib\net40\Ploeh.SemanticComparison.dll True diff --git a/src/Tests/CloudFlare.NET.Tests/app.config b/src/Tests/CloudFlare.NET.Tests/app.config index 99f15bb..a1f1329 100644 --- a/src/Tests/CloudFlare.NET.Tests/app.config +++ b/src/Tests/CloudFlare.NET.Tests/app.config @@ -12,7 +12,7 @@ - + diff --git a/src/Tests/CloudFlare.NET.Tests/packages.config b/src/Tests/CloudFlare.NET.Tests/packages.config index 717c53d..3b8a558 100644 --- a/src/Tests/CloudFlare.NET.Tests/packages.config +++ b/src/Tests/CloudFlare.NET.Tests/packages.config @@ -1,13 +1,13 @@  - - - + + + - + @@ -17,7 +17,7 @@ - + diff --git a/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlare.NET.Yaml.Tests.csproj b/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlare.NET.Yaml.Tests.csproj index 8e3c738..001ea10 100644 --- a/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlare.NET.Yaml.Tests.csproj +++ b/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlare.NET.Yaml.Tests.csproj @@ -61,20 +61,20 @@ ..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll True - - ..\..\packages\AutoFixture.3.31.3\lib\net40\Ploeh.AutoFixture.dll + + ..\..\packages\AutoFixture.3.33.0\lib\net40\Ploeh.AutoFixture.dll True - - ..\..\packages\AutoFixture.AutoMoq.3.31.1\lib\net40\Ploeh.AutoFixture.AutoMoq.dll + + ..\..\packages\AutoFixture.AutoMoq.3.33.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll True - - ..\..\packages\AutoFixture.Xunit.3.31.0\lib\net40\Ploeh.AutoFixture.Xunit.dll + + ..\..\packages\AutoFixture.Xunit.3.33.0\lib\net40\Ploeh.AutoFixture.Xunit.dll True - - ..\..\packages\SemanticComparison.3.31.0\lib\net40\Ploeh.SemanticComparison.dll + + ..\..\packages\SemanticComparison.3.33.0\lib\net40\Ploeh.SemanticComparison.dll True diff --git a/src/Tests/CloudFlare.NET.Yaml.Tests/app.config b/src/Tests/CloudFlare.NET.Yaml.Tests/app.config index 3516892..769578c 100644 --- a/src/Tests/CloudFlare.NET.Yaml.Tests/app.config +++ b/src/Tests/CloudFlare.NET.Yaml.Tests/app.config @@ -12,7 +12,7 @@ - + diff --git a/src/Tests/CloudFlare.NET.Yaml.Tests/packages.config b/src/Tests/CloudFlare.NET.Yaml.Tests/packages.config index 4041af2..8df4fb8 100644 --- a/src/Tests/CloudFlare.NET.Yaml.Tests/packages.config +++ b/src/Tests/CloudFlare.NET.Yaml.Tests/packages.config @@ -1,8 +1,8 @@  - - - + + + @@ -12,7 +12,7 @@ - + From 13e3fcdd87b0a84c27a6c16bcb3fb5eadf481b81 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 21:26:45 +0100 Subject: [PATCH 09/10] Fixed test without subject --- .../CloudFlare.NET.Yaml.Tests/CloudFlareClientExtensionsSpec.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlareClientExtensionsSpec.cs b/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlareClientExtensionsSpec.cs index 9b0143c..98ad341 100644 --- a/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlareClientExtensionsSpec.cs +++ b/src/Tests/CloudFlare.NET.Yaml.Tests/CloudFlareClientExtensionsSpec.cs @@ -4,12 +4,12 @@ using System.Collections.Generic; using System.Linq; using System.Threading; - using System.Threading.Tasks; using Machine.Specifications; using Moq; using Ploeh.AutoFixture; using It = Machine.Specifications.It; + [Subject(typeof(CloudFlareClientExtensions))] public class When_getting_all_the_zone_data : FixtureContext { static Zone _expectedZone; From 73a240257e6530e79a5a3ff210a1b0d608a7f974 Mon Sep 17 00:00:00 2001 From: James Skimming Date: Mon, 7 Sep 2015 22:01:36 +0100 Subject: [PATCH 10/10] Enabled Automatic deployments --- appveyor.yml | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d6f5d4e..4913e41 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -56,7 +56,8 @@ build: verbosity: minimal before_build: - - nuget restore src\cloudflare.net.sln + - appveyor DownloadFile https://raw.githubusercontent.com/appveyor/ci/master/scripts/nuget-restore.cmd + - nuget-restore src\cloudflare.net.sln - ps: gitversion /l console /output buildserver /updateAssemblyInfo after_build: @@ -78,6 +79,27 @@ after_test: | %coveralls_exe% --opencover src\TestResults\Test.Coverage.xml appveyor PushArtifact src\TestResults\Specifications.html -FileName "Specifications_%GitVersion_FullSemVer%.html" +#---------------------------------# +# deployment configuration # +#---------------------------------# + +deploy: + # Deploy to NuGet when tags are applied to the master branch. + - provider: NuGet + api_key: + secure: YE/e/aOqNtjXWWk+IKzSl+HtDzrSE1tkaUPGQtzg6mA5chWEz53GJ9WNF/qdXgX1 + on: + branch: master + appveyor_repo_tag: true + + # Deploy to GitHub when tags are applied to the master branch. + - provider: GitHub + auth_token: + secure: HsYB0bln/Vj2trBco3Z3y9tG8sN8kguyXMogs9wSV65e0qRLl+BABxBxt3Q+CX9y + on: + branch: master + appveyor_repo_tag: true + #---------------------------------# # global handlers # #---------------------------------# @@ -98,5 +120,5 @@ notifications: auth_token: secure: AkSNuuHmfzAFp2+Oq00NRQFOfrXl4ue08SHx0FC2WTeXSiZv8uVKI3ZBWns7HTcV channel: cloudflare_net + on_build_success: false on_build_status_changed: true -