131 lines
4.4 KiB
Ruby
131 lines
4.4 KiB
Ruby
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
|