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