mirror of
https://github.com/anikeen-com/id.git
synced 2026-11-04 22:59:41 +00:00
Let users confirm orders of trusted apps
confirm, return_url and metadata on createOrderForUser() and orders created with the user's token: the order stays a draft with a confirmation_url and expires after 24 hours (409 confirmation_expired on checkout). metadata can be changed on a draft with Order::update().
This commit is contained in:
6 files changed
+130
-3
No files matched your search
@@ -2,7 +2,9 @@
|
||||
|
||||
namespace Anikeen\Id\Tests;
|
||||
|
||||
use Anikeen\Id\AnikeenId;
|
||||
use Anikeen\Id\Billable;
|
||||
use Anikeen\Id\Exceptions\ApiException;
|
||||
use Anikeen\Id\Exceptions\ConfirmationRequiredException;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
@@ -60,4 +62,44 @@ class CheckoutConfirmationTest extends TestCase
|
||||
$this->assertSame('https://id.anikeen.com/checkout/subscriptions/01JSUB', $e->confirmationUrl);
|
||||
}
|
||||
}
|
||||
|
||||
public function test_a_trusted_app_lets_the_user_confirm_its_order(): void
|
||||
{
|
||||
$this->respond(201, ['data' => ['id' => '01JORD', 'status' => 'draft', 'group' => 'team-1', 'metadata' => ['topup' => '7'], 'expires_at' => '2026-11-05T10:00:00+00:00', 'confirmation_url' => 'https://id.anikeen.com/checkout/orders/01JORD']]);
|
||||
|
||||
$result = app(AnikeenId::class)->createOrderForUser('01JUSER', [
|
||||
'group' => 'team-1',
|
||||
'confirm' => true,
|
||||
'return_url' => 'https://console.test/billing/topup',
|
||||
'metadata' => ['topup' => '7'],
|
||||
'items' => [['type' => 'digital', 'name' => 'Credit', 'unit' => 'onetime', 'units' => 1, 'gross_price' => '10.00']],
|
||||
]);
|
||||
|
||||
$this->assertSame('POST /api/v1/admin/orders Bearer app-token', $this->sent[0]['request']->getMethod() . ' ' . $this->sent[0]['request']->getUri()->getPath() . ' ' . $this->sent[0]['request']->getHeaderLine('Authorization'));
|
||||
$this->assertTrue($this->sentJson(0)['confirm']);
|
||||
$this->assertSame('https://console.test/billing/topup', $this->sentJson(0)['return_url']);
|
||||
$this->assertSame(['topup' => '7'], $this->sentJson(0)['metadata']);
|
||||
$this->assertSame('01JUSER', $this->sentJson(0)['user_id']);
|
||||
$this->assertSame('https://id.anikeen.com/checkout/orders/01JORD', $result->data->confirmation_url);
|
||||
$this->assertSame('7', $result->data->metadata->topup);
|
||||
}
|
||||
|
||||
public function test_an_expired_confirmation_is_a_conflict(): void
|
||||
{
|
||||
$this->respond(200, ['data' => []]);
|
||||
$this->respond(201, ['data' => ['id' => '01JORD', 'status' => 'draft', 'confirmation_url' => 'https://id.anikeen.com/checkout/orders/01JORD']]);
|
||||
$this->respond(409, ['message' => 'The order was not confirmed in time.', 'error' => 'confirmation_expired']);
|
||||
|
||||
$order = $this->owner()->orders()->create(['confirm' => true, 'return_url' => 'https://shop.test/done', 'metadata' => ['cart' => 1], 'items' => []]);
|
||||
|
||||
$this->assertSame(['confirm' => true, 'return_url' => 'https://shop.test/done', 'metadata' => ['cart' => 1], 'items' => []], $this->sentJson(1));
|
||||
|
||||
try {
|
||||
$order->checkout();
|
||||
$this->fail('Expected an ApiException.');
|
||||
} catch (ApiException $e) {
|
||||
$this->assertTrue($e->isConflict());
|
||||
$this->assertSame('confirmation_expired', $e->error);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user