155 lines
4.5 KiB
Ruby
155 lines
4.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe NotesController, type: :controller do
|
|
|
|
render_views
|
|
|
|
let(:user) {
|
|
create(:user)
|
|
}
|
|
|
|
let(:valid_attributes) {
|
|
{content: 'text'}
|
|
}
|
|
|
|
let(:invalid_attributes) {
|
|
{content: ''}
|
|
}
|
|
|
|
let(:valid_session) { {user_id: user.id} }
|
|
|
|
describe "GET #index" do
|
|
it "assigns all user notes as @notes" do
|
|
note = create(:note, user: user)
|
|
create(:note)
|
|
get :index, params: {}, session: valid_session
|
|
expect(assigns(:notes)).to eq([note])
|
|
end
|
|
end
|
|
|
|
describe "GET #show" do
|
|
it "assigns the requested note as @note" do
|
|
note = create(:note, user: user)
|
|
get :show, params: {id: note.to_param}, session: valid_session
|
|
expect(assigns(:note)).to eq(note)
|
|
end
|
|
end
|
|
|
|
describe "GET #new" do
|
|
it "assigns a new note as @note" do
|
|
get :new, params: {}, session: valid_session
|
|
expect(assigns(:note)).to be_a_new(Note)
|
|
end
|
|
end
|
|
|
|
describe "GET #edit" do
|
|
it "assigns the requested note as @note" do
|
|
note = create(:note, user: user)
|
|
get :edit, params: {id: note.to_param}, session: valid_session
|
|
expect(assigns(:note)).to eq(note)
|
|
end
|
|
|
|
it 'redirects if note is not owned' do
|
|
note = create(:note)
|
|
get :edit, params: {id: note.to_param}, session: valid_session
|
|
expect(response).to redirect_to(root_path)
|
|
end
|
|
end
|
|
|
|
describe "POST #create" do
|
|
context "with valid params" do
|
|
it "creates a new Note" do
|
|
expect {
|
|
post :create, params: {note: valid_attributes}, session: valid_session
|
|
}.to change(Note, :count).by(1)
|
|
end
|
|
|
|
it "assigns a newly created note as @note" do
|
|
post :create, params: {note: valid_attributes}, session: valid_session
|
|
expect(assigns(:note)).to be_a(Note)
|
|
expect(assigns(:note)).to be_persisted
|
|
end
|
|
|
|
it "redirects to the created note" do
|
|
post :create, params: {note: valid_attributes}, session: valid_session
|
|
expect(response).to redirect_to(Note.last)
|
|
end
|
|
end
|
|
|
|
context "with invalid params" do
|
|
it "assigns a newly created but unsaved note as @note" do
|
|
post :create, params: {note: invalid_attributes}, session: valid_session
|
|
expect(assigns(:note)).to be_a_new(Note)
|
|
end
|
|
|
|
it "re-renders the 'new' template" do
|
|
post :create, params: {note: invalid_attributes}, session: valid_session
|
|
expect(response).to render_template("new")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "PUT #update" do
|
|
context "with valid params" do
|
|
let(:new_attributes) {
|
|
{content: 'new stuff'}
|
|
}
|
|
|
|
it "updates the requested note" do
|
|
note = create(:note, user: user)
|
|
put :update, params: {id: note.to_param, note: new_attributes}, session: valid_session
|
|
note.reload
|
|
expect(note.content).to eq 'new stuff'
|
|
end
|
|
|
|
it "assigns the requested note as @note" do
|
|
note = create(:note, user: user)
|
|
put :update, params: {id: note.to_param, note: valid_attributes}, session: valid_session
|
|
expect(assigns(:note)).to eq(note)
|
|
end
|
|
|
|
it "redirects to the note" do
|
|
note = create(:note, user: user)
|
|
put :update, params: {id: note.to_param, note: valid_attributes}, session: valid_session
|
|
expect(response).to redirect_to(note)
|
|
end
|
|
|
|
it 'redirects if note is not owned' do
|
|
note = create(:note)
|
|
put :update, params: {id: note.to_param, note: valid_attributes}, session: valid_session
|
|
expect(response).to redirect_to(root_path)
|
|
end
|
|
end
|
|
|
|
context "with invalid params" do
|
|
it "assigns the note as @note" do
|
|
note = create(:note, user: user)
|
|
put :update, params: {id: note.to_param, note: invalid_attributes}, session: valid_session
|
|
expect(assigns(:note)).to eq(note)
|
|
end
|
|
|
|
it "re-renders the 'edit' template" do
|
|
note = create(:note, user: user)
|
|
put :update, params: {id: note.to_param, note: invalid_attributes}, session: valid_session
|
|
expect(response).to render_template("edit")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "DELETE #destroy" do
|
|
it "destroys the requested note" do
|
|
note = create(:note, user: user)
|
|
expect {
|
|
delete :destroy, params: {id: note.to_param}, session: valid_session
|
|
}.to change(Note, :count).by(-1)
|
|
end
|
|
|
|
it "redirects to the notes list" do
|
|
note = create(:note, user: user)
|
|
delete :destroy, params: {id: note.to_param}, session: valid_session
|
|
expect(response).to redirect_to(notes_url)
|
|
end
|
|
end
|
|
|
|
end
|