diff options
Diffstat (limited to 'spec/features/admin/admin_runners_spec.rb')
-rw-r--r-- | spec/features/admin/admin_runners_spec.rb | 163 |
1 files changed, 141 insertions, 22 deletions
diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb index 5623e47eadf..ed9c0ea9ac0 100644 --- a/spec/features/admin/admin_runners_spec.rb +++ b/spec/features/admin/admin_runners_spec.rb @@ -2,6 +2,8 @@ require 'spec_helper' describe "Admin Runners" do include StubENV + include FilteredSearchHelpers + include SortingHelper before do stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false') @@ -12,39 +14,156 @@ describe "Admin Runners" do let(:pipeline) { create(:ci_pipeline) } context "when there are runners" do - before do - runner = FactoryBot.create(:ci_runner, contacted_at: Time.now) - FactoryBot.create(:ci_build, pipeline: pipeline, runner_id: runner.id) + it 'has all necessary texts' do + runner = create(:ci_runner, contacted_at: Time.now) + create(:ci_build, pipeline: pipeline, runner_id: runner.id) visit admin_runners_path - end - it 'has all necessary texts' do - expect(page).to have_text "Setup a shared Runner manually" + expect(page).to have_text "Set up a shared Runner manually" expect(page).to have_text "Runners currently online: 1" end - describe 'search' do + describe 'search', :js do before do - FactoryBot.create :ci_runner, description: 'runner-foo' - FactoryBot.create :ci_runner, description: 'runner-bar' + create(:ci_runner, description: 'runner-foo') + create(:ci_runner, description: 'runner-bar') + + visit admin_runners_path 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' + input_filtered_search_keys('runner-foo') 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' + input_filtered_search_keys('runner-baz') + + expect(page).to have_text 'No runners found' + end + end + + describe 'filter by status', :js do + it 'shows correct runner when status matches' do + create(:ci_runner, description: 'runner-active', active: true) + create(:ci_runner, description: 'runner-paused', active: false) + + visit admin_runners_path + + expect(page).to have_content 'runner-active' + expect(page).to have_content 'runner-paused' + + input_filtered_search_keys('status:active') + expect(page).to have_content 'runner-active' + expect(page).not_to have_content 'runner-paused' + end + + it 'shows no runner when status does not match' do + create(:ci_runner, :online, description: 'runner-active', active: true) + create(:ci_runner, :online, description: 'runner-paused', active: false) + + visit admin_runners_path + + input_filtered_search_keys('status:offline') + + expect(page).not_to have_content 'runner-active' + expect(page).not_to have_content 'runner-paused' + + expect(page).to have_text 'No runners found' + end + + it 'shows correct runner when status is selected and search term is entered' do + create(:ci_runner, description: 'runner-a-1', active: true) + create(:ci_runner, description: 'runner-a-2', active: false) + create(:ci_runner, description: 'runner-b-1', active: true) + + visit admin_runners_path + + input_filtered_search_keys('status:active') + expect(page).to have_content 'runner-a-1' + expect(page).to have_content 'runner-b-1' + expect(page).not_to have_content 'runner-a-2' + + input_filtered_search_keys('status:active runner-a') + expect(page).to have_content 'runner-a-1' + expect(page).not_to have_content 'runner-b-1' + expect(page).not_to have_content 'runner-a-2' + end + end + + describe 'filter by type', :js do + it 'shows correct runner when type matches' do + create :ci_runner, :project, description: 'runner-project' + create :ci_runner, :group, description: 'runner-group' + + visit admin_runners_path + + expect(page).to have_content 'runner-project' + expect(page).to have_content 'runner-group' + + input_filtered_search_keys('type:project_type') + expect(page).to have_content 'runner-project' + expect(page).not_to have_content 'runner-group' + end + + it 'shows no runner when type does not match' do + create :ci_runner, :project, description: 'runner-project' + create :ci_runner, :group, description: 'runner-group' + + visit admin_runners_path + + input_filtered_search_keys('type:instance_type') + + expect(page).not_to have_content 'runner-project' + expect(page).not_to have_content 'runner-group' expect(page).to have_text 'No runners found' end + + it 'shows correct runner when type is selected and search term is entered' do + create :ci_runner, :project, description: 'runner-a-1' + create :ci_runner, :instance, description: 'runner-a-2' + create :ci_runner, :project, description: 'runner-b-1' + + visit admin_runners_path + + input_filtered_search_keys('type:project_type') + expect(page).to have_content 'runner-a-1' + expect(page).to have_content 'runner-b-1' + expect(page).not_to have_content 'runner-a-2' + + input_filtered_search_keys('type:project_type runner-a') + expect(page).to have_content 'runner-a-1' + expect(page).not_to have_content 'runner-b-1' + expect(page).not_to have_content 'runner-a-2' + end + end + + it 'sorts by last contact date', :js do + create(:ci_runner, description: 'runner-1', created_at: '2018-07-12 15:37', contacted_at: '2018-07-12 15:37') + create(:ci_runner, description: 'runner-2', created_at: '2018-07-12 16:37', contacted_at: '2018-07-12 16:37') + + visit admin_runners_path + + within '.runners-content .gl-responsive-table-row:nth-child(2)' do + expect(page).to have_content 'runner-2' + end + + within '.runners-content .gl-responsive-table-row:nth-child(3)' do + expect(page).to have_content 'runner-1' + end + + sorting_by 'Last Contact' + + within '.runners-content .gl-responsive-table-row:nth-child(2)' do + expect(page).to have_content 'runner-1' + end + + within '.runners-content .gl-responsive-table-row:nth-child(3)' do + expect(page).to have_content 'runner-2' + end end end @@ -54,7 +173,7 @@ describe "Admin Runners" do end it 'has all necessary texts including no runner message' do - expect(page).to have_text "Setup a shared Runner manually" + expect(page).to have_text "Set up a shared Runner manually" expect(page).to have_text "Runners currently online: 0" expect(page).to have_text 'No runners found' end @@ -76,7 +195,7 @@ describe "Admin Runners" do context 'shared runner' do it 'shows the label and does not show the project count' do - runner = create :ci_runner, :instance + runner = create(:ci_runner, :instance) visit admin_runners_path @@ -89,8 +208,8 @@ describe "Admin Runners" do context 'specific runner' do it 'shows the label and the project count' do - project = create :project - runner = create :ci_runner, :project, projects: [project] + project = create(:project) + runner = create(:ci_runner, :project, projects: [project]) visit admin_runners_path @@ -103,11 +222,11 @@ describe "Admin Runners" do end describe "Runner show page" do - let(:runner) { FactoryBot.create :ci_runner } + let(:runner) { create(:ci_runner) } before do - @project1 = FactoryBot.create(:project) - @project2 = FactoryBot.create(:project) + @project1 = create(:project) + @project2 = create(:project) visit admin_runner_path(runner) end |