92 lines
3.2 KiB
Ruby
92 lines
3.2 KiB
Ruby
|
require 'spec_helper'
|
||
|
|
||
|
describe ProjectFeature do
|
||
|
let(:project) { create(:project) }
|
||
|
let(:user) { create(:user) }
|
||
|
|
||
|
describe '#feature_available?' do
|
||
|
let(:features) { %w(issues wiki builds merge_requests snippets) }
|
||
|
|
||
|
context 'when features are disabled' do
|
||
|
it "returns false" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::DISABLED)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(false)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when features are enabled only for team members' do
|
||
|
it "returns false when user is not a team member" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::PRIVATE)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "returns true when user is a team member" do
|
||
|
project.team << [user, :developer]
|
||
|
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::PRIVATE)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "returns true when user is a member of project group" do
|
||
|
group = create(:group)
|
||
|
project = create(:project, namespace: group)
|
||
|
group.add_developer(user)
|
||
|
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::PRIVATE)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "returns true if user is an admin" do
|
||
|
user.update_attribute(:admin, true)
|
||
|
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::PRIVATE)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when feature is enabled for everyone' do
|
||
|
it "returns true" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::ENABLED)
|
||
|
expect(project.feature_available?(:issues, user)).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#*_enabled?' do
|
||
|
let(:features) { %w(wiki builds merge_requests) }
|
||
|
|
||
|
it "returns false when feature is disabled" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::DISABLED)
|
||
|
expect(project.public_send("#{feature}_enabled?")).to eq(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "returns true when feature is enabled only for team members" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::PRIVATE)
|
||
|
expect(project.public_send("#{feature}_enabled?")).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "returns true when feature is enabled for everyone" do
|
||
|
features.each do |feature|
|
||
|
project.project_feature.update_attribute("#{feature}_access_level".to_sym, ProjectFeature::ENABLED)
|
||
|
expect(project.public_send("#{feature}_enabled?")).to eq(true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|