
Since both projects are developed together and by the same team, we also want to have the same code structure and utility methods available in both projects. Therefore, this commit changes many files, but without a functional change.
119 lines
2.9 KiB
Ruby
119 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe ConsumersController do
|
|
render_views
|
|
|
|
let(:consumer) { create(:consumer) }
|
|
let(:user) { create(:admin) }
|
|
|
|
before { allow(controller).to receive(:current_user).and_return(user) }
|
|
|
|
describe 'POST #create' do
|
|
context 'with a valid consumer' do
|
|
let(:perform_request) { proc { post :create, params: {consumer: build(:consumer, name: 'New Consumer').attributes} } }
|
|
|
|
context 'when the request is performed' do
|
|
before { perform_request.call }
|
|
|
|
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
|
|
end
|
|
|
|
context 'with an invalid consumer' do
|
|
before { post :create, params: {consumer: {}} }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
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
|
|
before { delete :destroy, params: {id: consumer.id} }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
|
|
it 'destroys the consumer' do
|
|
consumer = create(:consumer)
|
|
expect { delete :destroy, params: {id: consumer.id} }.to change(Consumer, :count).by(-1)
|
|
end
|
|
|
|
expect_redirect(:consumers)
|
|
end
|
|
|
|
describe 'GET #edit' do
|
|
before { get :edit, params: {id: consumer.id} }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
expect_http_status(:ok)
|
|
expect_template(:edit)
|
|
end
|
|
|
|
describe 'GET #index' do
|
|
before do
|
|
create_pair(:consumer)
|
|
get :index
|
|
end
|
|
|
|
expect_assigns(consumers: Consumer.all)
|
|
expect_http_status(:ok)
|
|
expect_template(:index)
|
|
end
|
|
|
|
describe 'GET #new' do
|
|
before { get :new }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
expect_http_status(:ok)
|
|
expect_template(:new)
|
|
end
|
|
|
|
describe 'GET #show' do
|
|
before { get :show, params: {id: consumer.id} }
|
|
|
|
expect_assigns(consumer: :consumer)
|
|
expect_http_status(:ok)
|
|
expect_template(:show)
|
|
end
|
|
|
|
describe 'PUT #update' do
|
|
context 'with a valid consumer' do
|
|
before { put :update, params: {consumer: attributes_for(:consumer), id: consumer.id} }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
expect_redirect(:consumer)
|
|
end
|
|
|
|
context 'with an invalid consumer' do
|
|
before { put :update, params: {consumer: {name: ''}, id: consumer.id} }
|
|
|
|
expect_assigns(consumer: Consumer)
|
|
expect_http_status(:ok)
|
|
expect_template(:edit)
|
|
end
|
|
end
|
|
end
|