spec/lib/azeroth/request_handler/create_spec.rb in azeroth-0.7.0 vs spec/lib/azeroth/request_handler/create_spec.rb in azeroth-0.7.1
- old
+ new
@@ -106,9 +106,92 @@
end
end
end
end
+ context 'with build_with as symbol' do
+ it_behaves_like 'a request handler', status: :created do
+ let(:options_hash) do
+ {
+ build_with: :build_magic_document
+ }
+ end
+
+ let(:extra_params) do
+ {
+ document: {
+ name: 'My Document'
+ }
+ }
+ end
+
+ let(:expected_json) do
+ {
+ 'name' => 'My Document',
+ 'reference' => 'X-MAGIC-15'
+ }
+ end
+
+ it 'creates entry' do
+ expect { handler.process }
+ .to change(Document, :count)
+ .by(1)
+ end
+
+ it 'builds entity with custom method' do
+ handler.process
+
+ expect(Document.last.reference)
+ .to eq('X-MAGIC-15')
+ end
+ end
+ end
+
+ context 'with build_with as block' do
+ it_behaves_like 'a request handler', status: :created do
+ let(:block) do
+ proc do
+ documents.where(reference: 'X-MAGIC-20')
+ .build(document_params)
+ end
+ end
+
+ let(:options_hash) do
+ {
+ build_with: block
+ }
+ end
+
+ let(:extra_params) do
+ {
+ document: {
+ name: 'My Document'
+ }
+ }
+ end
+
+ let(:expected_json) do
+ {
+ 'name' => 'My Document',
+ 'reference' => 'X-MAGIC-20'
+ }
+ end
+
+ it 'creates entry' do
+ expect { handler.process }
+ .to change(Document, :count)
+ .by(1)
+ end
+
+ it 'builds entity with custom method' do
+ handler.process
+
+ expect(Document.last.reference)
+ .to eq('X-MAGIC-20')
+ end
+ end
+ end
+
context 'when payload is invalid' do
it_behaves_like 'a request handler',
status: :unprocessable_entity do
let(:extra_params) do
{