diff --git a/EasyPost.Integration/TestUtils.cs b/EasyPost.Integration/TestUtils.cs index fe205d642..7a437abff 100644 --- a/EasyPost.Integration/TestUtils.cs +++ b/EasyPost.Integration/TestUtils.cs @@ -116,7 +116,7 @@ public VCR(string? testCassettesFolder = null, ApiKey apiKey = ApiKey.Test) Censors = censors, SimulateDelay = false, ManualDelay = 0, - ValidTimeFrame = TimeFrame.Months6, + ValidTimeFrame = TimeFrame.Months12, WhenExpired = ExpirationActions.Warn }; _vcr = new EasyVCR.VCR(advancedSettings); @@ -151,7 +151,7 @@ internal Client SetUpTest(string cassetteName, Func // set up cassette Cassette cassette = new(_testCassettesFolder, cassetteName, new CassetteOrder.Alphabetical()); - // add cassette to vcr + // add cassette to vcr _vcr.Insert(cassette); string filePath = Path.Combine(_testCassettesFolder, cassetteName + ".json"); diff --git a/EasyPost.Tests/Fixture.cs b/EasyPost.Tests/Fixture.cs index d397e8135..7ecc15e7d 100644 --- a/EasyPost.Tests/Fixture.cs +++ b/EasyPost.Tests/Fixture.cs @@ -42,6 +42,9 @@ public static byte[] EventBody internal static string WebhookUrl => GetFixtureStructure().WebhookUrl; + // TODO: Add WebhookCustomHeaders + // TODO: Pull in updated examples submodule, update all above references to webhook fixture data + internal static Dictionary BasicCarrierAccount => GetFixtureStructure().CarrierAccounts.Basic; internal static Dictionary BasicCustomsInfo => GetFixtureStructure().CustomsInfos.Basic; diff --git a/EasyPost.Tests/ServicesTests/WebhookServiceTest.cs b/EasyPost.Tests/ServicesTests/WebhookServiceTest.cs index 407d0c19e..c3ac04737 100644 --- a/EasyPost.Tests/ServicesTests/WebhookServiceTest.cs +++ b/EasyPost.Tests/ServicesTests/WebhookServiceTest.cs @@ -42,6 +42,7 @@ public async Task TestCreate() string url = $"https://example.com/create/{TestUtils.NetVersion}"; + // TODO: Add webhook_secret and custom_headers params Webhook webhook = await Client.Webhook.Create(new Dictionary { { "url", url } }); CleanUpAfterTest(webhook.Id); @@ -162,6 +163,7 @@ public async Task TestUpdate() Thread.Sleep(10000); // Wait enough time to process } + // TODO: Add webhook_secret and custom_headers params webhook = await Client.Webhook.Update(webhook.Id, new Dictionary()); Assert.IsType(webhook); diff --git a/EasyPost.Tests/TestUtils.cs b/EasyPost.Tests/TestUtils.cs index 1656a6b0c..94bf1c49d 100644 --- a/EasyPost.Tests/TestUtils.cs +++ b/EasyPost.Tests/TestUtils.cs @@ -127,7 +127,7 @@ public VCR(string? testCassettesFolder = null, ApiKey apiKey = ApiKey.Test) Censors = censors, SimulateDelay = false, ManualDelay = 0, - ValidTimeFrame = TimeFrame.Months6, + ValidTimeFrame = TimeFrame.Months12, WhenExpired = ExpirationActions.Warn }; _vcr = new EasyVCR.VCR(advancedSettings); @@ -191,81 +191,81 @@ public class MockRequestMatchRules(Method method, string resourceRegex) { internal Method Method { get; set; } = method; - internal string ResourceRegex { get; set; } = resourceRegex; - } + internal string ResourceRegex { get; set; } = resourceRegex; + } - public class MockRequestResponseInfo(HttpStatusCode statusCode, string? content = null, object? data = null) + public class MockRequestResponseInfo(HttpStatusCode statusCode, string? content = null, object? data = null) { internal HttpStatusCode StatusCode { get; set; } = statusCode; - internal string? Content { get; set; } = content ?? JsonSerialization.ConvertObjectToJson(data); -} + internal string? Content { get; set; } = content ?? JsonSerialization.ConvertObjectToJson(data); + } -public class MockRequest -{ - public MockRequestMatchRules MatchRules { get; } + public class MockRequest + { + public MockRequestMatchRules MatchRules { get; } - public MockRequestResponseInfo ResponseInfo { get; } + public MockRequestResponseInfo ResponseInfo { get; } - internal MockRequest(MockRequestMatchRules matchRules, MockRequestResponseInfo responseInfo) - { - MatchRules = matchRules; - ResponseInfo = responseInfo; - } -} + internal MockRequest(MockRequestMatchRules matchRules, MockRequestResponseInfo responseInfo) + { + MatchRules = matchRules; + ResponseInfo = responseInfo; + } + } -internal sealed class MockClient : Client -{ - private readonly List _mockRequests = new(); + internal sealed class MockClient : Client + { + private readonly List _mockRequests = new(); #pragma warning disable CS1998 - public override async Task ExecuteRequest(HttpRequestMessage request, CancellationToken cancellationToken) + public override async Task ExecuteRequest(HttpRequestMessage request, CancellationToken cancellationToken) #pragma warning restore CS1998 - { - MockRequest? mockRequest = FindMatchingMockRequest(request); + { + MockRequest? mockRequest = FindMatchingMockRequest(request); - if (mockRequest == null) - { + if (mockRequest == null) + { #pragma warning disable CA2201 - throw new Exception("No matching mock request found"); + throw new Exception("No matching mock request found"); #pragma warning restore CA2201 - } + } - return new HttpResponseMessage - { - Content = new StringContent(mockRequest.ResponseInfo.Content), - StatusCode = mockRequest.ResponseInfo.StatusCode, - }; - } + return new HttpResponseMessage + { + Content = new StringContent(mockRequest.ResponseInfo.Content), + StatusCode = mockRequest.ResponseInfo.StatusCode, + }; + } - internal MockClient(EasyPostClient client) : base(new ClientConfiguration(client.ApiKeyInUse) - { - ApiBase = client.ApiBaseInUse, - CustomHttpClient = client.CustomHttpClient, - }) - { - } + internal MockClient(EasyPostClient client) : base(new ClientConfiguration(client.ApiKeyInUse) + { + ApiBase = client.ApiBaseInUse, + CustomHttpClient = client.CustomHttpClient, + }) + { + } - internal void AddMockRequest(MockRequest mockRequest) => _mockRequests.Add(mockRequest); + internal void AddMockRequest(MockRequest mockRequest) => _mockRequests.Add(mockRequest); - internal void AddMockRequests(IEnumerable mockRequests) => _mockRequests.AddRange(mockRequests); + internal void AddMockRequests(IEnumerable mockRequests) => _mockRequests.AddRange(mockRequests); - private MockRequest? FindMatchingMockRequest(HttpRequestMessage request) => _mockRequests.FirstOrDefault(mock => mock.MatchRules.Method.HttpMethod == request.Method && EndpointMatches(request.RequestUri.AbsoluteUri, mock.MatchRules.ResourceRegex)); + private MockRequest? FindMatchingMockRequest(HttpRequestMessage request) => _mockRequests.FirstOrDefault(mock => mock.MatchRules.Method.HttpMethod == request.Method && EndpointMatches(request.RequestUri.AbsoluteUri, mock.MatchRules.ResourceRegex)); - private static bool EndpointMatches(string endpoint, string pattern) - { - try - { - return Regex.IsMatch(endpoint, - pattern, - RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline, - TimeSpan.FromMilliseconds(250)); - } - catch (RegexMatchTimeoutException) - { - return false; + private static bool EndpointMatches(string endpoint, string pattern) + { + try + { + return Regex.IsMatch(endpoint, + pattern, + RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline, + TimeSpan.FromMilliseconds(250)); + } + catch (RegexMatchTimeoutException) + { + return false; + } + } } } -} - } } diff --git a/EasyPost/Parameters/Webhook/Create.cs b/EasyPost/Parameters/Webhook/Create.cs index 2e7627abd..bda13df0e 100644 --- a/EasyPost/Parameters/Webhook/Create.cs +++ b/EasyPost/Parameters/Webhook/Create.cs @@ -25,6 +25,8 @@ public class Create : BaseParameters, IWebhookParameter [TopLevelRequestParameter(Necessity.Required, "url")] public string? Url { get; set; } + // TODO: Add custom_headers + #endregion } } diff --git a/EasyPost/Parameters/Webhook/Update.cs b/EasyPost/Parameters/Webhook/Update.cs index 8178d962e..9ebc89446 100644 --- a/EasyPost/Parameters/Webhook/Update.cs +++ b/EasyPost/Parameters/Webhook/Update.cs @@ -19,6 +19,8 @@ public class Update : BaseParameters [TopLevelRequestParameter(Necessity.Optional, "webhook_secret")] public string? Secret { get; set; } + // TODO: Add custom_headers + #endregion } }