Skip to content

Commit 002ab21

Browse files
daniel-illiamaierhofer
authored andcommitted
Yield on PeopleManagerController#create
1 parent 9afbe1b commit 002ab21

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

app/controllers/people_managers_controller.rb

+7-4
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ def new
2121

2222
def create
2323
assign_attributes
24-
if entry.save
25-
redirect_to redirect_to_path
26-
else
27-
render :new
24+
ActiveRecord::Base.transaction do
25+
if entry.save
26+
yield entry if block_given?
27+
redirect_to redirect_to_path
28+
else
29+
render :new
30+
end
2831
end
2932
end
3033

spec/controllers/people_managers_controller_spec.rb

+21
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,25 @@ def params
4949
expect { entry.reload }.not_to raise_error
5050
end
5151
end
52+
53+
context '#create' do
54+
let(:params) do
55+
attr = described_class.assoc == :people_managers ? :manager_id : :managed_id
56+
{ person_id: people(:bottom_leader).id, people_manager: { attr => people(:bottom_member).id } }
57+
end
58+
59+
it 'yields' do
60+
expect_any_instance_of(PeopleManager).to receive(:call_on_yielded)
61+
62+
expect { post :create, params: params }.to change { PeopleManager.count }.by(1)
63+
end
64+
65+
it 'does not create entry if yielded block raises error' do
66+
expect_any_instance_of(PeopleManager).to receive(:call_on_yielded).and_raise('baaad stuff')
67+
68+
expect { post :create, params: params }.
69+
to raise_error('baaad stuff').
70+
and not_change { PeopleManager.count }
71+
end
72+
end
5273
end

spec/controllers/person/manageds_controller_spec.rb

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
require_relative '../people_managers_controller_spec'
1010

1111
describe Person::ManagedsController do
12+
it_behaves_like 'people_managers#create'
1213
it_behaves_like 'people_managers#destroy'
1314
end

spec/controllers/person/managers_controller_spec.rb

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
require_relative '../people_managers_controller_spec'
1010

1111
describe Person::ManagersController do
12+
it_behaves_like 'people_managers#create'
1213
it_behaves_like 'people_managers#destroy'
1314
end

0 commit comments

Comments
 (0)