spec/jortt/client/customers_spec.rb in jortt-4.2.0 vs spec/jortt/client/customers_spec.rb in jortt-5.0.0
- old
+ new
@@ -1,59 +1,104 @@
-# encoding: UTF-8
require 'spec_helper'
-describe Jortt::Client::Customers do
- let(:customers) do
- described_class.new(
- double(base_url: 'foo', app_name: 'app', api_key: 'secret'),
- )
+describe Jortt::Client::Customers, :vcr do
+ let(:client) { Jortt.client(ENV['JORTT_CLIENT_ID'], ENV['JORTT_CLIENT_SECRET']) }
+
+ let(:params) do
+ {
+ is_private: false,
+ customer_name: 'Nuka-Cola Corporation',
+ address_street: 'Vault 11',
+ address_postal_code: '1111AA',
+ address_city: 'Mojave Wasteland'
+ }
end
- describe '#all' do
+ let!(:jane) { client.customers.create(is_private: true, customer_name: 'Jane Doe')['id'] }
+ let!(:john) { client.customers.create(is_private: true, customer_name: 'John Doe')['id'] }
+
+ after do
+ client.customers.delete(jane)
+ client.customers.delete(john)
+ end
+
+ describe '#index' do
context 'without params' do
- subject { customers.all }
+ subject { client.customers.index.to_a }
- before do
- url = 'http://app:secret@foo/customers/all?page=1&per_page=50'
- stub_request(:get, url).
- to_return(status: 200, body: '{"customers": ["foo"]}')
+ it "returns customers" do
+ expect(subject.count).to eq(3)
+ expect(subject[0]['customer_name']).to eq('Jane Doe')
+ expect(subject[1]['customer_name']).to eq('John Doe')
+ expect(subject[2]['customer_name']).to eq('Search target')
end
-
- it { should eq('customers' => ['foo']) }
end
- context 'with params' do
- subject { customers.all(page: page, per_page: per_page) }
- let(:page) { 3 }
- let(:per_page) { 25 }
+ context 'query' do
+ subject { client.customers.index(query: 'Search target') }
- before do
- url = 'http://app:secret@foo/customers/all?page=3&per_page=25'
- stub_request(:get, url).
- to_return(status: 200, body: '{"customers": ["bar"]}')
+ it "returns the queried customers" do
+ expect(subject.count).to eq(1)
+ expect(subject.first['customer_name']).to eq("Search target")
end
+ end
+ end
- it { should eq('customers' => ['bar']) }
+ describe '#show' do
+ subject { client.customers.show(jane) }
+
+ it "returns the customer" do
+ expect(subject['customer_name']).to eq("Jane Doe")
end
end
describe '#create' do
- let(:request_body) { JSON.generate(customer: {line_items: []}) }
- let(:response_body) { JSON.generate(customer_id: 'abc') }
- subject { customers.create(line_items: []) }
- before do
- stub_request(:post, 'http://app:secret@foo/customers').
- with(body: request_body).
- to_return(status: 200, body: response_body)
+ context "valid payload" do
+ subject { client.customers.create(params) }
+ after { client.customers.delete(subject['id']) }
+
+ it "creates the customer" do
+ uuid_length = 36
+ expect(subject['id'].length).to eq(uuid_length)
+ end
end
- it { should eq('customer_id' => 'abc') }
+
+ context "faulty payload" do
+ subject { client.customers.create({}) }
+
+ it "shows a nice error" do
+ expect { subject }.to raise_error(Jortt::Client::Error)
+ end
+ end
end
- describe '#search' do
- subject { customers.search('terms') }
- before do
- stub_request(:get, 'http://app:secret@foo/customers?query=terms').
- to_return(status: 200, body: '{"customers": []}')
+ describe '#update' do
+ let(:uuid) { client.customers.create(params).fetch('id') }
+ subject { client.customers.update(uuid, params.merge(address_extra_information: 'Extra...')) }
+ after { client.customers.delete(uuid) }
+
+ it "updates the customer" do
+ expect(subject).to eq(true)
end
- it { should eq('customers' => []) }
+ end
+
+ describe '#delete' do
+ let(:uuid) { client.customers.create(params).fetch('id') }
+ subject { client.customers.delete(uuid) }
+
+ it "deletes the customer" do
+ expect(subject).to eq(true)
+ end
+ end
+
+ describe '#direct_debit_mandate' do
+ subject { client.customers.direct_debit_mandate(jane) }
+
+ it "sends direct debit mandate to the customer or responds with an error when not possible" do
+ begin
+ subject
+ rescue Jortt::Client::Error => e
+ expect(e.details.first['key']).to eq("DirectDebit::NotEnabled")
+ end
+ end
end
end