/
Matslex
/
ProjectDevelopmentFinal
Обзор
Документация
Войти
/
Matslex
/
ProjectDevelopmentFinal
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
spec/controllers/projects_controller_spec.rb
163 строки
4 KB
Matslex
Final
18 июл 2025, 14:58
18 июл 2025, 14:58
8495507
Код
Авторство
О чём код?
require 'rails_helper' RSpec.describe ProjectsController, type: :controller do let(:user) { create(:user) } let(:other_user) { create(:user) } let!(:project) { create(:project, user: user) } let!(:other_project) { create(:project, user: other_user) } before { sign_in user } describe 'GET #index' do context 'when user is logged in' do it 'renders the index template' do get :index expect(response).to render_template(:index) end it 'assigns all user projects' do get :index expect(assigns(:projects)).to match_array(user.projects) end end context 'when user is not logged in' do before { sign_out user } it 'redirects to login page' do get :index expect(response).to redirect_to(new_user_session_path) end end end describe 'GET #show' do it 'renders the show template for own project' do get :show, params: { id: project.id } expect(response).to render_template(:show) end it 'raises error for another user project' do expect { get :show, params: { id: other_project.id } }.to raise_error(ActiveRecord::RecordNotFound) end end describe 'GET #edit' do context 'own project' do it 'renders the edit template' do get :edit, params: { id: project.id } expect(response).to render_template(:edit) end it 'assigns the requested project' do get :edit, params: { id: project.id } expect(assigns(:project)).to eq(project) end end context 'another user project' do it 'raises ActiveRecord::RecordNotFound' do expect { get :edit, params: { id: other_project.id } }.to raise_error(ActiveRecord::RecordNotFound) end end end describe 'GET #new' do it 'renders the new template' do get :new expect(response).to render_template(:new) end it 'assigns a new project' do get :new expect(assigns(:project)).to be_a_new(Project) end end describe 'POST #create' do context 'with valid params' do it 'creates a new project' do expect { post :create, params: { project: { title: 'New Project' } } }.to change(Project, :count).by(1) end it 'redirects to the created project' do post :create, params: { project: { title: 'New Project' } } expect(response).to redirect_to(Project.last) end end context 'with invalid params' do it 'does not create a new project' do expect { post :create, params: { project: { title: '' } } }.not_to change(Project, :count) end it 'renders the new template again' do post :create, params: { project: { title: '' } } expect(response).to render_template(:new) end end end describe 'PATCH #update' do context 'own project' do it 'updates the project with valid params' do patch :update, params: { id: project.id, project: { title: 'Updated Title' } } project.reload expect(project.title).to eq('Updated Title') expect(response).to redirect_to(project) end it 'does not update the project with invalid params' do patch :update, params: { id: project.id, project: { title: '' } } project.reload expect(project.title).not_to eq('') expect(response).to render_template(:edit) end end context 'another user project' do it 'raises ActiveRecord::RecordNotFound' do expect { patch :update, params: { id: other_project.id, project: { title: 'Hack' } } }.to raise_error(ActiveRecord::RecordNotFound) end end end describe 'DELETE #destroy' do context 'own project' do it 'deletes the project' do expect { delete :destroy, params: { id: project.id } }.to change(Project, :count).by(-1) end it 'redirects to projects list' do delete :destroy, params: { id: project.id } expect(response).to redirect_to(projects_path) end end context 'another user project' do it 'does not delete the project and redirects to root' do expect { begin delete :destroy, params: { id: other_project.id } rescue ActiveRecord::RecordNotFound # suppress error so test continues end }.not_to change(Project, :count) end end end end