require 'rails_helper'
RSpec.describe GuidanceGroup, type: :model do
context "validations" do
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_presence_of(:org) }
it { is_expected.to allow_value(true).for(:optional_subset) }
it { is_expected.to allow_value(true).for(:published) }
it { is_expected.to allow_value(false).for(:optional_subset) }
it { is_expected.to allow_value(false).for(:published) }
end
context "associations" do
it { is_expected.to belong_to :org }
it { is_expected.to have_many :guidances }
end
describe ".can_view?" do
let!(:user) { create(:user) }
let!(:guidance_group) { create(:guidance_group) }
subject { GuidanceGroup.can_view?(user, guidance_group) }
context "when owned by an Org which the user is a member" do
let!(:guidance_group) { create(:guidance_group, org: user.org) }
it { is_expected.to eql(true) }
end
context "when owned by a curation center" do
let!(:org) do
create(:org,
abbreviation: Rails.configuration
.branding.dig(:organisation, :abbreviation))
end
let!(:guidance_group) { create(:guidance_group, org: org) }
it { is_expected.to eql(true) }
end
context "when owned by a institution org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :institution))
end
it { is_expected.to eql(false) }
end
context "when owned by a funder org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :funder))
end
it { is_expected.to eql(true) }
end
context "when owned by a organisation org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :organisation))
end
it { is_expected.to eql(false) }
end
context "when owned by a research_institute org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :research_institute))
end
it { is_expected.to eql(false) }
end
context "when owned by a project org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :project))
end
it { is_expected.to eql(false) }
end
context "when owned by a school org" do
let!(:guidance_group) do
create(:guidance_group, org: create(:org, :school))
end
it { is_expected.to eql(false) }
end
end
describe ".all_viewable" do
let!(:user) { create(:user) }
subject { GuidanceGroup.all_viewable(user) }
context "when is owned by managing curation center" do
let!(:org) do
create(:org,
abbreviation: Rails.configuration
.branding.dig(:organisation, :abbreviation))
end
let!(:guidance_group) { create(:guidance_group, org: org) }
it "includes guidance group" do
expect(subject).to include(guidance_group)
end
end
context "when is owned by institution Org" do
let!(:org) { create(:org, :institution) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "excludes guidance group" do
expect(subject).not_to include(guidance_group)
end
end
context "when is owned by funder Org" do
let!(:org) { create(:org, :funder) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "includes guidance group" do
expect(subject).to include(guidance_group)
end
end
context "when is owned by organisation Org" do
let!(:org) { create(:org, :organisation) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "excludes guidance group" do
expect(subject).not_to include(guidance_group)
end
end
context "when is owned by research_institute Org" do
let!(:org) { create(:org, :research_institute) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "excludes guidance group" do
expect(subject).not_to include(guidance_group)
end
end
context "when is owned by project Org" do
let!(:org) { create(:org, :project) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "excludes guidance group" do
expect(subject).not_to include(guidance_group)
end
end
context "when is owned by school Org" do
let!(:org) { create(:org, :school) }
let!(:guidance_group) { create(:guidance_group, org: org) }
it "excludes guidance group" do
expect(subject).not_to include(guidance_group)
end
end
end
end