require 'rails_helper' RSpec.describe Section, type: :model do it_behaves_like "VersionableModel" context "validations" do it { is_expected.to validate_presence_of(:title) } it { is_expected.to validate_presence_of(:number) } it { is_expected.to validate_presence_of(:phase) } it "validates uniqueness of number" do subject.versionable_id = SecureRandom.uuid expect(subject).to validate_uniqueness_of(:number) .scoped_to(:phase_id) .with_message("must be unique") end it { is_expected.to allow_values(true, false).for(:modifiable) } end context "associations" do it { is_expected.to belong_to :phase } it { is_expected.not_to belong_to :organisation } it { is_expected.to have_one :template } it { is_expected.to have_many :questions } end describe "#num_answered_questions" do let!(:phase) { create(:phase, template: template) } let!(:section) { create(:section, phase: phase) } subject { section.num_answered_questions(plan) } context "when plan is nil" do let!(:plan) { nil } let!(:template) { create(:template) } it { is_expected.to be_zero } end context "when plan is present" do let!(:plan) { create(:plan) } let!(:template) { plan.template } before do question = create(:question, section: section) create(:answer, question: question, plan: plan, text: '') question = create(:question, section: section) create(:answer, question: question, plan: plan) question = create(:question, section: section) create(:answer, question: question, plan: plan) end it "is expected to return the number of valid answered questions" do expect(subject).to eql(2) end end end end