'/'.$name.'/'.implode('/', $parameters) ); } it('applies the stashed card on a successful 3-D Secure return for the owning consultant', function () { stubCrmRoutes(); $abo = makeMeAbo(); // is_for=me, clearingtype=cc, status=2, user_id=consultant $abo->forceFill(['carddata' => ['pseudocardpan' => 'OLD'], 'card_update_pending_at' => now()])->save(); $this->actingAs($abo->user); session(['abo_card_update.'.$abo->id => [ 'carddata' => ['pseudocardpan' => 'NEW_CRM', 'truncatedcardpan' => '444444XXXXXX1111', 'cardexpiredate' => '2812'], 'userid' => 888, ]]); makeCrmController()->paymentMethodReturn('me', $abo->id, 'success', app(AboPaymentMethodService::class)); $abo->refresh(); expect($abo->carddata['pseudocardpan'])->toBe('NEW_CRM') ->and($abo->payone_userid)->toEqual(888) ->and($abo->card_update_pending_at)->toBeNull() ->and($abo->card_changes()->count())->toBe(1) ->and($abo->card_changes()->first()->source)->toBe('crm') ->and($abo->card_changes()->first()->masked_card)->toBe('444444XXXXXX1111 (12/28)'); }); it('forbids card entry for a customer abo (ot) in the CRM', function () { stubCrmRoutes(); $abo = makeMeAbo(); $this->actingAs($abo->user); expect(fn () => makeCrmController()->paymentMethodReturn('ot', $abo->id, 'success', app(AboPaymentMethodService::class))) ->toThrow(HttpException::class); });