Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'rails_helper'
- RSpec.describe ProjectsController, :type => :controller do
- describe 'GET #show' do
- it 'assigns the requested project to @project' do
- project = create(:public_project)
- user = create(:user)
- get :show, user_name: user.name, project_name: project.name
- expect(assigns(:project)).to eq project
- end
- it 'renders the :show template' do
- project = create(:public_project)
- user = create(:user)
- get :show, user_name: user.name, project_name: project.name
- expect(response).to render_template :show
- end
- end
- describe 'GET #new' do
- it 'renders the :new template' do
- user = create(:user)
- sign_in user
- get :new, user_name: user.name
- expect(response).to render_template :new
- end
- end
- describe 'GET #edit' do
- it 'renders the :edit template' do
- project = create(:public_project)
- user = create(:user)
- sign_in user
- get :edit, user_name: user.name, project_name: project.name
- expect(response).to render_template :edit
- end
- end
- describe 'POST #create' do
- before :each do
- @user = create(:user)
- sign_in @user
- end
- context 'with valid attributes' do
- it 'saves new project to database' do
- expect {
- post :create, user_name: @user.name, project: attributes_for(:project)
- }.to change(Project, :count).by(1)
- end
- it 'redirects to projects path ' do
- post :create, user_name: @user.name, project: attributes_for(:project)
- expect(response).to redirect_to project_path(@user.name, assigns(:project).name)
- end
- end
- context 'with invalid attributes' do
- it 'doesnt save invalid project to database' do
- expect {
- post :create, user_name: @user.name, project: attributes_for(:invalid_project)
- }.to_not change(Project, :count)
- end
- it 'redirects to :new template ' do
- post :create, user_name: @user.name, project: attributes_for(:invalid_project)
- expect(response).to render_template :new
- end
- end
- end
- describe 'PATCH #update' do
- before :each do
- @project = create(:public_project)
- @user = create(:user)
- sign_in @user
- end
- context 'with valid attributes' do
- it 'locates project' do
- patch :update, user_name: @user.name, project_name: @project.name, project: attributes_for(:public_project)
- expect(assigns(:project)).to eq (@project)
- end
- it 'changes project' do
- patch :update, user_name: @user.name, project_name: @project.name,
- project: attributes_for(:public_project,
- title: 'New Title',
- description: 'Test desc')
- @project.reload
- expect(@project.title).to eq('New Title')
- expect(@project.description).to eq('Test desc')
- end
- it 'redirects to projects' do
- patch :update, user_name: @user.name, project_name: @project.name, project: attributes_for(:public_project)
- expect(response).to redirect_to project_path(@user.name, @project.name)
- end
- end
- context 'with invalid attributes' do
- it 'doesnt change project' do
- patch :update, user_name: @user.name, project_name: @project.name,
- project: attributes_for(:public_project,
- title: nil,
- description: 'Test desc')
- @project.reload
- expect(@project.description).to_not eq('Test desc')
- end
- it 'render :edit template' do
- patch :update, user_name: @user.name, project_name: @project.name, project: attributes_for(:invalid_project)
- expect(response).to render_template :edit
- end
- end
- end
- describe 'DELETE #destroy' do
- before :each do
- @project = create(:public_project)
- @user = create(:user)
- sign_in @user
- end
- it 'deletes the project' do
- expect{
- delete :destroy, user_name: @user.name, project_name: @project.name
- }.to change(Project, :count).by(-1)
- end
- it 'redirects to user projects' do
- delete :destroy, user_name: @user.name, project_name: @project.name
- expect(response).to redirect_to user_path(@user.name)
- end
- end
- describe 'PATCH #archive' do
- before :each do
- @project = create(:project)
- @user = create(:user)
- sign_in @user
- end
- it 'archives current project' do
- patch :archive, user_name: @user.name, project_name: @project.name
- @project.reload
- expect(@project.archived).to eq true
- end
- it 'redirects to project view' do
- patch :archive, user_name: @user.name, project_name: @project.name
- expect(response).to redirect_to project_path(@user.name, @project.name)
- end
- end
- describe 'PATCH #unarchive' do
- before :each do
- @project = create(:archived_project)
- @user = create(:user)
- sign_in @user
- end
- it 'unarchives current project' do
- patch :unarchive, user_name: @user.name, project_name: @project.name
- @project.reload
- expect(@project.archived).to eq false
- end
- it 'redirects to project view' do
- patch :unarchive, user_name: @user.name, project_name: @project.name
- expect(response).to redirect_to project_path(@user.name, @project.name)
- end
- end
- describe 'PATCH #trash' do
- before :each do
- @project = create(:project)
- @user = create(:user)
- sign_in @user
- end
- it 'moves project to trash' do
- patch :move_to_trash, project_id: @project.id
- @project.reload
- expect(@project.deleted).to eq true
- end
- it 'redirects to user projects' do
- patch :move_to_trash, project_id: @project.id
- expect(response).to redirect_to user_path(@user.name)
- end
- end
- describe 'PATCH #restore' do
- before :each do
- @deleted_project = create(:deleted_project)
- @user = create(:user)
- sign_in @user
- end
- it 'restores project from trash' do
- patch :restore_from_trash, project_id: @deleted_project.id
- @deleted_project.reload
- expect(@deleted_project.deleted).to eq false
- end
- it 'change name if project with such name exists' do
- @project = create(:project)
- patch :restore_from_trash, project_id: @deleted_project.id
- @deleted_project.reload
- expect(@deleted_project.name).to eq 'lorem_ipsum1'
- expect(@deleted_project.deleted).to eq false
- end
- it 'redirects to user projects' do
- patch :restore_from_trash, project_id: @deleted_project.id
- expect(response).to redirect_to user_path(@user.name)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement