diff --git a/spec/controllers/consumers_controller_spec.rb b/spec/controllers/consumers_controller_spec.rb index 2766e49f..85d87b15 100644 --- a/spec/controllers/consumers_controller_spec.rb +++ b/spec/controllers/consumers_controller_spec.rb @@ -10,17 +10,18 @@ describe ConsumersController do describe 'POST #create' do context 'with a valid consumer' do - let(:perform_request) { proc { post :create, params: {consumer: attributes_for(:consumer)} } } + let(:perform_request) { proc { post :create, params: {consumer: build(:consumer, name: 'New Consumer').attributes} } } - before { perform_request.call } + context 'when the request is performed' do + before { perform_request.call } - expect_assigns(consumer: Consumer) + expect_assigns(consumer: Consumer) + expect_redirect(Consumer.last) + end it 'creates the consumer' do expect { perform_request.call }.to change(Consumer, :count).by(1) end - - expect_redirect(Consumer.last) end context 'with an invalid consumer' do @@ -30,6 +31,22 @@ describe ConsumersController do expect_http_status(:ok) expect_template(:new) end + + context 'with a duplicated consumer' do + let(:perform_request) { proc { post :create, params: {consumer: build(:consumer).attributes} } } + + context 'when the request is performed' do + before { perform_request.call } + + expect_assigns(consumer: Consumer) + expect_http_status(:ok) + expect_template(:new) + end + + it 'does not create a new consumer' do + expect { perform_request.call }.not_to change(Consumer, :count) + end + end end describe 'DELETE #destroy' do diff --git a/spec/factories/consumer.rb b/spec/factories/consumer.rb index 06d19857..dfc0b437 100644 --- a/spec/factories/consumer.rb +++ b/spec/factories/consumer.rb @@ -3,12 +3,15 @@ FactoryBot.define do factory :consumer do name { 'openHPI' } - oauth_key { SecureRandom.hex } - oauth_secret { SecureRandom.hex } singleton_consumer end trait :singleton_consumer do - initialize_with { Consumer.where(name: name).first_or_create } + initialize_with do + Consumer.find_or_initialize_by(name: name) do |consumer| + consumer.oauth_key = SecureRandom.hex + consumer.oauth_secret = SecureRandom.hex + end + end end end