Skip to content

Commit 5869def

Browse files
committed
Copy over the tests
1 parent b8cf953 commit 5869def

File tree

12 files changed

+339
-51
lines changed

12 files changed

+339
-51
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tabs:
2+
main:
3+
fields: { }
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,9 @@
1-
title: Product
21
tabs:
32
main:
4-
display: Main
5-
fields:
3+
sections:
64
-
7-
handle: description
8-
field:
9-
restrict: false
10-
automatic_line_breaks: true
11-
automatic_links: false
12-
escape_markup: false
13-
smartypants: false
14-
type: markdown
15-
localizable: false
16-
listable: hidden
17-
display: Description
18-
sidebar:
19-
display: Sidebar
20-
fields:
21-
-
22-
handle: price
23-
field:
24-
read_only: false
25-
type: money
26-
localizable: false
27-
listable: hidden
28-
display: Price
29-
save_zero_value: true
5+
fields:
6+
-
7+
handle: product_variants
8+
field:
9+
type: product_variants
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tabs:
2+
main:
3+
fields: { }

src/Http/Controllers/DigitalProducts/DownloadController.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class DownloadController extends Controller
1414
{
1515
public function __invoke(Request $request)
1616
{
17-
$order = Order::find($request->order_id);
18-
$item = $order->lineItems()->firstWhere('id', $request->item_id);
17+
$order = Order::find($request->orderId);
18+
$item = $order->lineItems()->firstWhere('id', $request->lineItemId);
1919

2020
if (! $item->metadata()->has('license_key') || $item->metadata()->get('license_key') !== $request->get('license_key')) {
2121
abort(401);

src/Http/Controllers/DigitalProducts/VerificationController.php

+17-20
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,31 @@ class VerificationController extends Controller
1414
{
1515
public function __invoke(Request $request)
1616
{
17-
// TODO: refactor controller to use $validated['license_key']
1817
$validated = $request->validate([
1918
'license_key' => ['required', 'string'],
2019
]);
2120

22-
// TODO: refactor query
2321
if ($this->isOrExtendsClass(SimpleCommerce::orderDriver()['repository'], EntryOrderRepository::class)) {
2422
$orderQuery = Entry::query()
2523
->where('collection', SimpleCommerce::orderDriver()['collection'])
2624
->whereIn('order_status', [
2725
OrderStatus::Placed->value,
2826
OrderStatus::Dispatched->value,
2927
])
30-
->where('items->0->metadata->license_key', $request->license_key)
31-
->orWhere('items->1->metadata->license_key', $request->license_key)
32-
->orWhere('items->2->metadata->license_key', $request->license_key)
33-
->orWhere('items->3->metadata->license_key', $request->license_key)
34-
->orWhere('items->4->metadata->license_key', $request->license_key)
35-
->orWhere('items->5->metadata->license_key', $request->license_key)
36-
->orWhere('items->6->metadata->license_key', $request->license_key)
37-
->orWhere('items->7->metadata->license_key', $request->license_key)
38-
->orWhere('items->8->metadata->license_key', $request->license_key)
39-
->orWhere('items->9->metadata->license_key', $request->license_key)
28+
->where('items->0->metadata->license_key', $validated['license_key'])
29+
->orWhere('items->1->metadata->license_key', $validated['license_key'])
30+
->orWhere('items->2->metadata->license_key', $validated['license_key'])
31+
->orWhere('items->3->metadata->license_key', $validated['license_key'])
32+
->orWhere('items->4->metadata->license_key', $validated['license_key'])
33+
->orWhere('items->5->metadata->license_key', $validated['license_key'])
34+
->orWhere('items->6->metadata->license_key', $validated['license_key'])
35+
->orWhere('items->7->metadata->license_key', $validated['license_key'])
36+
->orWhere('items->8->metadata->license_key', $validated['license_key'])
37+
->orWhere('items->9->metadata->license_key', $validated['license_key'])
4038
->limit(1)
4139
->get();
4240
}
4341

44-
// TODO: refactor query
4542
if ($this->isOrExtendsClass(SimpleCommerce::orderDriver()['repository'], EloquentOrderRepository::class)) {
4643
$orderModel = new (SimpleCommerce::orderDriver()['model']);
4744

@@ -50,28 +47,28 @@ public function __invoke(Request $request)
5047
OrderStatus::Placed->value,
5148
OrderStatus::Dispatched->value,
5249
])
53-
->whereRaw("JSON_EXTRACT(items, '$[0].metadata.license_key') = ?", [$request->license_key])
50+
->whereRaw("JSON_EXTRACT(items, '$[0].metadata.license_key') = ?", [$validated['license_key']])
5451
->limit(1)
5552
->get();
5653
}
5754

5855
return $orderQuery->count() > 0
59-
? $this->validResponse($request)
60-
: $this->invalidResponse($request);
56+
? $this->validResponse($validated)
57+
: $this->invalidResponse($validated);
6158
}
6259

63-
protected function validResponse($request): array
60+
protected function validResponse($validated): array
6461
{
6562
return [
66-
'license_key' => $request->license_key,
63+
'license_key' => $validated['license_key'],
6764
'valid' => true,
6865
];
6966
}
7067

71-
protected function invalidResponse($request): array
68+
protected function invalidResponse($validated): array
7269
{
7370
return [
74-
'license_key' => $request->license_key,
71+
'license_key' => $validated['license_key'],
7572
'valid' => false,
7673
];
7774
}

src/Orders/Checkout/HandleDigitalProducts.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ public function handle(Order $order, Closure $next)
3333
$order->updateLineItem($lineItem->id(), [
3434
'metadata' => array_merge($lineItem->metadata()->toArray(), [
3535
'license_key' => $licenseKey = LicenseKey::generate(),
36-
'download_url' => URL::signedRoute('statamic.digital-downloads.download', [
37-
'order_id' => $event->order->id,
38-
'item_id' => $lineItem->id(),
36+
'download_url' => URL::signedRoute('statamic.simple-commerce.digital-products.download', [
37+
'orderId' => $order->id,
38+
'lineItemId' => $lineItem->id(),
3939
'license_key' => $licenseKey,
4040
]),
4141
'download_history' => [],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
use Illuminate\Foundation\Testing\RefreshDatabase;
4+
use DoubleThreeDigital\SimpleCommerce\Facades\LicenseKey;
5+
use DoubleThreeDigital\SimpleCommerce\Tests\Helpers\UseDatabaseContentDrivers;
6+
use Statamic\Facades\Collection;
7+
use DoubleThreeDigital\SimpleCommerce\Orders\OrderModel;
8+
9+
uses(RefreshDatabase::class);
10+
uses(UseDatabaseContentDrivers::class);
11+
12+
it('can get verification index', function () {
13+
$licenseKey = LicenseKey::generate();
14+
15+
Collection::make('orders')->save();
16+
17+
OrderModel::create([
18+
'order_status' => 'placed',
19+
'payment_status' => 'paid',
20+
'items' => [
21+
[
22+
'metadata' => [
23+
'license_key' => $licenseKey,
24+
],
25+
],
26+
],
27+
]);
28+
29+
$this
30+
->post('/!/simple-commerce/digital-products/verification', [
31+
'license_key' => $licenseKey,
32+
])
33+
->assertOk()
34+
->assertJson([
35+
'license_key' => $licenseKey,
36+
'valid' => true,
37+
]);
38+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
use DoubleThreeDigital\SimpleCommerce\Facades\LicenseKey;
4+
use Statamic\Facades\Collection;
5+
use Statamic\Facades\Entry;
6+
7+
it('can get verification index', function () {
8+
$licenseKey = LicenseKey::generate();
9+
10+
Collection::make('orders')->save();
11+
12+
Entry::make()
13+
->collection('orders')
14+
->set('order_status', 'placed')
15+
->set('payment_status', 'paid')
16+
->set('items', [
17+
[
18+
'metadata' => [
19+
'license_key' => $licenseKey,
20+
],
21+
],
22+
])
23+
->save();
24+
25+
$this
26+
->post('/!/simple-commerce/digital-products/verification', [
27+
'license_key' => $licenseKey,
28+
])
29+
->assertOk()
30+
->assertJson([
31+
'license_key' => $licenseKey,
32+
'valid' => true,
33+
]);
34+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
use DoubleThreeDigital\SimpleCommerce\Listeners\EnforceEntryBlueprintFields;
4+
use Statamic\Events\EntryBlueprintFound;
5+
use Statamic\Facades\Blueprint;
6+
use Statamic\Facades\Collection;
7+
8+
test('fields can be added to product blueprint', function () {
9+
$blueprint = Blueprint::make('product')
10+
->setNamespace('collections.products')
11+
->save();
12+
13+
$event = new EntryBlueprintFound($blueprint);
14+
15+
$handle = (new EnforceEntryBlueprintFields())->handle($event);
16+
17+
$this->assertTrue($handle->hasField('is_digital_product'));
18+
$this->assertTrue($handle->hasField('download_limit'));
19+
$this->assertTrue($handle->hasField('downloadable_asset'));
20+
$this->assertTrue($handle->hasTab('Digital Product'));
21+
});
22+
23+
test('fields can be added to product blueprint with product variants', function () {
24+
$blueprint = Blueprint::make('product')
25+
->setNamespace('collections.products')
26+
->setContents([
27+
'tabs' => ['main' => ['sections' => [
28+
['fields' => [
29+
[
30+
'handle' => 'product_variants',
31+
'field' => ['type' => 'product_variants'],
32+
],
33+
]],
34+
]]],
35+
])
36+
->save();
37+
38+
$event = new EntryBlueprintFound($blueprint);
39+
40+
$handle = (new EnforceEntryBlueprintFields())->handle($event);
41+
42+
$this->assertFalse($handle->hasField('is_digital_product'));
43+
$this->assertFalse($handle->hasField('download_limit'));
44+
$this->assertFalse($handle->hasField('downloadable_asset'));
45+
$this->assertFalse($handle->hasTab('Digital Product'));
46+
$this->assertTrue($handle->hasField('product_variants'));
47+
48+
$optionFields = collect($handle->field('product_variants')->config()['option_fields']);
49+
50+
$this->assertCount(3, $optionFields);
51+
$this->assertTrue($optionFields->where('handle', 'is_digital_product')->count() > 0);
52+
$this->assertTrue($optionFields->where('handle', 'download_limit')->count() > 0);
53+
$this->assertTrue($optionFields->where('handle', 'downloadable_asset')->count() > 0);
54+
});
55+
56+
test('digital product fields are not added to another blueprint', function () {
57+
$blueprint = Blueprint::make('orders')
58+
->setNamespace('collections.orders')
59+
->save();
60+
61+
$event = new EntryBlueprintFound($blueprint);
62+
63+
$handle = (new EnforceEntryBlueprintFields())->handle($event);
64+
65+
$this->assertFalse($handle->hasField('is_digital_product'));
66+
$this->assertFalse($handle->hasField('download_limit'));
67+
$this->assertFalse($handle->hasField('downloadable_asset'));
68+
$this->assertFalse($handle->hasTab('Digital Product'));
69+
});

0 commit comments

Comments
 (0)