spec/acfs/stub_spec.rb in acfs-1.0.0.dev.1.b305 vs spec/acfs/stub_spec.rb in acfs-1.0.0
- old
+ new
@@ -12,11 +12,11 @@
Acfs::Stub.allow_requests = false
end
describe '#called?' do
context 'without specified number' do
- let!(:operation) { Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 } }
+ let!(:operation) { Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32} }
it 'should allow to test if stub was called' do
MyUser.find 1
Acfs.run
@@ -36,12 +36,12 @@
end
describe '.resource' do
context 'with ambiguous stubs' do
before do
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, raise: :not_found
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, raise: :not_found
end
it 'should raise error' do
MyUser.find 1
@@ -49,13 +49,13 @@
end
end
context 'with read action' do
before do
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
- Acfs::Stub.resource MyUser, :read, with: { id: 2 }, raise: SpecialCustomError
- Acfs::Stub.resource MyUser, :read, with: { id: 3 }, raise: :not_found
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
+ Acfs::Stub.resource MyUser, :read, with: {id: 2}, raise: SpecialCustomError
+ Acfs::Stub.resource MyUser, :read, with: {id: 3}, raise: :not_found
end
it 'should allow to stub resource reads' do
user = MyUser.find 1
Acfs.run
@@ -79,12 +79,12 @@
end
end
context 'with type parameter' do
before do
- Acfs::Stub.resource Computer, :read, with: { id: 1 }, return: { id: 1, type: 'PC' }
- Acfs::Stub.resource Computer, :read, with: { id: 2 }, return: { id: 2, type: 'Mac' }
+ Acfs::Stub.resource Computer, :read, with: {id: 1}, return: {id: 1, type: 'PC'}
+ Acfs::Stub.resource Computer, :read, with: {id: 2}, return: {id: 2, type: 'Mac'}
end
it 'should create inherited type' do
pc = Computer.find 1
mac = Computer.find 2
@@ -97,32 +97,32 @@
end
end
context 'with create action' do
before do
- Acfs::Stub.resource Session, :create, with: { ident: 'john@exmaple.org', password: 's3cr3t' }, return: { id: 'longhash', user: 1 }
- Acfs::Stub.resource Session, :create, with: lambda { |op| op.data[:ident] == 'john@exmaple.org' && op.data[:password] == 'wrong' }, raise: 422
+ Acfs::Stub.resource Session, :create, with: {ident: 'john@exmaple.org', password: 's3cr3t'}, return: {id: 'longhash', user: 1}
+ Acfs::Stub.resource Session, :create, with: ->(op) { op.data[:ident] == 'john@exmaple.org' && op.data[:password] == 'wrong' }, raise: 422
end
it 'should allow stub resource creation' do
session = Session.create! ident: 'john@exmaple.org', password: 's3cr3t'
expect(session.id).to be == 'longhash'
expect(session.user).to be == 1
end
it 'should allow to raise error' do
- expect {
+ expect do
Session.create! ident: 'john@exmaple.org', password: 'wrong'
- }.to raise_error(::Acfs::InvalidResource)
+ end.to raise_error(::Acfs::InvalidResource)
end
end
context 'with list action' do
before do
Acfs::Stub.resource MyUser, :list,
- return: [{ id: 1, name: 'John Smith', age: 32 }, { id: 2, name: 'Anon', age: 12 }]
+ return: [{id: 1, name: 'John Smith', age: 32}, {id: 2, name: 'Anon', age: 12}]
end
it 'should return collection' do
users = MyUser.all
Acfs.run
@@ -156,29 +156,41 @@
end
context 'with header' do
before do
Acfs::Stub.resource Comment, :list,
- return: [{ id: 1, text: 'Foo' }, { id: 2, text: 'Bar' }],
- headers: headers
+ return: [{id: 1, text: 'Foo'}, {id: 2, text: 'Bar'}],
+ headers: headers
end
let!(:comments) { Comment.all }
- let(:headers) { {'X-Total-Pages' => '2'} }
+ let(:headers) do
+ {
+ 'X-Total-Pages' => '2',
+ 'X-Total-Count' => '10'
+ }
+ end
subject { Acfs.run; comments }
its(:total_pages) { should eq 2 }
+ its(:total_count) { should eq 10 }
end
end
context 'with update action' do
before do
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
- Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 22 }, return: { id: 1, name: 'John Smith', age: 23 }
- Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 0 }, raise: 422
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
+ Acfs::Stub.resource MyUser, :update, with: {id: 1, name: 'John Smith', age: 22}, return: {id: 1, name: 'John Smith', age: 23}
+ Acfs::Stub.resource MyUser, :update, with: {id: 1, name: 'John Smith', age: 0}, raise: 422
end
+ let!(:update_stub) do
+ Acfs::Stub.resource MyUser, :update,
+ with: {id: 1, name: 'Jane Smith'},
+ return: ->(op) { Hash[op.data.map {|k, v| [k, v.to_s.upcase] }] }
+ end
+
it 'should allow stub resource update' do
user = MyUser.find 1
Acfs.run
user.age = 22
@@ -192,22 +204,56 @@
Acfs.run
user.age = 0
user.save
- expect {
+ expect do
user.save!
- }.to raise_error(::Acfs::InvalidResource)
+ end.to raise_error(::Acfs::InvalidResource)
end
+
+ it 'should match partial :with' do
+ user = MyUser.find 1
+ Acfs.run
+
+ user.age = 5
+ user.name = 'Jane Smith'
+ user.save!
+
+ expect(update_stub).to be_called
+ end
+
+ it 'should process response body' do
+ user = MyUser.find 1
+ Acfs.run
+
+ user.age = 5
+ user.name = 'Jane Smith'
+ user.save!
+
+ expect(user.name).to eq 'JANE SMITH'
+ end
end
+
+ context 'with create action' do
+ before do
+ Acfs::Stub.resource MyUser, :create, with: {name: 'John Smith', age: 0}, raise: 422
+ end
+
+ it 'should allow to raise error' do
+ expect do
+ MyUser.create! name: 'John Smith', age: 0
+ end.to raise_error(::Acfs::InvalidResource)
+ end
+ end
end
describe '.allow_requests=' do
context 'when enabled' do
before do
Acfs::Stub.allow_requests = true
- stub_request(:get, 'http://users.example.org/users/2').to_return response({ id: 2, name: 'John', age: 26 })
+ stub_request(:get, 'http://users.example.org/users/2').to_return response(id: 2, name: 'John', age: 26)
end
it 'should allow real requests' do
@user = MyUser.find 2
expect { Acfs.run }.to_not raise_error
@@ -221,8 +267,77 @@
it 'should not allow real requests' do
@user = MyUser.find 2
expect { Acfs.run }.to raise_error(Acfs::RealRequestsNotAllowedError)
end
+ end
+ end
+
+ describe 'accept?' do
+ subject { stub.accept?(op) }
+
+ context 'with a match in params' do
+ let(:op) do
+ double('operation').tap do |op|
+ allow(op).to receive(:full_params).and_return(id: 1337, blub: 'abc')
+ allow(op).to receive(:data).and_return({})
+ end
+ end
+
+ let(:stub) { Acfs::Stub.resource MyUser, :read, with: {id: 1337} }
+
+ it { is_expected.to be true }
+ end
+
+ context 'with a match in data' do
+ let(:op) do
+ double('operation').tap do |op|
+ allow(op).to receive(:full_params).and_return({})
+ allow(op).to receive(:data).and_return(id: 1337, blub: 'abc')
+ end
+ end
+
+ let(:stub) { Acfs::Stub.resource MyUser, :read, with: {id: 1337} }
+
+ it { is_expected.to be true }
+ end
+
+ context 'with no match in params nor data' do
+ let(:op) do
+ double('operation').tap do |op|
+ allow(op).to receive(:full_params).and_return(id: 1337)
+ allow(op).to receive(:data).and_return({})
+ end
+ end
+
+ let(:stub) { Acfs::Stub.resource MyUser, :read, with: {abc: '123'} }
+
+ it { is_expected.to be false }
+ end
+
+ context 'with a wrong match' do
+ let(:op) do
+ double('operation').tap do |op|
+ allow(op).to receive(:full_params).and_return(id: 1337, blub: 'abc')
+ allow(op).to receive(:data).and_return({})
+ end
+ end
+
+ let(:stub) { Acfs::Stub.resource MyUser, :read, with: {id: 1337, blub: '123'} }
+
+ it { is_expected.to be false }
+ end
+
+ context 'with a missing match' do
+ let(:op) do
+ double('operation').tap do |op|
+ allow(op).to receive(:full_params).and_return(id: 1337, blub: 'abc')
+ allow(op).to receive(:data).and_return({})
+ end
+ end
+
+ let(:stub) { Acfs::Stub.resource MyUser, :read, with: {id: 1337, answer: 42} }
+
+ it { is_expected.to be false }
end
end
end