summaryrefslogtreecommitdiff
path: root/spec/services/ide/terminal_config_service_spec.rb
blob: 73614f28b06963774ca05de023d49a33683f5434 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Ide::TerminalConfigService do
  let_it_be(:project) { create(:project, :repository) }
  let_it_be(:user) { create(:user) }

  let(:sha) { 'sha' }

  describe '#execute' do
    subject { described_class.new(project, user, sha: sha).execute }

    before do
      project.add_developer(user)

      allow(project.repository).to receive(:blob_data_at).with('sha', anything) do
        config_content
      end
    end

    context 'content is not valid' do
      let(:config_content) { 'invalid content' }

      it 'returns an error' do
        is_expected.to include(
          status: :error,
          message: "Invalid configuration format")
      end
    end

    context 'terminal not defined' do
      let(:config_content) { '{}' }

      it 'returns success' do
        is_expected.to include(
          status: :success,
          terminal: nil)
      end
    end

    context 'terminal enabled' do
      let(:config_content) { 'terminal: {}' }

      it 'returns success' do
        is_expected.to include(
          status: :success,
          terminal: {
            tag_list: [],
            job_variables: [],
            options: { script: ["sleep 60"] }
          })
      end
    end

    context 'custom terminal enabled' do
      let(:config_content) { 'terminal: { before_script: [ls] }' }

      it 'returns success' do
        is_expected.to include(
          status: :success,
          terminal: {
            tag_list: [],
            job_variables: [],
            options: { before_script: ["ls"], script: ["sleep 60"] }
          })
      end
    end
  end
end