Use Paystack/Ladill Pay on Mini payment landing.
Deploy Ladill Mini / deploy (push) Successful in 1m23s
Deploy Ladill Mini / deploy (push) Successful in 1m23s
Drop the required MTN MoMo number field and MoMo copy so public payment QRs open Paystack checkout via Ladill Pay like the other restored storefronts. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\QrCode;
|
||||
use App\Models\User;
|
||||
use App\Services\Pay\PayClient;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Str;
|
||||
use Mockery;
|
||||
use Tests\TestCase;
|
||||
|
||||
class MiniPaymentCheckoutTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_payment_landing_shows_paystack_branding_not_momo(): void
|
||||
{
|
||||
$user = User::create([
|
||||
'public_id' => (string) Str::uuid(),
|
||||
'name' => 'Vendor',
|
||||
'email' => 'vendor@example.com',
|
||||
]);
|
||||
|
||||
$qr = QrCode::query()->create([
|
||||
'user_id' => $user->id,
|
||||
'short_code' => 'payland01',
|
||||
'type' => QrCode::TYPE_PAYMENT,
|
||||
'label' => 'Till',
|
||||
'payload' => [
|
||||
'content' => [
|
||||
'business_name' => 'Accra Kiosk',
|
||||
'currency' => 'GHS',
|
||||
],
|
||||
'style' => [],
|
||||
],
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$this->withHeader(\App\Support\LadillLink::INTERNAL_HEADER, '1')
|
||||
->get('/q/'.$qr->short_code)
|
||||
->assertOk()
|
||||
->assertSee('Secured by Paystack. Powered by Ladill Pay', false)
|
||||
->assertDontSee('MTN MoMo number', false)
|
||||
->assertDontSee('Pay with MTN MoMo', false);
|
||||
}
|
||||
|
||||
public function test_pay_initiation_does_not_require_phone_and_returns_paystack_checkout(): void
|
||||
{
|
||||
$user = User::create([
|
||||
'public_id' => (string) Str::uuid(),
|
||||
'name' => 'Vendor',
|
||||
'email' => 'vendor@example.com',
|
||||
]);
|
||||
|
||||
$qr = QrCode::query()->create([
|
||||
'user_id' => $user->id,
|
||||
'short_code' => 'payinit01',
|
||||
'type' => QrCode::TYPE_PAYMENT,
|
||||
'label' => 'Till',
|
||||
'payload' => [
|
||||
'content' => [
|
||||
'business_name' => 'Accra Kiosk',
|
||||
'currency' => 'GHS',
|
||||
],
|
||||
'style' => [],
|
||||
],
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$pay = Mockery::mock(PayClient::class);
|
||||
$pay->shouldReceive('createCheckout')
|
||||
->once()
|
||||
->with(Mockery::on(function (array $payload): bool {
|
||||
return ($payload['source_service'] ?? '') === 'mini'
|
||||
&& ! array_key_exists('customer_phone', $payload)
|
||||
&& ($payload['line_items'][0]['unit_price_minor'] ?? 0) === 2500;
|
||||
}))
|
||||
->andReturn([
|
||||
'id' => 99,
|
||||
'reference' => 'LP-TESTMINIPAY001',
|
||||
'checkout_url' => 'https://checkout.paystack.com/mini-test',
|
||||
'provider' => 'paystack',
|
||||
'platform_fee_minor' => 38,
|
||||
'merchant_amount_minor' => 2462,
|
||||
]);
|
||||
$this->app->instance(PayClient::class, $pay);
|
||||
|
||||
$this->withHeader(\App\Support\LadillLink::INTERNAL_HEADER, '1')
|
||||
->postJson('/q/'.$qr->short_code.'/pay', [
|
||||
'amount' => 25,
|
||||
])
|
||||
->assertOk()
|
||||
->assertJsonPath('checkout_url', 'https://checkout.paystack.com/mini-test')
|
||||
->assertJsonPath('provider', 'paystack');
|
||||
|
||||
$this->assertDatabaseHas('mini_payments', [
|
||||
'qr_code_id' => $qr->id,
|
||||
'amount_minor' => 2500,
|
||||
'payment_reference' => 'LP-TESTMINIPAY001',
|
||||
'payer_phone' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user