admin_runners_spec.rb 4.89 KB
Newer Older
1 2 3
require 'spec_helper'

describe "Admin Runners" do
4 5
  include StubENV

6
  before do
7
    stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
8
    sign_in(create(:admin))
9 10 11
  end

  describe "Runners page" do
12 13 14 15 16 17 18 19 20 21
    let(:pipeline) { create(:ci_pipeline) }

    context "when there are runners" do
      before do
        runner = FactoryGirl.create(:ci_runner, contacted_at: Time.now)
        FactoryGirl.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
        visit admin_runners_path
      end

      it 'has all necessary texts' do
22
        expect(page).to have_text "How to setup"
23 24
        expect(page).to have_text "Runners with last contact more than a minute ago: 1"
      end
25

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
      describe 'search' do
        before do
          FactoryGirl.create :ci_runner, description: 'runner-foo'
          FactoryGirl.create :ci_runner, description: 'runner-bar'
        end

        it 'shows correct runner when description matches' do
          search_form = find('#runners-search')
          search_form.fill_in 'search', with: 'runner-foo'
          search_form.click_button 'Search'

          expect(page).to have_content("runner-foo")
          expect(page).not_to have_content("runner-bar")
        end

        it 'shows no runner when description does not match' do
          search_form = find('#runners-search')
          search_form.fill_in 'search', with: 'runner-baz'
          search_form.click_button 'Search'

          expect(page).to have_text 'No runners found'
        end
      end
Valery Sizov's avatar
Valery Sizov committed
49
    end
50

51
    context "when there are no runners" do
52
      before do
53
        visit admin_runners_path
54 55
      end

56 57 58 59
      it 'has all necessary texts including no runner message' do
        expect(page).to have_text "To register a new Runner"
        expect(page).to have_text "Runners with last contact more than a minute ago: 0"
        expect(page).to have_text 'No runners found'
Valery Sizov's avatar
Valery Sizov committed
60
      end
61 62 63 64
    end
  end

  describe "Runner show page" do
Valery Sizov's avatar
Valery Sizov committed
65
    let(:runner) { FactoryGirl.create :ci_runner }
66 67

    before do
68 69 70
      @project1 = FactoryGirl.create(:empty_project)
      @project2 = FactoryGirl.create(:empty_project)
      visit admin_runner_path(runner)
71 72 73
    end

    describe 'runner info' do
74
      it { expect(find_field('runner_token').value).to eq runner.token }
75 76 77
    end

    describe 'projects' do
Valery Sizov's avatar
Valery Sizov committed
78 79 80 81
      it 'contains project names' do
        expect(page).to have_content(@project1.name_with_namespace)
        expect(page).to have_content(@project2.name_with_namespace)
      end
82 83 84 85
    end

    describe 'search' do
      before do
86
        search_form = find('#runner-projects-search')
87
        search_form.fill_in 'search', with: @project1.name
88
        search_form.click_button 'Search'
89 90
      end

Valery Sizov's avatar
Valery Sizov committed
91 92 93 94
      it 'contains name of correct project' do
        expect(page).to have_content(@project1.name_with_namespace)
        expect(page).not_to have_content(@project2.name_with_namespace)
      end
95
    end
96 97

    describe 'enable/create' do
98
      shared_examples 'assignable runner' do
99 100 101 102 103 104 105 106 107
        it 'enables a runner for a project' do
          within '.unassigned-projects' do
            click_on 'Enable'
          end

          assigned_project = page.find('.assigned-projects')

          expect(assigned_project).to have_content(@project2.path)
        end
108 109
      end

110 111 112 113
      context 'with specific runner' do
        before do
          @project1.runners << runner
          visit admin_runner_path(runner)
114 115
        end

116
        it_behaves_like 'assignable runner'
117 118
      end

119 120 121 122 123 124 125 126 127 128
      context 'with locked runner' do
        before do
          runner.update(locked: true)
          @project1.runners << runner
          visit admin_runner_path(runner)
        end

        it_behaves_like 'assignable runner'
      end

129 130 131 132 133 134
      context 'with shared runner' do
        before do
          @project1.destroy
          runner.update(is_shared: true)
          visit admin_runner_path(runner)
        end
135

136
        it_behaves_like 'assignable runner'
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
      end
    end

    describe 'disable/destroy' do
      before do
        @project1.runners << runner
        visit admin_runner_path(runner)
      end

      it 'enables specific runner for project' do
        within '.assigned-projects' do
          click_on 'Disable'
        end

        new_runner_project = page.find('.unassigned-projects')

        expect(new_runner_project).to have_content(@project1.path)
      end
    end
156
  end
157 158

  describe 'runners registration token' do
159
    let!(:token) { current_application_settings.runners_registration_token }
160 161 162 163

    before do
      visit admin_runners_path
    end
164 165

    it 'has a registration token' do
166
      expect(page.find('.help-callout li:nth-of-type(3)')).to have_content(token)
167 168 169
    end

    describe 'reload registration token' do
170
      let(:page_token) { find('.help-callout li:nth-of-type(3) code').text }
171 172 173 174 175 176

      before do
        click_button 'Reset runners registration token'
      end

      it 'changes registration token' do
177
        expect(page_token).not_to eq token
178 179 180
      end
    end
  end
181
end