Skip to content

Commit

Permalink
PBL-9276 Orders Missed When Filtered by UTC Date/Time (#66)
Browse files Browse the repository at this point in the history
* PBL-9276 Pass dates_are_gmt : "1" when get orders by dates

* PBL-9276 Update package version to 1.11.7-alpha.1

* PBL-9276 Add TODOs

* PBL-9276 [v.1.11.8-alpha.1] Extract OrdersFiltersBuilder; add unit tests
  • Loading branch information
maxim-skuvault authored Dec 12, 2024
1 parent 64c1687 commit 5041b32
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 11 deletions.
8 changes: 1 addition & 7 deletions src/WooCommerceAccess/ApiServices/OrdersApiService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,7 @@ public OrdersApiService(WApiV3.WCObject wcObjectApiV3)

public async Task< IEnumerable< WooCommerceOrder > > GetOrdersAsync( DateTime startDateUtc, DateTime endDateUtc, int pageSize, string url, Mark mark )
{
const string dateFilterAfter = "modified_after";
const string dateFilterBefore = "modified_before";
var orderFilters = new Dictionary< string, string >
{
{ dateFilterAfter, startDateUtc.RoundDateDownToTopOfMinute().ToString( "o" ) },
{ dateFilterBefore, endDateUtc.RoundDateUpToTopOfMinute().ToString( "o" ) }
};
var orderFilters = OrdersFiltersBuilder.CreateModifiedDateRangeFilters(startDateUtc, endDateUtc);
return await this.CollectOrdersFromAllPagesAsync( orderFilters, pageSize, url, mark ).ConfigureAwait( false );
}

Expand Down
28 changes: 28 additions & 0 deletions src/WooCommerceAccess/Helpers/OrdersFiltersBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;

namespace WooCommerceAccess.Helpers
{
public static class OrdersFiltersBuilder
{
public const string DatesAreGmt = "dates_are_gmt";

public static Dictionary<string, string> CreateModifiedDateRangeFilters( DateTime startDate, DateTime endDate )
{
const string dateFilterAfter = "modified_after";
const string dateFilterBefore = "modified_before";
var orderFilters = new Dictionary< string, string >
{
//Sortable "s" format: https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-sortable-s-format-specifier
{ dateFilterAfter, startDate.RoundDateDownToTopOfMinute().ToString( "s" ) },
{ dateFilterBefore, endDate.RoundDateUpToTopOfMinute().ToString( "s" ) }
};
if ( startDate.Kind == DateTimeKind.Utc && endDate.Kind == DateTimeKind.Utc )
{
orderFilters.Add( DatesAreGmt, "1" );
}

return orderFilters;
}
}
}
8 changes: 4 additions & 4 deletions src/WooCommerceAccess/WooCommerceAccess.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
<PackageLicenseUrl>https://github.com/skuvault/wooCommerceAccess/blob/master/LICENSE</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/skuvault/wooCommerceAccess</PackageProjectUrl>
<RepositoryUrl>https://github.com/skuvault-integrations/wooCommerceAccess.git</RepositoryUrl>
<Version>1.11.6</Version>
<Version>1.11.8</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<AssemblyVersion>1.11.6.0</AssemblyVersion>
<FileVersion>1.11.6.0</FileVersion>
<AssemblyVersion>1.11.8.0</AssemblyVersion>
<FileVersion>1.11.8.0</FileVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<RepositoryType>git</RepositoryType>
<PackageVersion>1.11.6</PackageVersion>
<PackageVersion>1.11.8-alpha.1</PackageVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
36 changes: 36 additions & 0 deletions src/WooCommerceTests/Helpers/OrdersFiltersBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;
using NUnit.Framework;
using WooCommerceAccess.Helpers;

namespace WooCommerceTests.Helpers
{
public class OrdersFiltersBuilderTests
{
[ Test ]
public void CreateModifiedDateRangeFilters_ShouldSetDatesAreGmtToTrue_WhenBothDatesAreUtc()
{
var startDate = new DateTime(2001, 1, 1, 1, 1, 1, DateTimeKind.Utc);
var endDate = new DateTime(2001, 1, 1, 1, 1, 1, DateTimeKind.Utc);

var result = OrdersFiltersBuilder.CreateModifiedDateRangeFilters(startDate, endDate);

Assert.That( result[OrdersFiltersBuilder.DatesAreGmt], Is.EqualTo( "1" ) );
}

[ TestCase( DateTimeKind.Utc, DateTimeKind.Unspecified ) ]
[ TestCase( DateTimeKind.Unspecified, DateTimeKind.Utc ) ]
[ TestCase( DateTimeKind.Unspecified, DateTimeKind.Unspecified ) ]
[ TestCase( DateTimeKind.Utc, DateTimeKind.Local ) ]
[ TestCase( DateTimeKind.Local, DateTimeKind.Utc ) ]
[ TestCase( DateTimeKind.Local, DateTimeKind.Local ) ]
public void CreateModifiedDateRangeFilters_ShouldNotSetDatesAreGmtToTrue_WhenOneDateIsNotUtc( DateTimeKind startDateKind, DateTimeKind endDateKind )
{
var startDate = new DateTime(2001, 1, 1, 1, 1, 1, startDateKind);
var endDate = new DateTime(2001, 1, 1, 1, 1, 1, endDateKind);

var result = OrdersFiltersBuilder.CreateModifiedDateRangeFilters(startDate, endDate);

Assert.That( result.ContainsKey( OrdersFiltersBuilder.DatesAreGmt ), Is.False );
}
}
}
1 change: 1 addition & 0 deletions src/WooCommerceTests/WooCommerceTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<Compile Include="BatchListTests.cs" />
<Compile Include="Helpers\DateTimeHelpersTests.cs" />
<Compile Include="Helpers\LoggingHelperTests.cs" />
<Compile Include="Helpers\OrdersFiltersBuilderTests.cs" />
<Compile Include="Helpers\UrlExtensionsTests.cs" />
<Compile Include="Mappers\OrderMapperTests.cs" />
<Compile Include="SettingsServiceTests.cs" />
Expand Down

0 comments on commit 5041b32

Please sign in to comment.