require 'rails_helper'
RSpec.describe ResearchOutput, type: :model do
context "validations" do
subject { build(:research_output) }
it { is_expected.to validate_presence_of(:abbreviation) }
it { is_expected.to validate_presence_of(:fullname) }
it { is_expected.to validate_presence_of(:plan) }
it { is_expected.to validate_presence_of(:type) }
end
context "associations" do
it { is_expected.to belong_to :plan }
it { is_expected.to belong_to :type }
it { is_expected.to have_many :answers }
end
describe ".main?" do
context "when order is equal to 1" do
let!(:research_output) { create(:research_output, order: 1)}
subject { research_output }
it { expect(subject.main?).to eql(true) }
end
context "when order is not equal to 1" do
let!(:research_output) { create(:research_output, order: 2)}
subject { research_output }
it { expect(subject.main?).not_to eql(true) }
end
end
describe ".deep_copy" do
let!(:research_output) { create(:research_output) }
subject { ResearchOutput.deep_copy(research_output) }
it "creates a new record" do
expect(subject).not_to eql(research_output)
end
it "copies the abbreviation attribute" do
expect(subject.abbreviation).to eql(research_output.abbreviation)
end
it "copies the fullname attribute" do
expect(subject.fullname).to eql(research_output.fullname)
end
it "copies the is_default attribute" do
expect(subject.is_default).to eql(research_output.is_default)
end
it "copies the pid attribute" do
expect(subject.pid).to eql(research_output.pid)
end
end
describe "destroy" do
let!(:research_output) { create(:research_output) }
let!(:answer) { create(:answer)}
it "destroys the answer when the research output is destroyed" do
research_output.answers << answer
expect { research_output.destroy }.to change { Answer.count }
end
end
end