Add Model changes to work with votation_types
This commit is contained in:
131
spec/models/poll/pair_answer_spec.rb
Normal file
131
spec/models/poll/pair_answer_spec.rb
Normal file
@@ -0,0 +1,131 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Poll::PairAnswer do
|
||||
|
||||
describe "validations" do
|
||||
|
||||
let(:pair_answer) { build(:poll_pair_answer) }
|
||||
|
||||
it "is valid" do
|
||||
expect(pair_answer).to be_valid
|
||||
end
|
||||
|
||||
it "is not valid wihout a question" do
|
||||
pair_answer.question = nil
|
||||
|
||||
expect(pair_answer).not_to be_valid
|
||||
end
|
||||
|
||||
it "is not valid without an author" do
|
||||
pair_answer.author = nil
|
||||
|
||||
expect(pair_answer).not_to be_valid
|
||||
end
|
||||
|
||||
it "is valid if answer_left is included in the Poll::Question's question_answers list" do
|
||||
question = create(:poll_question)
|
||||
answer1 = create(:poll_question_answer, title: "One", question: question)
|
||||
answer2 = create(:poll_question_answer, title: "Two", question: question)
|
||||
answer3 = create(:poll_question_answer, title: "Three")
|
||||
|
||||
expect(build(:poll_pair_answer, question: question, answer_left: answer1)).to be_valid
|
||||
expect(build(:poll_pair_answer, question: question, answer_left: answer2)).to be_valid
|
||||
expect(build(:poll_pair_answer, question: question, answer_left: answer3)).not_to be_valid
|
||||
end
|
||||
|
||||
it "is valid if answer_right is included in the Poll::Question's question_answers list" do
|
||||
question = create(:poll_question)
|
||||
answer1 = create(:poll_question_answer, title: "One", question: question)
|
||||
answer2 = create(:poll_question_answer, title: "Two", question: question)
|
||||
answer3 = create(:poll_question_answer, title: "Three")
|
||||
|
||||
expect(build(:poll_pair_answer, question: question, answer_right: answer1)).to be_valid
|
||||
expect(build(:poll_pair_answer, question: question, answer_right: answer2)).to be_valid
|
||||
expect(build(:poll_pair_answer, question: question, answer_right: answer3)).not_to be_valid
|
||||
end
|
||||
end
|
||||
|
||||
context "scopes" do
|
||||
let(:pair_answer_1) { create(:poll_pair_answer) }
|
||||
let(:pair_answer_2) { create(:poll_pair_answer) }
|
||||
|
||||
describe "#by_author" do
|
||||
|
||||
it "returns pair_answers associated to an user" do
|
||||
author = pair_answer_1.author
|
||||
|
||||
expect(described_class.by_author(author)).to include(pair_answer_1)
|
||||
expect(described_class.by_author(author)).not_to include(pair_answer_2)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "#by_question" do
|
||||
|
||||
it "returns pair_answers associated to a question" do
|
||||
question = pair_answer_1.question
|
||||
|
||||
expect(described_class.by_question(question)).to include(pair_answer_1)
|
||||
expect(described_class.by_question(question)).not_to include(pair_answer_2)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
describe "#generate_pair" do
|
||||
let(:user) { create(:user) }
|
||||
let(:question) { create(:poll_question) }
|
||||
|
||||
context "without question_answers" do
|
||||
|
||||
it "assigns nil value to pair_answers" do
|
||||
pair_answer = described_class.generate_pair(question, user)
|
||||
|
||||
expect(pair_answer).to be_a Poll::PairAnswer
|
||||
expect(pair_answer.question).to eq(question)
|
||||
expect(pair_answer.author).to eq(user)
|
||||
expect(pair_answer.answer_left).to be_nil
|
||||
expect(pair_answer.answer_right).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context "With question answers" do
|
||||
let!(:answer1) { create(:poll_question_answer, question: question) }
|
||||
|
||||
it "assigns only right question if only has one question_answer" do
|
||||
pair_answer = described_class.generate_pair(question, user)
|
||||
|
||||
expect(pair_answer).to be_a Poll::PairAnswer
|
||||
expect(pair_answer.question).to eq(question)
|
||||
expect(pair_answer.author).to eq(user)
|
||||
expect(pair_answer.answer_left).to eq(answer1)
|
||||
expect(pair_answer.answer_right).to be_nil
|
||||
end
|
||||
|
||||
it "assigns random values if question has some question_answer" do
|
||||
create(:poll_question_answer, question: question)
|
||||
|
||||
pair_answer = described_class.generate_pair(question, user)
|
||||
|
||||
expect(pair_answer).to be_a Poll::PairAnswer
|
||||
expect(pair_answer.question).to eq(question)
|
||||
expect(pair_answer.author).to eq(user)
|
||||
expect(pair_answer.answer_left).to be_a Poll::Question::Answer
|
||||
expect(pair_answer.answer_right).to be_a Poll::Question::Answer
|
||||
expect(pair_answer.answer_left).not_to eq(pair_answer.answer_right)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#answers" do
|
||||
let(:pair_answer) { create(:poll_pair_answer) }
|
||||
|
||||
it "returns and array of answers" do
|
||||
expect(pair_answer.answers).to be_a Array
|
||||
expect(pair_answer.answers[0]).to eq(pair_answer.answer_left)
|
||||
expect(pair_answer.answers[1]).to eq(pair_answer.answer_right)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user