spec/auth/roles/role_spec.rb in ddr-models-1.17.1 vs spec/auth/roles/role_spec.rb in ddr-models-2.0.0.pre.1

- old
+ new

@@ -2,24 +2,53 @@ module Roles RSpec.describe Role do let(:agent) { "bob@example.com" } - describe "default scope" do - it "should be 'resource'" do - expect(described_class.build(type: "Curator", agent: agent).scope.first).to eq("resource") + describe "equality" do + subject { described_class.build(type: "Viewer", agent: "public", scope: "policy") } + describe "when two roles have the same type, agent and scope" do + let(:other) { described_class.build(type: "Viewer", agent: "public", scope: "policy") } + it { should eq(other) } + it { should eql(other) } end end + describe "scope" do + describe "default scope" do + subject { described_class.build(type: "Curator", agent: agent) } + its(:scope) { should eq([described_class::DEFAULT_SCOPE]) } + end + describe "#in_resource_scope?" do + describe "when scope == 'resource'" do + subject { described_class.build(type: "Curator", agent: agent, scope: "resource") } + it { should be_in_resource_scope } + end + describe "when scope != 'resource'" do + subject { described_class.build(type: "Curator", agent: agent, scope: "policy") } + it { should_not be_in_resource_scope } + end + end + describe "#in_policy_scope?" do + describe "when scope != 'policy'" do + subject { described_class.build(type: "Curator", agent: agent, scope: "resource") } + it { should_not be_in_policy_scope } + end + describe "when scope == 'policy'" do + subject { described_class.build(type: "Curator", agent: agent, scope: "policy") } + it { should be_in_policy_scope } + end + end + end + describe "validation" do it "should require the presence of an agent" do expect { described_class.build(type: "Curator", scope: "resource") }.to raise_error expect { described_class.build(type: "Curator", agent: nil, scope: "resource") }.to raise_error expect { described_class.build(type: "Curator", agent: "", scope: "resource") }.to raise_error end it "should require a valid scope" do - expect { described_class.build(type: "Curator", agent: agent, scope: nil) }.to raise_error expect { described_class.build(type: "Curator", agent: agent, scope: "") }.to raise_error expect { described_class.build(type: "Curator", agent: agent, scope: "other") }.to raise_error end it "should require a valid type" do expect { described_class.build(agent: agent, scope: "policy") }.to raise_error @@ -27,19 +56,25 @@ expect { described_class.build(type: "", agent: agent, scope: "policy") }.to raise_error expect { described_class.build(type: "Invalid", agent: agent, scope: "policy") }.to raise_error end end + describe "serialization / deserialization" do + subject { FactoryGirl.build(:role, :curator, :person, :resource) } + it { should eq(described_class.deserialize(subject.serialize)) } + it { should eq(described_class.from_json(subject.to_json)) } + end + Roles.type_map.each_key do |type| describe "#{type} role type" do Roles::SCOPES.each do |scope| describe "#{scope} scope" do subject { described_class.build(type: type, agent: agent, scope: scope) } it { is_expected.to be_valid } its(:role_type) { is_expected.to eq([type]) } its(:agent) { is_expected.to eq([agent]) } its(:scope) { is_expected.to eq([scope]) } - its(:to_h) { is_expected.to eq({type: type, agent: agent, scope: scope}) } + its(:to_h) { is_expected.to eq({"role_type"=>[type], "agent"=>[agent], "scope"=>[scope]}) } its(:permissions) { is_expected.to eq(Roles.type_map[type].permissions) } it "should be isomorphic" do expect(subject).to eq(described_class.build(type: type, agent: agent, scope: scope)) end end