Deploy Ladill Events / deploy (push) Successful in 1m25s
Use the shared Inline sheet, hold busy until payment UI opens, and avoid locking page scroll during the handoff.
86 lines
4.8 KiB
PHP
86 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use Tests\TestCase;
|
|
|
|
class ResponsivePaystackSheetTest extends TestCase
|
|
{
|
|
public function test_checkout_sheet_partial_has_mobile_sheet_and_desktop_modal(): void
|
|
{
|
|
$html = view('partials.paystack-sheet', [
|
|
'audience' => 'buyer',
|
|
])->render();
|
|
|
|
$this->assertStringContainsString('role="dialog"', $html);
|
|
$this->assertStringContainsString('aria-modal="true"', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-sheet', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-panel', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-backdrop', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-handle', $html);
|
|
$this->assertStringContainsString('md:items-center', $html);
|
|
$this->assertStringContainsString('rounded-t-2xl', $html);
|
|
$this->assertStringContainsString('md:rounded-2xl', $html);
|
|
$this->assertStringContainsString('md:max-w-lg', $html);
|
|
$this->assertStringContainsString('data-paystack-live', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-close-live', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-header-minimal', $html);
|
|
$this->assertStringContainsString('Complete your payment', $html);
|
|
$this->assertStringContainsString('safe-area-inset-bottom', $html);
|
|
$this->assertStringContainsString('LadillPayCheckout', $html);
|
|
$this->assertStringContainsString('resumeTransaction', $html);
|
|
$this->assertStringContainsString("\$watch('showSheet'", $html);
|
|
$this->assertStringContainsString('js.paystack.co/v2/inline.js', $html);
|
|
$this->assertStringContainsString('items-end justify-center md:items-center', $html);
|
|
$this->assertStringContainsString('rounded-t-2xl bg-white shadow-2xl md:max-w-lg md:rounded-2xl', $html);
|
|
$this->assertStringContainsString('ensurePaystackIframePermissions', $html);
|
|
$this->assertStringContainsString('installIframeAllowHook', $html);
|
|
$this->assertStringContainsString('fullscreen *', $html);
|
|
$this->assertStringNotContainsString("attributeFilter: ['allow', 'src', 'id', 'name', 'style', 'class']", $html);
|
|
$this->assertStringContainsString('childList only', $html);
|
|
$this->assertStringContainsString('Only write attributes when they actually change', $html);
|
|
$this->assertStringContainsString('Do not watch iframes or preload Paystack on every page', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-mount', $html);
|
|
$this->assertStringContainsString('data-ladill-pay-body', $html);
|
|
$this->assertStringNotContainsString('styleCheckoutPinnedToRect', $html);
|
|
$this->assertStringNotContainsString('waitForPinTarget', $html);
|
|
$this->assertStringNotContainsString('placeCheckoutInMount', $html);
|
|
$this->assertStringNotContainsString('installAppendHook', $html);
|
|
$this->assertStringNotContainsString('__ladillContainPaystack', $html);
|
|
$this->assertStringNotContainsString('Node.prototype.appendChild', $html);
|
|
$this->assertStringNotContainsString('data-ladill-pay-inline-status', $html);
|
|
$this->assertStringNotContainsString('Please wait', $html);
|
|
$this->assertStringContainsString('Payment UI did not open', $html);
|
|
$this->assertStringContainsString('ladill-pay-opened', $html);
|
|
$this->assertStringContainsString('Only lock page scroll when OUR shell is visible', $html);
|
|
$this->assertStringContainsString('releaseBusy', $html);
|
|
$this->assertStringContainsString('markOpened', $html);
|
|
$this->assertStringNotContainsString('Continue to Paystack', $html);
|
|
$this->assertStringNotContainsString('window.open(', $html);
|
|
$this->assertStringNotContainsString('hidden w-full max-w-lg', $html);
|
|
$this->assertStringNotContainsString('Paystack checkout', $html);
|
|
$this->assertStringNotContainsString('bg-transparent shadow-none', $html);
|
|
$this->assertStringNotContainsString('not in a separate browser', $html);
|
|
}
|
|
|
|
|
|
public function test_payment_return_escapes_popup_and_iframe_to_opener_or_top(): void
|
|
{
|
|
$view = view()->exists('partials.payment-return')
|
|
? 'partials.payment-return'
|
|
: 'public.payment-return';
|
|
|
|
$html = view($view, [
|
|
'redirect' => 'https://example.test/paid',
|
|
])->render();
|
|
|
|
$this->assertStringContainsString('Confirming your payment', $html);
|
|
$this->assertStringContainsString('window.opener', $html);
|
|
$this->assertStringContainsString('window.top.location.replace', $html);
|
|
$this->assertTrue(
|
|
str_contains($html, 'https://example.test/paid')
|
|
|| str_contains($html, 'https:\/\/example.test\/paid')
|
|
);
|
|
}
|
|
}
|