summaryrefslogtreecommitdiff
path: root/spec/services/environments/stop_stale_service_spec.rb
blob: 46d770c30cc457a9cbd3cf2004c277ff048bf8d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Environments::StopStaleService,
               :clean_gitlab_redis_shared_state,
               :sidekiq_inline,
               feature_category: :continuous_delivery do
  let_it_be(:project) { create(:project, :repository) }
  let_it_be(:user) { create(:user) }

  let(:params) { { after: nil } }
  let(:service) { described_class.new(project, user, params) }

  describe '#execute' do
    subject { service.execute }

    let_it_be(:project) { create(:project, :repository) }
    let_it_be(:user) { create(:user) }
    let_it_be(:stale_environment) { create(:environment, project: project, updated_at: 2.weeks.ago) }
    let_it_be(:stale_environment2) { create(:environment, project: project, updated_at: 2.weeks.ago) }
    let_it_be(:recent_environment) { create(:environment, project: project, updated_at: Date.today) }

    let_it_be(:params) { { before: 1.week.ago } }

    before do
      allow(service).to receive(:can?).with(user, :stop_environment, project).and_return(true)
    end

    it 'only stops stale environments' do
      spy_service = Environments::AutoStopWorker.new

      allow(Environments::AutoStopWorker).to receive(:new) { spy_service }

      expect(spy_service).to receive(:perform).with(stale_environment.id).and_call_original
      expect(spy_service).to receive(:perform).with(stale_environment2.id).and_call_original
      expect(spy_service).not_to receive(:perform).with(recent_environment.id)

      expect(Environment).to receive(:deployed_and_updated_before).with(project.id, params[:before]).and_call_original
      expect(Environment).to receive(:without_protected).with(project).and_call_original

      expect(subject.success?).to be_truthy

      expect(stale_environment.reload).to be_stopped
      expect(stale_environment2.reload).to be_stopped
      expect(recent_environment.reload).to be_available
    end
  end
end