Commit 965bb0d6 authored by Jacques Erasmus's avatar Jacques Erasmus

Merge branch '330969-update-admin-runner-spec' into 'master'

Update admin runners spec

See merge request gitlab-org/gitlab!65738
parents 7d8e54ba b2040ca9
<script> <script>
import { cloneDeep } from 'lodash'; import { cloneDeep } from 'lodash';
import { __, s__ } from '~/locale'; import { formatNumber, sprintf, __, s__ } from '~/locale';
import { OPERATOR_IS_ONLY } from '~/vue_shared/components/filtered_search_bar/constants'; import { OPERATOR_IS_ONLY } from '~/vue_shared/components/filtered_search_bar/constants';
import FilteredSearch from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue'; import FilteredSearch from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue';
import BaseToken from '~/vue_shared/components/filtered_search_bar/tokens/base_token.vue'; import BaseToken from '~/vue_shared/components/filtered_search_bar/tokens/base_token.vue';
...@@ -58,6 +58,10 @@ export default { ...@@ -58,6 +58,10 @@ export default {
type: String, type: String,
required: true, required: true,
}, },
activeRunnersCount: {
type: Number,
required: true,
},
}, },
data() { data() {
// filtered_search_bar_root.vue may mutate the inital // filtered_search_bar_root.vue may mutate the inital
...@@ -119,6 +123,11 @@ export default { ...@@ -119,6 +123,11 @@ export default {
}, },
]; ];
}, },
activeRunnersMessage() {
return sprintf(__('Runners currently online: %{active_runners_count}'), {
active_runners_count: formatNumber(this.activeRunnersCount),
});
},
}, },
methods: { methods: {
onFilter(filters) { onFilter(filters) {
...@@ -144,6 +153,7 @@ export default { ...@@ -144,6 +153,7 @@ export default {
}; };
</script> </script>
<template> <template>
<div>
<filtered-search <filtered-search
v-bind="$attrs" v-bind="$attrs"
:namespace="namespace" :namespace="namespace"
...@@ -153,7 +163,10 @@ export default { ...@@ -153,7 +163,10 @@ export default {
:initial-sort-by="initialSortBy" :initial-sort-by="initialSortBy"
:tokens="searchTokens" :tokens="searchTokens"
:search-input-placeholder="__('Search or filter results...')" :search-input-placeholder="__('Search or filter results...')"
data-testid="runners-filtered-search"
@onFilter="onFilter" @onFilter="onFilter"
@onSort="onSort" @onSort="onSort"
/> />
<div class="gl-text-right" data-testid="active-runners-message">{{ activeRunnersMessage }}</div>
</div>
</template> </template>
<script> <script>
import { GlTable, GlTooltipDirective, GlSkeletonLoader } from '@gitlab/ui'; import { GlTable, GlTooltipDirective, GlSkeletonLoader } from '@gitlab/ui';
import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import { formatNumber, sprintf, __, s__ } from '~/locale'; import { formatNumber, __, s__ } from '~/locale';
import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue'; import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue';
import { RUNNER_JOB_COUNT_LIMIT } from '../constants'; import { RUNNER_JOB_COUNT_LIMIT } from '../constants';
import RunnerActionsCell from './cells/runner_actions_cell.vue'; import RunnerActionsCell from './cells/runner_actions_cell.vue';
...@@ -52,17 +52,6 @@ export default { ...@@ -52,17 +52,6 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
activeRunnersCount: {
type: Number,
required: true,
},
},
computed: {
activeRunnersMessage() {
return sprintf(__('Runners currently online: %{active_runners_count}'), {
active_runners_count: formatNumber(this.activeRunnersCount),
});
},
}, },
methods: { methods: {
formatProjectCount(projectCount) { formatProjectCount(projectCount) {
...@@ -101,12 +90,12 @@ export default { ...@@ -101,12 +90,12 @@ export default {
</script> </script>
<template> <template>
<div> <div>
<div class="gl-text-right" data-testid="active-runners-message">{{ activeRunnersMessage }}</div>
<gl-table <gl-table
:busy="loading" :busy="loading"
:items="runners" :items="runners"
:fields="$options.fields" :fields="$options.fields"
:tbody-tr-attr="runnerTrAttr" :tbody-tr-attr="runnerTrAttr"
data-testid="runner-list"
stacked="md" stacked="md"
fixed fixed
> >
......
...@@ -12,7 +12,8 @@ export const initRunnerList = (selector = '#js-runner-list') => { ...@@ -12,7 +12,8 @@ export const initRunnerList = (selector = '#js-runner-list') => {
return null; return null;
} }
// TODO `activeRunnersCount` should be implemented using a GraphQL API. // TODO `activeRunnersCount` should be implemented using a GraphQL API
// https://gitlab.com/gitlab-org/gitlab/-/issues/333806
const { activeRunnersCount, registrationToken, runnerInstallHelpPage } = el.dataset; const { activeRunnersCount, registrationToken, runnerInstallHelpPage } = el.dataset;
const apolloProvider = new VueApollo({ const apolloProvider = new VueApollo({
......
...@@ -116,17 +116,17 @@ export default { ...@@ -116,17 +116,17 @@ export default {
</div> </div>
</div> </div>
<runner-filtered-search-bar v-model="search" namespace="admin_runners" /> <runner-filtered-search-bar
v-model="search"
namespace="admin_runners"
:active-runners-count="activeRunnersCount"
/>
<div v-if="noRunnersFound" class="gl-text-center gl-p-5"> <div v-if="noRunnersFound" class="gl-text-center gl-p-5">
{{ __('No runners found') }} {{ __('No runners found') }}
</div> </div>
<template v-else> <template v-else>
<runner-list <runner-list :runners="runners.items" :loading="runnersLoading" />
:runners="runners.items"
:loading="runnersLoading"
:active-runners-count="activeRunnersCount"
/>
<runner-pagination v-model="search.pagination" :page-info="runners.pageInfo" /> <runner-pagination v-model="search.pagination" :page-info="runners.pageInfo" />
</template> </template>
</div> </div>
......
...@@ -4,8 +4,6 @@ require 'spec_helper' ...@@ -4,8 +4,6 @@ require 'spec_helper'
RSpec.describe "Admin Runners" do RSpec.describe "Admin Runners" do
include StubENV include StubENV
include FilteredSearchHelpers
include SortingHelper
before do before do
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false') stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
...@@ -14,31 +12,68 @@ RSpec.describe "Admin Runners" do ...@@ -14,31 +12,68 @@ RSpec.describe "Admin Runners" do
gitlab_enable_admin_mode_sign_in(admin) gitlab_enable_admin_mode_sign_in(admin)
end end
describe "Runners page" do describe "Runners page", :js do
let(:pipeline) { create(:ci_pipeline) } let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) }
before do let_it_be(:namespace) { create(:namespace) }
stub_feature_flags(runner_list_view_vue_ui: false) let_it_be(:project) { create(:project, namespace: namespace, creator: user) }
end
context "when there are runners" do context "when there are runners" do
it 'has all necessary texts' do it 'has all necessary texts' do
runner = create(:ci_runner, contacted_at: Time.now) create(:ci_runner, :instance, contacted_at: Time.now)
create(:ci_build, pipeline: pipeline, runner_id: runner.id)
visit admin_runners_path visit admin_runners_path
expect(page).to have_text "Set up a shared runner manually" expect(page).to have_text "Set up a shared runner manually"
expect(page).to have_text "Runners currently online: 1" expect(page).to have_text "Runners currently online: 1"
end end
describe 'search', :js do it 'with an instance runner shows an instance badge and no project count' do
runner = create(:ci_runner, :instance)
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'shared'
expect(page).to have_text 'n/a'
end
end
it 'with a group runner shows a group badge and no project count' do
runner = create(:ci_runner, :group, groups: [group])
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'group'
expect(page).to have_text 'n/a'
end
end
it 'with a project runner shows a project badge and project count' do
runner = create(:ci_runner, :project, projects: [project])
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'specific'
expect(page).to have_text '1'
end
end
describe 'search' do
before do before do
create(:ci_runner, description: 'runner-foo') create(:ci_runner, :instance, description: 'runner-foo')
create(:ci_runner, description: 'runner-bar') create(:ci_runner, :instance, description: 'runner-bar')
visit admin_runners_path visit admin_runners_path
end end
it 'shows runners' do
expect(page).to have_content("runner-foo")
expect(page).to have_content("runner-bar")
end
it 'shows correct runner when description matches' do it 'shows correct runner when description matches' do
input_filtered_search_keys('runner-foo') input_filtered_search_keys('runner-foo')
...@@ -53,28 +88,29 @@ RSpec.describe "Admin Runners" do ...@@ -53,28 +88,29 @@ RSpec.describe "Admin Runners" do
end end
end end
describe 'filter by status', :js do describe 'filter by status' do
it 'shows correct runner when status matches' do it 'shows correct runner when status matches' do
create(:ci_runner, description: 'runner-active', active: true) create(:ci_runner, :instance, description: 'runner-active', active: true)
create(:ci_runner, description: 'runner-paused', active: false) create(:ci_runner, :instance, description: 'runner-paused', active: false)
visit admin_runners_path visit admin_runners_path
expect(page).to have_content 'runner-active' expect(page).to have_content 'runner-active'
expect(page).to have_content 'runner-paused' expect(page).to have_content 'runner-paused'
input_filtered_search_keys('status:=active') input_filtered_search_filter_is_only('Status', 'Active')
expect(page).to have_content 'runner-active' expect(page).to have_content 'runner-active'
expect(page).not_to have_content 'runner-paused' expect(page).not_to have_content 'runner-paused'
end end
it 'shows no runner when status does not match' do it 'shows no runner when status does not match' do
create(:ci_runner, :online, description: 'runner-active', active: true) create(:ci_runner, :instance, description: 'runner-active', active: true)
create(:ci_runner, :online, description: 'runner-paused', active: false) create(:ci_runner, :instance, description: 'runner-paused', active: false)
visit admin_runners_path visit admin_runners_path
input_filtered_search_keys('status:=offline') input_filtered_search_filter_is_only('Status', 'Online')
expect(page).not_to have_content 'runner-active' expect(page).not_to have_content 'runner-active'
expect(page).not_to have_content 'runner-paused' expect(page).not_to have_content 'runner-paused'
...@@ -83,46 +119,48 @@ RSpec.describe "Admin Runners" do ...@@ -83,46 +119,48 @@ RSpec.describe "Admin Runners" do
end end
it 'shows correct runner when status is selected and search term is entered' do 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, :instance, description: 'runner-a-1', active: true)
create(:ci_runner, description: 'runner-a-2', active: false) create(:ci_runner, :instance, description: 'runner-a-2', active: false)
create(:ci_runner, description: 'runner-b-1', active: true) create(:ci_runner, :instance, description: 'runner-b-1', active: true)
visit admin_runners_path visit admin_runners_path
input_filtered_search_keys('status:=active') input_filtered_search_filter_is_only('Status', 'Active')
expect(page).to have_content 'runner-a-1' expect(page).to have_content 'runner-a-1'
expect(page).to have_content 'runner-b-1' expect(page).to have_content 'runner-b-1'
expect(page).not_to have_content 'runner-a-2' expect(page).not_to have_content 'runner-a-2'
input_filtered_search_keys('status:=active runner-a') input_filtered_search_keys('runner-a')
expect(page).to have_content 'runner-a-1' expect(page).to have_content 'runner-a-1'
expect(page).not_to have_content 'runner-b-1' expect(page).not_to have_content 'runner-b-1'
expect(page).not_to have_content 'runner-a-2' expect(page).not_to have_content 'runner-a-2'
end end
end end
describe 'filter by type', :js do describe 'filter by type' do
it 'shows correct runner when type matches' do before do
create :ci_runner, :project, description: 'runner-project' create(:ci_runner, :project, description: 'runner-project', projects: [project])
create :ci_runner, :group, description: 'runner-group' create(:ci_runner, :group, description: 'runner-group', groups: [group])
end
it 'shows correct runner when type matches' do
visit admin_runners_path visit admin_runners_path
expect(page).to have_content 'runner-project' expect(page).to have_content 'runner-project'
expect(page).to have_content 'runner-group' expect(page).to have_content 'runner-group'
input_filtered_search_keys('type:=project_type') input_filtered_search_filter_is_only('Type', 'project')
expect(page).to have_content 'runner-project' expect(page).to have_content 'runner-project'
expect(page).not_to have_content 'runner-group' expect(page).not_to have_content 'runner-group'
end end
it 'shows no runner when type does not match' do 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 visit admin_runners_path
input_filtered_search_keys('type:=instance_type') input_filtered_search_filter_is_only('Type', 'instance')
expect(page).not_to have_content 'runner-project' expect(page).not_to have_content 'runner-project'
expect(page).not_to have_content 'runner-group' expect(page).not_to have_content 'runner-group'
...@@ -131,95 +169,93 @@ RSpec.describe "Admin Runners" do ...@@ -131,95 +169,93 @@ RSpec.describe "Admin Runners" do
end end
it 'shows correct runner when type is selected and search term is entered' do 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, :project, description: 'runner-2-project', projects: [project])
create :ci_runner, :instance, description: 'runner-a-2'
create :ci_runner, :project, description: 'runner-b-1'
visit admin_runners_path visit admin_runners_path
input_filtered_search_keys('type:=project_type') input_filtered_search_filter_is_only('Type', 'project')
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-project'
expect(page).to have_content 'runner-a-1' expect(page).to have_content 'runner-2-project'
expect(page).not_to have_content 'runner-b-1' expect(page).not_to have_content 'runner-group'
expect(page).not_to have_content 'runner-a-2'
input_filtered_search_keys('runner-project')
expect(page).to have_content 'runner-project'
expect(page).not_to have_content 'runner-2-project'
expect(page).not_to have_content 'runner-group'
end end
end end
describe 'filter by tag', :js do describe 'filter by tag' do
it 'shows correct runner when tag matches' do before do
create :ci_runner, description: 'runner-blue', tag_list: ['blue'] create(:ci_runner, :instance, description: 'runner-blue', tag_list: ['blue'])
create :ci_runner, description: 'runner-red', tag_list: ['red'] create(:ci_runner, :instance, description: 'runner-red', tag_list: ['red'])
end
it 'shows correct runner when tag matches' do
visit admin_runners_path visit admin_runners_path
expect(page).to have_content 'runner-blue' expect(page).to have_content 'runner-blue'
expect(page).to have_content 'runner-red' expect(page).to have_content 'runner-red'
input_filtered_search_keys('tag:=blue') input_filtered_search_filter_is_only('Tags', 'blue')
expect(page).to have_content 'runner-blue' expect(page).to have_content 'runner-blue'
expect(page).not_to have_content 'runner-red' expect(page).not_to have_content 'runner-red'
end end
it 'shows no runner when tag does not match' do it 'shows no runner when tag does not match' do
create :ci_runner, description: 'runner-blue', tag_list: ['blue']
create :ci_runner, description: 'runner-red', tag_list: ['blue']
visit admin_runners_path visit admin_runners_path
input_filtered_search_keys('tag:=red') input_filtered_search_filter_is_only('Tags', 'green')
expect(page).not_to have_content 'runner-blue'
expect(page).not_to have_content 'runner-blue' expect(page).not_to have_content 'runner-blue'
expect(page).to have_text 'No runners found' expect(page).to have_text 'No runners found'
end end
it 'shows correct runner when tag is selected and search term is entered' do it 'shows correct runner when tag is selected and search term is entered' do
create :ci_runner, description: 'runner-a-1', tag_list: ['blue'] create(:ci_runner, :instance, description: 'runner-2-blue', tag_list: ['blue'])
create :ci_runner, description: 'runner-a-2', tag_list: ['red']
create :ci_runner, description: 'runner-b-1', tag_list: ['blue']
visit admin_runners_path visit admin_runners_path
input_filtered_search_keys('tag:=blue') input_filtered_search_filter_is_only('Tags', 'blue')
expect(page).to have_content 'runner-a-1' expect(page).to have_content 'runner-blue'
expect(page).to have_content 'runner-b-1' expect(page).to have_content 'runner-2-blue'
expect(page).not_to have_content 'runner-a-2' expect(page).not_to have_content 'runner-red'
input_filtered_search_keys('tag:=blue runner-a') input_filtered_search_keys('runner-2-blue')
expect(page).to have_content 'runner-a-1' expect(page).to have_content 'runner-2-blue'
expect(page).not_to have_content 'runner-b-1' expect(page).not_to have_content 'runner-blue'
expect(page).not_to have_content 'runner-a-2' expect(page).not_to have_content 'runner-red'
end end
end end
it 'sorts by last contact date', :js do it 'sorts by last contact date' do
create(:ci_runner, description: 'runner-1', created_at: '2018-07-12 15:37', contacted_at: '2018-07-12 15:37') create(:ci_runner, :instance, 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') create(:ci_runner, :instance, description: 'runner-2', created_at: '2018-07-12 16:37', contacted_at: '2018-07-12 16:37')
visit admin_runners_path visit admin_runners_path
within '[data-testid="runners-table"] .gl-responsive-table-row:nth-child(2)' do within '[data-testid="runner-list"] tbody tr:nth-child(1)' do
expect(page).to have_content 'runner-2' expect(page).to have_content 'runner-2'
end end
within '[data-testid="runners-table"] .gl-responsive-table-row:nth-child(3)' do within '[data-testid="runner-list"] tbody tr:nth-child(2)' do
expect(page).to have_content 'runner-1' expect(page).to have_content 'runner-1'
end end
sorting_by 'Last Contact' click_on 'Created date' # Open "sort by" dropdown
click_on 'Last contact'
click_on 'Sort direction: Descending'
within '[data-testid="runners-table"] .gl-responsive-table-row:nth-child(2)' do within '[data-testid="runner-list"] tbody tr:nth-child(1)' do
expect(page).to have_content 'runner-1' expect(page).to have_content 'runner-1'
end end
within '[data-testid="runners-table"] .gl-responsive-table-row:nth-child(3)' do within '[data-testid="runner-list"] tbody tr:nth-child(2)' do
expect(page).to have_content 'runner-2' expect(page).to have_content 'runner-2'
end end
end end
...@@ -237,47 +273,6 @@ RSpec.describe "Admin Runners" do ...@@ -237,47 +273,6 @@ RSpec.describe "Admin Runners" do
end end
end end
context 'group runner' do
let(:group) { create(:group) }
let!(:runner) { create(:ci_runner, :group, groups: [group]) }
it 'shows the label and does not show the project count' do
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'group'
expect(page).to have_text 'n/a'
end
end
end
context 'shared runner' do
it 'shows the label and does not show the project count' do
runner = create(:ci_runner, :instance)
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'shared'
expect(page).to have_text 'n/a'
end
end
end
context 'specific runner' do
it 'shows the label and the project count' do
project = create(:project)
runner = create(:ci_runner, :project, projects: [project])
visit admin_runners_path
within "[data-testid='runner-row-#{runner.id}']" do
expect(page).to have_selector '.badge', text: 'specific'
expect(page).to have_text '1'
end
end
end
describe 'runners registration token' do describe 'runners registration token' do
let!(:token) { Gitlab::CurrentSettings.runners_registration_token } let!(:token) { Gitlab::CurrentSettings.runners_registration_token }
...@@ -286,17 +281,23 @@ RSpec.describe "Admin Runners" do ...@@ -286,17 +281,23 @@ RSpec.describe "Admin Runners" do
end end
it 'has a registration token' do it 'has a registration token' do
expect(page.find('[data-testid="registration_token"]')).to have_content(token) click_on 'Click to reveal'
expect(page.find('[data-testid="registration-token"]')).to have_content(token)
end end
describe 'reset registration token' do describe 'reset registration token' do
let(:page_token) { find('[data-testid="registration_token"]').text } let(:page_token) { find('[data-testid="registration-token"]').text }
before do before do
click_button 'Reset registration token' click_button 'Reset registration token'
page.accept_alert
wait_for_requests
end end
it 'changes registration token' do it 'changes registration token' do
click_on 'Click to reveal'
expect(page_token).not_to eq token expect(page_token).not_to eq token
end end
end end
...@@ -409,4 +410,43 @@ RSpec.describe "Admin Runners" do ...@@ -409,4 +410,43 @@ RSpec.describe "Admin Runners" do
end end
end end
end end
private
def search_bar_selector
'[data-testid="runners-filtered-search"]'
end
# The filters must be clicked first to be able to receive events
# See: https://gitlab.com/gitlab-org/gitlab-ui/-/issues/1493
def focus_filtered_search
page.within(search_bar_selector) do
page.find('.gl-filtered-search-term-token').click
end
end
def input_filtered_search_keys(search_term)
focus_filtered_search
page.within(search_bar_selector) do
page.find('input').send_keys(search_term)
click_on 'Search'
end
end
def input_filtered_search_filter_is_only(filter, value)
focus_filtered_search
page.within(search_bar_selector) do
click_on filter
# For OPERATOR_IS_ONLY, clicking the filter
# immediately preselects "=" operator
page.find('input').send_keys(value)
page.find('input').send_keys(:enter)
click_on 'Search'
end
end
end end
...@@ -13,6 +13,7 @@ describe('RunnerList', () => { ...@@ -13,6 +13,7 @@ describe('RunnerList', () => {
const findFilteredSearch = () => wrapper.findComponent(FilteredSearch); const findFilteredSearch = () => wrapper.findComponent(FilteredSearch);
const findGlFilteredSearch = () => wrapper.findComponent(GlFilteredSearch); const findGlFilteredSearch = () => wrapper.findComponent(GlFilteredSearch);
const findSortOptions = () => wrapper.findAllComponents(GlDropdownItem); const findSortOptions = () => wrapper.findAllComponents(GlDropdownItem);
const findActiveRunnersMessage = () => wrapper.findByTestId('active-runners-message');
const mockDefaultSort = 'CREATED_DESC'; const mockDefaultSort = 'CREATED_DESC';
const mockOtherSort = 'CONTACTED_DESC'; const mockOtherSort = 'CONTACTED_DESC';
...@@ -20,6 +21,7 @@ describe('RunnerList', () => { ...@@ -20,6 +21,7 @@ describe('RunnerList', () => {
{ type: PARAM_KEY_STATUS, value: { data: 'ACTIVE', operator: '=' } }, { type: PARAM_KEY_STATUS, value: { data: 'ACTIVE', operator: '=' } },
{ type: 'filtered-search-term', value: { data: '' } }, { type: 'filtered-search-term', value: { data: '' } },
]; ];
const mockActiveRunnersCount = 2;
const createComponent = ({ props = {}, options = {} } = {}) => { const createComponent = ({ props = {}, options = {} } = {}) => {
wrapper = extendedWrapper( wrapper = extendedWrapper(
...@@ -30,6 +32,7 @@ describe('RunnerList', () => { ...@@ -30,6 +32,7 @@ describe('RunnerList', () => {
filters: [], filters: [],
sort: mockDefaultSort, sort: mockDefaultSort,
}, },
activeRunnersCount: mockActiveRunnersCount,
...props, ...props,
}, },
stubs: { stubs: {
...@@ -55,6 +58,18 @@ describe('RunnerList', () => { ...@@ -55,6 +58,18 @@ describe('RunnerList', () => {
expect(findFilteredSearch().props('namespace')).toBe('runners'); expect(findFilteredSearch().props('namespace')).toBe('runners');
}); });
it('Displays an active runner count', () => {
expect(findActiveRunnersMessage().text()).toBe(
`Runners currently online: ${mockActiveRunnersCount}`,
);
});
it('Displays a large active runner count', () => {
createComponent({ props: { activeRunnersCount: 2000 } });
expect(findActiveRunnersMessage().text()).toBe('Runners currently online: 2,000');
});
it('sets sorting options', () => { it('sets sorting options', () => {
const SORT_OPTIONS_COUNT = 2; const SORT_OPTIONS_COUNT = 2;
......
...@@ -12,7 +12,6 @@ const mockActiveRunnersCount = mockRunners.length; ...@@ -12,7 +12,6 @@ const mockActiveRunnersCount = mockRunners.length;
describe('RunnerList', () => { describe('RunnerList', () => {
let wrapper; let wrapper;
const findActiveRunnersMessage = () => wrapper.findByTestId('active-runners-message');
const findSkeletonLoader = () => wrapper.findComponent(GlSkeletonLoader); const findSkeletonLoader = () => wrapper.findComponent(GlSkeletonLoader);
const findTable = () => wrapper.findComponent(GlTable); const findTable = () => wrapper.findComponent(GlTable);
const findHeaders = () => wrapper.findAll('th'); const findHeaders = () => wrapper.findAll('th');
...@@ -40,18 +39,6 @@ describe('RunnerList', () => { ...@@ -40,18 +39,6 @@ describe('RunnerList', () => {
wrapper.destroy(); wrapper.destroy();
}); });
it('Displays active runner count', () => {
expect(findActiveRunnersMessage().text()).toBe(
`Runners currently online: ${mockActiveRunnersCount}`,
);
});
it('Displays a large active runner count', () => {
createComponent({ props: { activeRunnersCount: 2000 } });
expect(findActiveRunnersMessage().text()).toBe('Runners currently online: 2,000');
});
it('Displays headers', () => { it('Displays headers', () => {
const headerLabels = findHeaders().wrappers.map((w) => w.text()); const headerLabels = findHeaders().wrappers.map((w) => w.text());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment