admin_runners_spec.rb 4.07 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's avatar
Valery Sizov committed
10
      runner = FactoryGirl.create(:ci_runner, contacted_at: Time.now)
11 12
      pipeline = FactoryGirl.create(:ci_pipeline)
      FactoryGirl.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
13
      visit admin_runners_path
14 15
    end

Valery Sizov's avatar
Valery Sizov committed
16 17 18 19
    it 'has all necessary texts' do
      expect(page).to have_text "To register a new Runner"
      expect(page).to have_text "Runners with last contact less than a minute ago: 1"
    end
20 21 22

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

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

Valery Sizov's avatar
Valery Sizov committed
31 32 33 34
      it 'shows correct runner' do
        expect(page).to have_content("runner-foo")
        expect(page).not_to have_content("runner-bar")
      end
35 36 37 38
    end
  end

  describe "Runner show page" do
Valery Sizov's avatar
Valery Sizov committed
39
    let(:runner) { FactoryGirl.create :ci_runner }
40 41

    before do
42 43 44
      @project1 = FactoryGirl.create(:empty_project)
      @project2 = FactoryGirl.create(:empty_project)
      visit admin_runner_path(runner)
45 46 47
    end

    describe 'runner info' do
48
      it { expect(find_field('runner_token').value).to eq runner.token }
49 50 51
    end

    describe 'projects' do
Valery Sizov's avatar
Valery Sizov committed
52 53 54 55
      it 'contains project names' do
        expect(page).to have_content(@project1.name_with_namespace)
        expect(page).to have_content(@project2.name_with_namespace)
      end
56 57 58 59
    end

    describe 'search' do
      before do
60
        search_form = find('#runner-projects-search')
61
        search_form.fill_in 'search', with: @project1.name
62
        search_form.click_button 'Search'
63 64
      end

Valery Sizov's avatar
Valery Sizov committed
65 66 67 68
      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
69
    end
70 71

    describe 'enable/create' do
72
      shared_examples 'assignable runner' do
73 74 75 76 77 78 79 80 81
        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
82 83
      end

84 85 86 87
      context 'with specific runner' do
        before do
          @project1.runners << runner
          visit admin_runner_path(runner)
88 89
        end

90
        it_behaves_like 'assignable runner'
91 92
      end

93 94 95 96 97 98 99 100 101 102
      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

103 104 105 106 107 108
      context 'with shared runner' do
        before do
          @project1.destroy
          runner.update(is_shared: true)
          visit admin_runner_path(runner)
        end
109

110
        it_behaves_like 'assignable runner'
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
      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
130
  end
131 132

  describe 'runners registration token' do
133
    let!(:token) { current_application_settings.runners_registration_token }
134
    before { visit admin_runners_path }
135 136 137 138 139 140 141 142 143 144 145 146 147 148

    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
149
        expect(page_token).not_to eq token
150 151 152
      end
    end
  end
153
end