Skip to content
Snippets Groups Projects
Commit 6baaa8a9 authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Add new ability check for stopping environment

parent 52bfc0ef
No related branches found
No related tags found
No related merge requests found
class EnvironmentPolicy < BasePolicy
alias_method :environment, :subject
def rules
delegate! @subject.project
delegate! environment.project
if environment.stop_action?
delegate! environment.stop_action
end
if can?(:create_deployment) && can?(:play_build)
can! :stop_environment
end
end
end
Loading
Loading
@@ -5,12 +5,11 @@ module Ci
def execute(branch_name)
@ref = branch_name
 
return unless has_ref?
return unless can?(current_user, :create_deployment, project)
return unless @ref.present?
 
environments.each do |environment|
next unless environment.stop_action?
next unless can?(current_user, :play_build, environment.stop_action)
next unless can?(current_user, :stop_environment, environment)
 
environment.stop_with_action!(current_user)
end
Loading
Loading
@@ -18,10 +17,6 @@ module Ci
 
private
 
def has_ref?
@ref.present?
end
def environments
@environments ||= EnvironmentsFinder
.new(project, current_user, ref: @ref, recently_updated: true)
Loading
Loading
require 'spec_helper'
describe Ci::EnvironmentPolicy do
let(:user) { create(:user) }
let(:project) { create(:project) }
let(:environment) do
create(:environment, :with_review_app, project: project)
end
let(:policies) do
described_class.abilities(user, environment).to_set
end
describe '#rules' do
context 'when user does not have access to the project' do
let(:project) { create(:project, :private) }
it 'does not include ability to stop environment' do
expect(policies).not_to include :stop_environment
end
end
context 'when anonymous user has access to the project' do
let(:project) { create(:project, :public) }
it 'does not include ability to stop environment' do
expect(policies).not_to include :stop_environment
end
end
context 'when team member has access to the project' do
let(:project) { create(:project, :public) }
before do
project.add_master(user)
end
context 'when team member has ability to stop environment' do
it 'does includes ability to stop environment' do
expect(policies).to include :stop_environment
end
end
context 'when team member has no ability to stop environment' do
before do
create(:protected_branch, :no_one_can_push,
name: 'master', project: project)
end
it 'does not include ability to stop environment' do
expect(policies).not_to include :stop_environment
end
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment