diff --git a/lib/yandex-checkout.rb b/lib/yandex-checkout.rb index 1c83db1..40fd6ea 100644 --- a/lib/yandex-checkout.rb +++ b/lib/yandex-checkout.rb @@ -10,6 +10,7 @@ require 'yandex-checkout/response' require 'yandex-checkout/callable' require 'yandex-checkout/optional' require 'yandex-checkout/entity/payment' +require 'yandex-checkout/entity/refund' require 'yandex-checkout/error' # require 'yandex-checkout/entity/amount' # require 'yandex-checkout/entity/payment_method' diff --git a/spec/fixtures/refund.json b/spec/fixtures/refund.json new file mode 100644 index 0000000..0018bef --- /dev/null +++ b/spec/fixtures/refund.json @@ -0,0 +1,8 @@ +{ + "amount": { + "value": "8.00", + "currency": "RUB" +}, +"payment_id": "40484c25-1095-4d36-8b17-92672d1e127d", + "description": "test refund, idem-key 40484c25-1095-4d36-8b17-92672d1e127d" +} diff --git a/spec/fixtures/refund_response.json b/spec/fixtures/refund_response.json new file mode 100644 index 0000000..2e43a14 --- /dev/null +++ b/spec/fixtures/refund_response.json @@ -0,0 +1,11 @@ +{ + "id": "2491ab0c-0015-5000-9000-1640c7f1a6f0", + "status": "succeeded", + "amount": { + "value": "8.00", + "currency": "RUB" + }, + "created_at": "2019-06-11T11:58:04.502Z", + "description": "test refund, idem-key 78c95366-ec4b-4284-a0fd-41e694bcdf11", + "payment_id": "2491a6e2-000f-5000-9000-1480e820ae17" +} diff --git a/spec/yandex-checkout/refund_spec.rb b/spec/yandex-checkout/refund_spec.rb new file mode 100644 index 0000000..33ae5b4 --- /dev/null +++ b/spec/yandex-checkout/refund_spec.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +RSpec.describe YandexCheckout::Refund do + let(:settings) { { shop_id: 'SHOP_ID', api_key: 'API_KEY' } } + let(:idempotency_key) { 12_345 } + let(:payment) { described_class.new(settings) } + + shared_examples 'returns_refund_object' do + it 'returns success' do + expect(subject).to be_kind_of YandexCheckout::Response + expect(subject.id).to eq '2491ab0c-0015-5000-9000-1640c7f1a6f0' + expect(subject.payment_id).to eq '2491a6e2-000f-5000-9000-1480e820ae17' + expect(subject.status).to eq 'succeeded' + expect(subject.created_at).to eq '2019-06-11T11:58:04.502Z' + expect(subject.description).to eq 'test refund, idem-key 78c95366-ec4b-4284-a0fd-41e694bcdf11' + + expect(subject.amount).to be_kind_of YandexCheckout::Entity::Amount + expect(subject.amount.currency).to eq 'RUB' + expect(subject.amount.value).to eq 8.0 + end + end + + describe '#create' do + let(:payload) { File.read('spec/fixtures/refund.json') } + let(:url) { 'https://payment.yandex.net/api/v3/refunds' } + let(:body) { File.read('spec/fixtures/refund_response.json') } + + before { stub_request(:any, //).to_return(body: body) } + subject { payment.create(payload: payload, idempotency_key: idempotency_key) } + + it 'sends a request' do + subject + expect(a_request(:post, url)).to have_been_made + end + + it_behaves_like 'returns_refund_object' + end + + describe '#get_refund_info' do + let(:payment_id) { '2490ded1-000f-5000-8000-1f64111bc63e' } + let(:url) { "https://payment.yandex.net/api/v3/refunds/#{payment_id}" } + let(:body) { File.read('spec/fixtures/refund_response.json') } + + before { stub_request(:any, //).to_return(body: body) } + subject { payment.get_refund_info(payment_id: payment_id) } + + it 'sends a request' do + subject + expect(a_request(:get, url)).to have_been_made + end + + it_behaves_like 'returns_refund_object' + end +end