BigW Consortium Gitlab

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

describe "Admin Runners" do
  before do
5
    login_as :admin
6 7 8 9
  end

  describe "Runners page" do
    before do
Valery Sizov committed
10
      runner = FactoryGirl.create(:ci_runner)
11 12
      pipeline = FactoryGirl.create(:ci_pipeline)
      FactoryGirl.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
13
      visit admin_runners_path
14 15 16 17 18 19 20 21
    end

    it { page.has_text? "Manage Runners" }
    it { page.has_text? "To register a new runner" }
    it { page.has_text? "Runners with last contact less than a minute ago: 1" }

    describe 'search' do
      before do
22 23
        FactoryGirl.create :ci_runner, description: 'runner-foo'
        FactoryGirl.create :ci_runner, description: 'runner-bar'
24

25
        search_form = find('#runners-search')
26
        search_form.fill_in 'search', with: 'runner-foo'
27
        search_form.click_button 'Search'
28 29
      end

30 31
      it { expect(page).to have_content("runner-foo") }
      it { expect(page).not_to have_content("runner-bar") }
32 33 34 35
    end
  end

  describe "Runner show page" do
Valery Sizov committed
36
    let(:runner) { FactoryGirl.create :ci_runner }
37 38

    before do
39 40 41
      @project1 = FactoryGirl.create(:empty_project)
      @project2 = FactoryGirl.create(:empty_project)
      visit admin_runner_path(runner)
42 43 44
    end

    describe 'runner info' do
45
      it { expect(find_field('runner_token').value).to eq runner.token }
46 47 48
    end

    describe 'projects' do
49 50
      it { expect(page).to have_content(@project1.name_with_namespace) }
      it { expect(page).to have_content(@project2.name_with_namespace) }
51 52 53 54
    end

    describe 'search' do
      before do
55
        search_form = find('#runner-projects-search')
56
        search_form.fill_in 'search', with: @project1.name
57
        search_form.click_button 'Search'
58 59
      end

60 61
      it { expect(page).to have_content(@project1.name_with_namespace) }
      it { expect(page).not_to have_content(@project2.name_with_namespace) }
62
    end
63 64

    describe 'enable/create' do
65
      shared_examples 'assignable runner' do
66 67 68 69 70 71 72 73 74
        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
75 76
      end

77 78 79 80
      context 'with specific runner' do
        before do
          @project1.runners << runner
          visit admin_runner_path(runner)
81 82
        end

83
        it_behaves_like 'assignable runner'
84 85
      end

86 87 88 89 90 91 92 93 94 95
      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

96 97 98 99 100 101
      context 'with shared runner' do
        before do
          @project1.destroy
          runner.update(is_shared: true)
          visit admin_runner_path(runner)
        end
102

103
        it_behaves_like 'assignable runner'
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
      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
123
  end
124 125

  describe 'runners registration token' do
126
    let!(:token) { current_application_settings.runners_registration_token }
127
    before { visit admin_runners_path }
128 129 130 131 132 133 134 135 136 137 138 139 140 141

    it 'has a registration token' do
      expect(page).to have_content("Registration token is #{token}")
      expect(page).to have_selector('#runners-token', text: token)
    end

    describe 'reload registration token' do
      let(:page_token) { find('#runners-token').text }

      before do
        click_button 'Reset runners registration token'
      end

      it 'changes registration token' do
142
        expect(page_token).not_to eq token
143 144 145
      end
    end
  end
146
end