gitlab-org--gitlab-foss/spec/models/project_security_spec.rb

113 lines
3.5 KiB
Ruby
Raw Normal View History

2011-10-08 21:36:38 +00:00
require 'spec_helper'
2015-12-09 09:50:51 +00:00
describe Project, models: true do
2016-07-11 22:12:31 +00:00
describe 'authorization' do
before do
@p1 = create(:project)
2012-12-05 15:06:15 +00:00
@u1 = create(:user)
@u2 = create(:user)
2012-12-05 15:06:15 +00:00
@u3 = create(:user)
@u4 = @p1.owner
2012-12-05 15:06:15 +00:00
2011-10-08 21:36:38 +00:00
@abilities = Six.new
@abilities << Ability
end
2012-12-05 15:06:15 +00:00
let(:guest_actions) { Ability.project_guest_rules }
let(:report_actions) { Ability.project_report_rules }
let(:dev_actions) { Ability.project_dev_rules }
let(:master_actions) { Ability.project_master_rules }
2016-03-20 21:55:08 +00:00
let(:owner_actions) { Ability.project_owner_rules }
2012-12-05 15:06:15 +00:00
describe "Non member rules" do
it "should deny for non-project users any actions" do
2016-03-20 21:55:08 +00:00
owner_actions.each do |action|
expect(@abilities.allowed?(@u1, action, @p1)).to be_falsey
2012-12-05 15:06:15 +00:00
end
end
end
describe "Guest Rules" do
before do
@p1.project_members.create(project: @p1, user: @u2, access_level: ProjectMember::GUEST)
2012-12-05 15:06:15 +00:00
end
it "should allow for project user any guest actions" do
guest_actions.each do |action|
expect(@abilities.allowed?(@u2, action, @p1)).to be_truthy
2012-12-05 15:06:15 +00:00
end
end
end
describe "Report Rules" do
before do
@p1.project_members.create(project: @p1, user: @u2, access_level: ProjectMember::REPORTER)
2011-10-08 21:36:38 +00:00
end
2012-12-05 15:06:15 +00:00
it "should allow for project user any report actions" do
report_actions.each do |action|
expect(@abilities.allowed?(@u2, action, @p1)).to be_truthy
2012-12-05 15:06:15 +00:00
end
end
2011-10-08 21:36:38 +00:00
end
2012-12-05 15:06:15 +00:00
describe "Developer Rules" do
before do
@p1.project_members.create(project: @p1, user: @u2, access_level: ProjectMember::REPORTER)
@p1.project_members.create(project: @p1, user: @u3, access_level: ProjectMember::DEVELOPER)
2012-12-05 15:06:15 +00:00
end
it "should deny for developer master-specific actions" do
[dev_actions - report_actions].each do |action|
expect(@abilities.allowed?(@u2, action, @p1)).to be_falsey
2012-12-05 15:06:15 +00:00
end
end
it "should allow for project user any dev actions" do
dev_actions.each do |action|
expect(@abilities.allowed?(@u3, action, @p1)).to be_truthy
2012-12-05 15:06:15 +00:00
end
end
end
describe "Master Rules" do
before do
@p1.project_members.create(project: @p1, user: @u2, access_level: ProjectMember::DEVELOPER)
@p1.project_members.create(project: @p1, user: @u3, access_level: ProjectMember::MASTER)
2011-10-08 21:36:38 +00:00
end
2012-12-05 15:06:15 +00:00
it "should deny for developer master-specific actions" do
[master_actions - dev_actions].each do |action|
expect(@abilities.allowed?(@u2, action, @p1)).to be_falsey
2012-12-05 15:06:15 +00:00
end
end
it "should allow for project user any master actions" do
master_actions.each do |action|
expect(@abilities.allowed?(@u3, action, @p1)).to be_truthy
2012-12-05 15:06:15 +00:00
end
end
2011-10-08 21:36:38 +00:00
end
2016-03-20 21:55:08 +00:00
describe "Owner Rules" do
before do
@p1.project_members.create(project: @p1, user: @u2, access_level: ProjectMember::DEVELOPER)
@p1.project_members.create(project: @p1, user: @u3, access_level: ProjectMember::MASTER)
2011-10-08 21:36:38 +00:00
end
2012-12-05 15:06:15 +00:00
it "should deny for masters admin-specific actions" do
2016-03-20 21:55:08 +00:00
[owner_actions - master_actions].each do |action|
expect(@abilities.allowed?(@u2, action, @p1)).to be_falsey
2012-12-05 15:06:15 +00:00
end
end
it "should allow for project owner any admin actions" do
2016-03-20 21:55:08 +00:00
owner_actions.each do |action|
expect(@abilities.allowed?(@u4, action, @p1)).to be_truthy
2012-12-05 15:06:15 +00:00
end
end
2011-10-08 21:36:38 +00:00
end
end
end