Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions packages/table-rate-shipping/config/shipping-tables.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

use Lunar\Shipping\Resolvers\PostcodeResolver;

return [
'enabled' => env('LUNAR_SHIPPING_TABLES_ENABLED', true),

Expand All @@ -9,4 +11,9 @@
* or 'highest' to select the highest tax rate in the cart
*/
'shipping_rate_tax_calculation' => 'default',

'resolvers' => [
'postcode' => PostcodeResolver::class,
],

];
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Lunar\Shipping\Interfaces;

use Illuminate\Support\Collection;

interface PostcodeResolverInterface
{
public function getParts($postcode): Collection;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
namespace Lunar\Shipping\Resolvers;

use Illuminate\Support\Collection;
use Lunar\Shipping\Interfaces\PostcodeResolverInterface;

class PostcodeResolver
class PostcodeResolver implements PostcodeResolverInterface
{
public function getParts($postcode): Collection
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ public function get(): Collection
if ($this->postcodeLookup) {
$builder->orWhere(function ($qb) {
$qb->whereHas('postcodes', function ($query) {
$postcodeParts = (new PostcodeResolver)->getParts(
$postcodeResolver = config('lunar.shipping-tables.resolvers.postcode', PostcodeResolver::class);

$postcodeParts = (new $postcodeResolver)->getParts(
$this->postcodeLookup->postcode
);
$query->whereIn('postcode', $postcodeParts);
Expand Down
22 changes: 22 additions & 0 deletions tests/shipping/Stubs/Resolvers/TestCustomPostcodeResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Lunar\Tests\Shipping\Stubs\Resolvers;

use Illuminate\Support\Collection;
use Lunar\Shipping\Interfaces\PostcodeResolverInterface;

class TestCustomPostcodeResolver implements PostcodeResolverInterface
{
public function getParts($postcode): Collection
{
$postcode = str_replace(' ', '', strtoupper($postcode));

return collect([
$postcode,
substr($postcode, 0, 1).'*',
substr($postcode, 0, 2).'*',
substr($postcode, 0, 3).'*',
substr($postcode, 0, 4).'*',
])->filter()->unique()->values();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-driver', 'shipping-driver-collection');

use Lunar\DataTypes\ShippingOption;
use Lunar\Models\Currency;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Drivers/ShippingMethods/FlatRateTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-driver', 'shipping-driver-flatrate');

use Lunar\DataTypes\ShippingOption;
use Lunar\Models\Currency;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-driver', 'shipping-driver-freeshiping');

use Lunar\DataTypes\ShippingOption;
use Lunar\Models\Currency;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Drivers/ShippingMethods/ShipByTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-driver', 'shipping-driver-shipby');

use Lunar\DataTypes\ShippingOption;
use Lunar\Models\Currency;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Managers/ShippingManagerTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-manager');

use Lunar\Models\CartAddress;
use Lunar\Models\Country;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Models/ShippingZonePostcodeTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-zone-postcode');

use Lunar\Shipping\Models\ShippingZone;
use Lunar\Shipping\Models\ShippingZonePostcode;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Observers/OrderObserverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
use Lunar\Models\Order;
use Lunar\Shipping\Observers\OrderObserver;

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-order');
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
uses(\Lunar\Tests\Shipping\TestUtils::class);

Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Resolvers/PostcodeResolverTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-postcode');

use Lunar\Shipping\Resolvers\PostcodeResolver;

Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Resolvers/ShippingOptionResolverTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-option');

use Lunar\Models\CartAddress;
use Lunar\Models\Country;
Expand Down
3 changes: 2 additions & 1 deletion tests/shipping/Unit/Resolvers/ShippingRateResolverTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-rate');

use Lunar\Models\CartAddress;
use Lunar\Models\Country;
Expand Down
47 changes: 46 additions & 1 deletion tests/shipping/Unit/Resolvers/ShippingZoneResolverTest.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
<?php

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-zone');

use Illuminate\Support\Facades\Config;
use Lunar\Models\Country;
use Lunar\Models\State;
use Lunar\Shipping\DataTransferObjects\PostcodeLookup;
use Lunar\Shipping\Models\ShippingZone;
use Lunar\Shipping\Resolvers\ShippingZoneResolver;
use Lunar\Tests\Shipping\Stubs\Resolvers\TestCustomPostcodeResolver;

uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);

Expand Down Expand Up @@ -109,3 +112,45 @@

expect($zones->first()->id)->toEqual($shippingZone->id);
});

test('can use custom postcode resolver', function () {
$country = Country::factory()->create();

$shippingZone = ShippingZone::factory()->create([
'type' => 'postcodes',
]);

$shippingZone->countries()->attach($country);

$shippingZone->postcodes()->createMany([[
'postcode' => '390*',
], [
'postcode' => '391*',
]]);

$shippingZone2 = ShippingZone::factory()->create([
'type' => 'postcodes',
]);

$shippingZone2->countries()->attach($country);

$shippingZone2->postcodes()->create([
'postcode' => '393*',
]);

expect($shippingZone->refresh()->countries)->toHaveCount(1);
expect($shippingZone->refresh()->postcodes)->toHaveCount(2);

$postcode = new PostcodeLookup(
$country,
'39100'
);

Config::set('lunar.shipping-tables.resolvers.postcode', TestCustomPostcodeResolver::class);

$zones = (new ShippingZoneResolver)->postcode($postcode)->get();

expect($zones)->toHaveCount(1);

expect($zones->first()->id)->toEqual($shippingZone->id);
})->group('shipping-postcode');
5 changes: 3 additions & 2 deletions tests/shipping/Unit/ShippingModifierTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
use Lunar\Shipping\Models\ShippingMethod;
use Lunar\Shipping\Models\ShippingZone;

uses(\Lunar\Tests\Shipping\TestCase::class);
uses(\Lunar\Tests\Shipping\TestCase::class)
->group('shipping', 'shipping-modifier');
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
uses(\Lunar\Tests\Shipping\TestUtils::class);

Expand Down Expand Up @@ -76,4 +77,4 @@
$option = $cart->refresh()->getShippingOption();

expect($option->price->value)->toBe(0);
})->group('shipping-modifier');
});