require 'rails_helper'
RSpec.describe Guidance, type: :model do
context "validations" do
it { is_expected.to validate_presence_of(:text) }
it { is_expected.to validate_presence_of(:guidance_group) }
it { is_expected.to allow_value(true).for(:published) }
it { is_expected.to allow_value(false).for(:published) }
end
context "associations" do
it { is_expected.to belong_to :guidance_group }
it do
is_expected.to have_and_belong_to_many(:themes)
.join_table("themes_in_guidance")
end
end
describe ".can_view?" do
let!(:user) { create(:user) }
subject { Guidance.can_view?(user, @guidance.id) }
context "when guidance_id is invalid" do
before do
@guidance = Guidance.new(guidance_group: create(:guidance_group))
end
it { is_expected.to eql(false) }
end
context "when guidance's group is nil" do
before do
@guidance = Guidance.new
end
it { is_expected.to eql(false) }
end
context "when owned by a curation center" do
before do
@org = create(:org,
abbreviation: Rails.configuration
.branding.dig(:organisation, :abbreviation))
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(true) }
end
context "when owned by a institution org" do
before do
@org = create(:org, :institution)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(false) }
end
context "when owned by a funder org" do
before do
@org = create(:org, :funder)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(true) }
end
context "when owned by a organisation org" do
before do
@org = create(:org, :organisation)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(false) }
end
context "when owned by a research_institute org" do
before do
@org = create(:org, :research_institute)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(false) }
end
context "when owned by a project org" do
before do
@org = create(:org, :project)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(false) }
end
context "when owned by a school org" do
before do
@org = create(:org, :school)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(false) }
end
context "when owned by an Org which the user is a member" do
before do
@org = user.org
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it { is_expected.to eql(true) }
end
end
describe ".all_viewable" do
let!(:user) { create(:user) }
subject { Guidance.all_viewable(user) }
context "when is owned by managing curation center" do
before do
@org = create(:org,
abbreviation: Rails.configuration
.branding.dig(:organisation, :abbreviation))
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "includes guidance" do
expect(subject).to include(@guidance)
end
end
context "when is owned by institution Org" do
before do
@org = create(:org, :institution)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "excludes guidance" do
expect(subject).not_to include(@guidance)
end
end
context "when is owned by funder Org" do
before do
@org = create(:org, :funder)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "includes guidance" do
expect(subject).to include(@guidance)
end
end
context "when is owned by organisation Org" do
before do
@org = create(:org, :organisation)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "excludes guidance" do
expect(subject).not_to include(@guidance)
end
end
context "when is owned by research_institute Org" do
before do
@org = create(:org, :research_institute)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "excludes guidance" do
expect(subject).not_to include(@guidance)
end
end
context "when is owned by project Org" do
before do
@org = create(:org, :project)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "excludes guidance" do
expect(subject).not_to include(@guidance)
end
end
context "when is owned by school Org" do
before do
@org = create(:org, :school)
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "excludes guidance" do
expect(subject).not_to include(@guidance)
end
end
context "when is owned by User's Org'" do
before do
@org = user.org
@guidance_group = create(:guidance_group, org: @org)
@guidance = create(:guidance, guidance_group: @guidance_group)
end
it "includes guidance" do
expect(subject).to include(@guidance)
end
end
end
describe "#in_group_belonging_to?" do
let!(:org) { create(:org) }
subject { guidance.in_group_belonging_to?(org.id) }
context "when guidance_group is nil" do
let!(:guidance) { Guidance.new }
it { is_expected.to eql(false) }
end
context "when guidance group belongs to given Org" do
let!(:guidance_group) { create(:guidance_group, org: org) }
let!(:guidance) { create(:guidance, guidance_group: guidance_group) }
it { is_expected.to eql(true) }
end
context "when guidance group doesn't belong to given Org" do
let!(:guidance_group) { create(:guidance_group) }
let!(:guidance) { create(:guidance, guidance_group: guidance_group) }
it { is_expected.to eql(false) }
end
end
end