summaryrefslogtreecommitdiff
path: root/spec/features/runners_spec.rb
blob: e87d52f5c8fe0e216d3f36f7468fe84b3394672a (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
require 'spec_helper'

describe "Runners" do
  include GitlabRoutingHelper

  let(:user) { create(:user) }

  before do
    login_as(user)
  end

  describe "specific runners" do
    before do
      @project = FactoryGirl.create :empty_project, shared_runners_enabled: false
      @project.team << [user, :master]

      @project2 = FactoryGirl.create :empty_project
      @project2.team << [user, :master]

      @project3 = FactoryGirl.create :empty_project
      @project3.team << [user, :developer]

      @shared_runner = FactoryGirl.create :ci_runner, :shared
      @specific_runner = FactoryGirl.create :ci_runner
      @specific_runner2 = FactoryGirl.create :ci_runner
      @specific_runner3 = FactoryGirl.create :ci_runner
      @project.runners << @specific_runner
      @project2.runners << @specific_runner2
      @project3.runners << @specific_runner3

      visit runners_path(@project)
    end

    before do
      expect(page).not_to have_content(@specific_runner3.display_name)
      expect(page).not_to have_content(@specific_runner3.display_name)
    end

    it "places runners in right places" do
      expect(page.find(".available-specific-runners")).to have_content(@specific_runner2.display_name)
      expect(page.find(".activated-specific-runners")).to have_content(@specific_runner.display_name)
      expect(page.find(".available-shared-runners")).to have_content(@shared_runner.display_name)
    end

    it "enables specific runner for project" do
      within ".available-specific-runners" do
        click_on "Enable for this project"
      end

      expect(page.find(".activated-specific-runners")).to have_content(@specific_runner2.display_name)
    end

    it "disables specific runner for project" do
      @project2.runners << @specific_runner
      visit runners_path(@project)

      within ".activated-specific-runners" do
        click_on "Disable for this project"
      end

      expect(page.find(".available-specific-runners")).to have_content(@specific_runner.display_name)
    end

    it "removes specific runner for project if this is last project for that runners" do
      within ".activated-specific-runners" do
        click_on "Remove Runner"
      end

      expect(Ci::Runner.exists?(id: @specific_runner)).to be_falsey
    end
  end

  describe "shared runners" do
    before do
      @project = FactoryGirl.create :empty_project, shared_runners_enabled: false
      @project.team << [user, :master]
      visit runners_path(@project)
    end

    it "enables shared runners" do
      click_on "Enable shared Runners"
      expect(@project.reload.shared_runners_enabled).to be_truthy
    end
  end

  describe "shared runners description" do
    let(:shared_runners_text) { 'custom **shared** runners description' }
    let(:shared_runners_html) { 'custom shared runners description' }

    before do
      stub_application_setting(shared_runners_text: shared_runners_text)
      project = FactoryGirl.create :empty_project, shared_runners_enabled: false
      project.team << [user, :master]
      visit runners_path(project)
    end

    it "sees shared runners description" do
      expect(page.find(".shared-runners-description")).to have_content(shared_runners_html)
    end
  end

  describe "show page" do
    before do
      @project = FactoryGirl.create :empty_project
      @project.team << [user, :master]
      @specific_runner = FactoryGirl.create :ci_runner
      @project.runners << @specific_runner
    end

    it "shows runner information" do
      visit runners_path(@project)
      click_on @specific_runner.short_sha
      expect(page).to have_content(@specific_runner.platform)
    end
  end

  feature 'configuring runners ability to picking untagged jobs' do
    given(:project) { create(:empty_project) }
    given(:runner) { create(:ci_runner) }

    background do
      project.team << [user, :master]
      project.runners << runner
    end

    scenario 'user checks default configuration' do
      visit namespace_project_runner_path(project.namespace, project, runner)

      expect(page).to have_content 'Can run untagged jobs Yes'
    end

    context 'when runner has tags' do
      before do
        runner.update_attribute(:tag_list, ['tag'])
      end

      scenario 'user wants to prevent runner from running untagged job' do
        visit runners_path(project)
        page.within('.activated-specific-runners') do
          first('small > a').click
        end

        uncheck 'runner_run_untagged'
        click_button 'Save changes'

        expect(page).to have_content 'Can run untagged jobs No'
        expect(runner.reload.run_untagged?).to eq false
      end
    end
  end
end