|
658 | 658 | end |
659 | 659 | end |
660 | 660 |
|
| 661 | + describe '#complete_payment_session' do |
| 662 | + let(:order) { create(:order_with_line_items, store: store) } |
| 663 | + let!(:payment_session) do |
| 664 | + Spree::PaymentSessions::Adyen.create!( |
| 665 | + order: order, |
| 666 | + payment_method: gateway, |
| 667 | + amount: order.total, |
| 668 | + currency: order.currency, |
| 669 | + status: 'pending', |
| 670 | + external_id: 'CS4FBB6F827EC53AC7', |
| 671 | + external_data: { 'session_data' => 'test', 'channel' => 'Web' } |
| 672 | + ) |
| 673 | + end |
| 674 | + |
| 675 | + context 'with session_result' do |
| 676 | + it 'completes the payment session' do |
| 677 | + VCR.use_cassette('payment_session_results/success/completed') do |
| 678 | + gateway.complete_payment_session(payment_session: payment_session, params: { session_result: 'resultData' }) |
| 679 | + expect(payment_session.reload.status).to eq('completed') |
| 680 | + end |
| 681 | + end |
| 682 | + end |
| 683 | + |
| 684 | + context 'with redirect_result in external_data' do |
| 685 | + before do |
| 686 | + allow(gateway).to receive(:resolve_session_result_from_redirect) |
| 687 | + .with('redirectResultToken') |
| 688 | + .and_return('resultData') |
| 689 | + end |
| 690 | + |
| 691 | + it 'resolves session_result from redirect_result and completes' do |
| 692 | + VCR.use_cassette('payment_session_results/success/completed') do |
| 693 | + gateway.complete_payment_session( |
| 694 | + payment_session: payment_session, |
| 695 | + params: { external_data: { redirect_result: 'redirectResultToken' } } |
| 696 | + ) |
| 697 | + expect(payment_session.reload.status).to eq('completed') |
| 698 | + end |
| 699 | + end |
| 700 | + end |
| 701 | + |
| 702 | + context 'with neither session_result nor redirect_result' do |
| 703 | + it 'raises a gateway error' do |
| 704 | + expect { |
| 705 | + gateway.complete_payment_session(payment_session: payment_session, params: {}) |
| 706 | + }.to raise_error(Spree::Core::GatewayError, 'session_result or redirect_result is required') |
| 707 | + end |
| 708 | + end |
| 709 | + |
| 710 | + context 'when redirect_result cannot be resolved' do |
| 711 | + before do |
| 712 | + allow(gateway).to receive(:resolve_session_result_from_redirect).and_return(nil) |
| 713 | + end |
| 714 | + |
| 715 | + it 'raises a gateway error' do |
| 716 | + expect { |
| 717 | + gateway.complete_payment_session( |
| 718 | + payment_session: payment_session, |
| 719 | + params: { external_data: { redirect_result: 'bad_token' } } |
| 720 | + ) |
| 721 | + }.to raise_error(Spree::Core::GatewayError, 'session_result or redirect_result is required') |
| 722 | + end |
| 723 | + end |
| 724 | + end |
| 725 | + |
661 | 726 | describe '#parse_webhook_event' do |
662 | 727 | let(:order) { create(:order_with_line_items, store: store) } |
663 | 728 | let!(:payment_session) do |
|
0 commit comments