Rails RSpec test - запретить удаление комментария для пользователя, который не является его автором - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь проверить действие «уничтожить» для моего контроллера вложенных комментариев.

В моем приложении filmweb есть область действия и проверки, которые не позволяют пользователям удалять комментарии, которые не являются авторами.В веб-версии все работает хорошо, но я не знаю, как проверить этот случай.

Вот мой коммент_контроллера

def destroy
 @comment = @movie.comments.find(params[:id])

if @comment.destroy
  flash[:notice] = 'Comment successfully deleted'
else
  flash[:alert] = 'You are not the author of this comment'
end
redirect_to @movie
end

Модель комментариев

class Comment < ApplicationRecord
 belongs_to :user
 belongs_to :movie

 validates :body, presence: true
 validates :user, :movie, presence: true
 validates :user, uniqueness: { scope: :movie }

 scope :persisted, -> { where.not(id: nil) }
end

Модель пользователяhas_many :comments, dependent: :destroy Модель фильма has_many :comments, dependent: :destroy.Я использую devise и FactoryBot, спецификации здесь:

describe "DELETE #destroy" do
  let(:user) { FactoryBot.create(:user) }
  let(:movie) { FactoryBot.create(:movie) }
  let(:other_user) { FactoryBot.create(:user, user_id: 100)}

  it "doesn't delete comment" do
    sign_in(other_user)
    comment = FactoryBot.create(:comment, movie: movie, user: user)

    expect do
      delete :destroy, params: { id: comment.id, movie_id: movie.id }
    end.to_not change(Comment, :count)
    expect(flash[:alert]).to eq "You are not the author of this comment"
  end
end

У меня ошибка undefined method `user_id=' for #<User:0x00007fb049644d20>, и я не знаю, как это можно сделать.

=== РЕДАКТИРОВАТЬ ===

Вот мой FactoryBot

FactoryBot.define do
  factory :user do
    email { Faker::Internet.email }
    password "password"
    confirmed_at 1.day.ago
  end

  factory :unconfirmed_user do
    email { Faker::Internet.email }
    password "password"
  end
end

1 Ответ

0 голосов
/ 20 декабря 2018

Проблема в том, что в таблице users нет столбца user_id, который вы пытаетесь использовать в экземпляре other_user, имя столбца просто id:

let(:other_user) { FactoryBot.create :user, id: 100 } 

Вы можетеполностью пропустите идентификатор, он автоматически получит другой идентификатор:

let(:other_user) { FactoryBot.create :user }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...