spec/pesapal_merchant_spec.rb in pesapal-1.8.0 vs spec/pesapal_merchant_spec.rb in pesapal-2.0.0

- old
+ new

@@ -1,11 +1,11 @@ require 'spec_helper' describe Pesapal::Merchant do - let(:order_details) do - { amount: 1000, + { + amount: 1000, description: Faker::Lorem.sentence, type: 'MERCHANT', reference: '111-222-333', first_name: Faker::Name.first_name, last_name: Faker::Name.last_name, @@ -14,36 +14,21 @@ currency: 'KES' # ['USD', 'KES', 'UGX', 'TZA'].sample } end let(:default_credentials) do - { callback_url: 'http://0.0.0.0:3000/pesapal/callback', + { + callback_url: 'http://0.0.0.0:3000/pesapal/callback', consumer_key: '<YOUR_CONSUMER_KEY>', consumer_secret: '<YOUR_CONSUMER_SECRET>' } end - let(:demo_endpoints) do - { postpesapaldirectorderv4: 'https://demo.pesapal.com/API/PostPesapalDirectOrderV4', - querypaymentstatus: 'https://demo.pesapal.com/API/QueryPaymentStatus', - querypaymentdetails: 'https://demo.pesapal.com/API/QueryPaymentDetails' - } - end - - let(:production_endpoints) do - { postpesapaldirectorderv4: 'https://www.pesapal.com/API/PostPesapalDirectOrderV4', - querypaymentstatus: 'https://www.pesapal.com/API/QueryPaymentStatus', - querypaymentdetails: 'https://www.pesapal.com/API/QueryPaymentDetails' - } - end - context 'when mode not specified' do - let(:pesapal) { Pesapal::Merchant.new } describe '#new' do - it 'is valid object' do expect(pesapal).to be_an_instance_of(Pesapal::Merchant) end it 'sets default environment variable' do @@ -57,32 +42,18 @@ it 'sets default order details' do expect(pesapal.order_details).to eq({}) end end - describe '#change_env' do - - it 'sets default environment variable' do - pesapal.change_env - expect(pesapal.send(:env)).to eq 'development' - end - - it 'sets endpoints for default environment' do - expect(pesapal.change_env).to eq(demo_endpoints) - end - end - describe '#generate_order_url' do - it 'generates iframe url string' do pesapal.order_details = order_details expect(pesapal.generate_order_url).to match %r{https://demo.pesapal.com/API/PostPesapalDirectOrderV4\?oauth_callback=.*oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_request_data=.*} end end describe '#query_payment_status' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('PENDING') @@ -103,25 +74,25 @@ expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('INVALID') end end describe '#query_payment_details' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentDetails\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment details' do request.to_return(status: 200, body: 'pesapal_response_data=transaction_tracking_id,payment_method,payment_status,merchant_reference') - expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(method: 'payment_method', - status: 'payment_status', - merchant_reference: 'merchant_reference', - transaction_tracking_id: 'transaction_tracking_id' - ) + expected_result = { + method: 'payment_method', + status: 'payment_status', + merchant_reference: 'merchant_reference', + transaction_tracking_id: 'transaction_tracking_id' + } + expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(expected_result) end end describe '#ipn_listener' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets ipn response for pending status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.ipn_listener('CHANGE', 'merchant_reference', 'transaction_tracking_id')).to eq(status: 'PENDING', response: nil) @@ -143,15 +114,13 @@ end end end context 'when mode is specified as development' do - let(:pesapal) { Pesapal::Merchant.new(:development) } describe '#new(:development)' do - it 'is valid object' do expect(pesapal).to be_an_instance_of(Pesapal::Merchant) end it 'sets environment variable' do @@ -165,32 +134,18 @@ it 'sets order details' do expect(pesapal.order_details).to eq({}) end end - describe '#change_env(:development)' do - - it 'sets environment variable' do - pesapal.change_env :development - expect(pesapal.send(:env)).to eq 'development' - end - - it 'sets endpoints for environment' do - expect(pesapal.change_env :development).to eq(demo_endpoints) - end - end - describe '#generate_order_url' do - it 'generates iframe url string' do pesapal.order_details = order_details expect(pesapal.generate_order_url).to match %r{https://demo.pesapal.com/API/PostPesapalDirectOrderV4\?oauth_callback=.*oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_request_data=.*} end end describe '#query_payment_status' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('PENDING') @@ -211,25 +166,25 @@ expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('INVALID') end end describe '#query_payment_details' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentDetails\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment details' do request.to_return(status: 200, body: 'pesapal_response_data=transaction_tracking_id,payment_method,payment_status,merchant_reference') - expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(method: 'payment_method', - status: 'payment_status', - merchant_reference: 'merchant_reference', - transaction_tracking_id: 'transaction_tracking_id' - ) + expected_result = { + method: 'payment_method', + status: 'payment_status', + merchant_reference: 'merchant_reference', + transaction_tracking_id: 'transaction_tracking_id' + } + expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(expected_result) end end describe '#ipn_listener' do - let(:request) { stub_request(:get, %r{https://demo.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets ipn response for pending status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.ipn_listener('CHANGE', 'merchant_reference', 'transaction_tracking_id')).to eq(status: 'PENDING', response: nil) @@ -251,15 +206,13 @@ end end end context 'when mode is specified as production' do - let(:pesapal) { Pesapal::Merchant.new(:production) } describe '#new(:production)' do - it 'is valid object' do expect(pesapal).to be_an_instance_of(Pesapal::Merchant) end it 'sets environment variable' do @@ -273,32 +226,18 @@ it 'sets order details' do expect(pesapal.order_details).to eq({}) end end - describe '#change_env(:production)' do - - it 'sets environment variable' do - pesapal.change_env :production - expect(pesapal.send(:env)).to eq 'production' - end - - it 'sets endpoints for environment' do - expect(pesapal.change_env :production).to eq(production_endpoints) - end - end - describe '#generate_order_url' do - it 'generates iframe url string' do pesapal.order_details = order_details expect(pesapal.generate_order_url).to match %r{https://www.pesapal.com/API/PostPesapalDirectOrderV4\?oauth_callback=.*oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_request_data=.*} end end describe '#query_payment_status' do - let(:request) { stub_request(:get, %r{https://www.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('PENDING') @@ -319,24 +258,24 @@ expect(pesapal.query_payment_status('merchant_reference', 'transaction_tracking_id')).to eq('INVALID') end end describe '#query_payment_details' do - let(:request) { stub_request(:get, %r{https://www.pesapal.com/API/QueryPaymentDetails\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets pending payment details' do request.to_return(status: 200, body: 'pesapal_response_data=transaction_tracking_id,payment_method,payment_status,merchant_reference') - expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(method: 'payment_method', - status: 'payment_status', - merchant_reference: 'merchant_reference', - transaction_tracking_id: 'transaction_tracking_id' - ) + expected_result = { + method: 'payment_method', + status: 'payment_status', + merchant_reference: 'merchant_reference', + transaction_tracking_id: 'transaction_tracking_id' + } + expect(pesapal.query_payment_details('merchant_reference', 'transaction_tracking_id')).to eq(expected_result) end end describe '#ipn_listener' do - let(:request) { stub_request(:get, %r{https://www.pesapal.com/API/QueryPaymentStatus\?oauth_consumer_key=.*oauth_nonce=.*oauth_signature=.*oauth_signature_method=HMAC-SHA1&oauth_timestamp.*oauth_version=1.0&pesapal_merchant_reference=.*&pesapal_transaction_tracking_id=.*}) } it 'gets ipn response for pending status' do request.to_return(status: 200, body: 'pesapal_response_data=PENDING') expect(pesapal.ipn_listener('CHANGE', 'merchant_reference', 'transaction_tracking_id')).to eq(status: 'PENDING', response: nil)