require 'rails_helper'
RSpec.describe QuestionFormat, type: :model do
context "validations" do
it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_uniqueness_of(:title)
.with_message("must be unique") }
it { is_expected.to validate_presence_of(:description) }
it { is_expected.to allow_values(true, false).for(:option_based) }
it { is_expected.not_to allow_value(nil).for(:option_based) }
it { is_expected.to allow_values(:textarea, :textfield, :radiobuttons,
:checkbox, :dropdown, :multiselectbox,
:date, :rda_metadata)
.for(:formattype) }
end
context "associations" do
it { is_expected.to have_many(:questions) }
end
describe ".id_for" do
let!(:format_type) { 'textarea' }
subject { QuestionFormat.id_for(format_type) }
context "when record doesn't exist" do
it "it returns nil" do
# TODO: This behaviour is fixed in the refactors branch
expect(subject).to be_nil
end
end
context "when record exists" do
before do
@question_format = create(:question_format, formattype: "textarea")
end
it "returns the ID for that record" do
expect(subject).to eql(@question_format.id)
end
end
end
describe "#to_s" do
let!(:question_format) { create(:question_format) }
it "returns the title" do
expect(question_format.to_s).to eql(question_format.title)
end
end
describe "#option_based?" do
subject { question_format.option_based? }
context "when question_format option_based is true" do
let!(:question_format) { create(:question_format, option_based: true) }
it { is_expected.to eql(true) }
end
context "when question_format option_based is true" do
let!(:question_format) { create(:question_format, option_based: false) }
it { is_expected.to eql(false) }
end
end
describe "#formattype" do
it "raises an exception when value not recognised" do
expect { subject.formattype = :foo }.to raise_error(ArgumentError)
end
end
end