Files
codeocean/spec/controllers/consumers_controller_spec.rb
Sebastian Serth 99bd46af1a Align project files with CodeHarbor
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.
2023-10-11 00:18:33 +02:00

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