Skip to content
代码片段 群组 项目
提交 b620584b 编辑于 作者: Miguel Rincon's avatar Miguel Rincon
浏览文件

Handle row for "others" in runner usage breakdown

In some cases, the results for top runners and top projects may render a
last result that provides a total summary of the remainder projects
and runners. This change handles that case.

Changelog: fixed
EE: true
上级 13e55430
No related branches found
No related tags found
无相关合并请求
...@@ -155,14 +155,17 @@ export default { ...@@ -155,14 +155,17 @@ export default {
data-testid="top-projects-table" data-testid="top-projects-table"
> >
<template #cell(project)="{ value }"> <template #cell(project)="{ value }">
<gl-avatar <template v-if="value">
:label="value.name" <gl-avatar
:src="value.avatarUrl" :label="value.name"
shape="rect" :src="value.avatarUrl"
:size="16" shape="rect"
:entity-name="value.name" :size="16"
/> :entity-name="value.name"
<gl-link :href="value.webUrl" class="gl-text-body!">{{ value.name }}</gl-link> />
<gl-link :href="value.webUrl" class="gl-text-body!"> {{ value.name }} </gl-link>
</template>
<template v-else> {{ s__('Runners|Other projects') }} </template>
</template> </template>
<template #cell(ciMinutesUsed)="{ value }">{{ formatNumber(value) }}</template> <template #cell(ciMinutesUsed)="{ value }">{{ formatNumber(value) }}</template>
...@@ -175,7 +178,10 @@ export default { ...@@ -175,7 +178,10 @@ export default {
data-testid="top-runners-table" data-testid="top-runners-table"
> >
<template #cell(runner)="{ value }"> <template #cell(runner)="{ value }">
<gl-link :href="value.adminUrl" class="gl-text-body!">{{ runnerName(value) }}</gl-link> <gl-link v-if="value" :href="value.adminUrl" class="gl-text-body!">
{{ runnerName(value) }}
</gl-link>
<template v-else> {{ s__('Runners|Other runners') }} </template>
</template> </template>
<template #cell(ciMinutesUsed)="{ value }">{{ formatNumber(value) }}</template> <template #cell(ciMinutesUsed)="{ value }">{{ formatNumber(value) }}</template>
</gl-table-lite> </gl-table-lite>
......
...@@ -31,7 +31,7 @@ const mockRunnerUsage = [ ...@@ -31,7 +31,7 @@ const mockRunnerUsage = [
adminUrl: '/admin/runners/1', adminUrl: '/admin/runners/1',
__typename: 'CiRunner', __typename: 'CiRunner',
}, },
ciMinutesUsed: 1001, ciMinutesUsed: 2002,
__typename: 'CiRunnerUsage', __typename: 'CiRunnerUsage',
}, },
{ {
...@@ -42,7 +42,12 @@ const mockRunnerUsage = [ ...@@ -42,7 +42,12 @@ const mockRunnerUsage = [
adminUrl: '/admin/runners/2', adminUrl: '/admin/runners/2',
__typename: 'CiRunner', __typename: 'CiRunner',
}, },
ciMinutesUsed: 11, ciMinutesUsed: 2001,
__typename: 'CiRunnerUsage',
},
{
runner: null,
ciMinutesUsed: 2000,
__typename: 'CiRunnerUsage', __typename: 'CiRunnerUsage',
}, },
]; ];
...@@ -67,7 +72,12 @@ const mockRunnerUsageByProject = [ ...@@ -67,7 +72,12 @@ const mockRunnerUsageByProject = [
webUrl: '/group1/project2', webUrl: '/group1/project2',
__typename: 'Project', __typename: 'Project',
}, },
ciMinutesUsed: 12, ciMinutesUsed: 1001,
__typename: 'CiRunnerUsageByProject',
},
{
project: null,
ciMinutesUsed: 1000,
__typename: 'CiRunnerUsageByProject', __typename: 'CiRunnerUsageByProject',
}, },
]; ];
...@@ -127,10 +137,11 @@ describe('RunnerUsage', () => { ...@@ -127,10 +137,11 @@ describe('RunnerUsage', () => {
it('loads top projects', async () => { it('loads top projects', async () => {
createWrapper({ mountFn: mountExtended }); createWrapper({ mountFn: mountExtended });
await waitForPromises(); await waitForPromises();
const [header, row1, row2] = findTopProjects().wrappers; expect(findTopRunners().length).toBe(4);
const [header, row1, row2, row3] = findTopProjects().wrappers;
expect(header.text()).toContain('Top projects consuming runners'); expect(header.text()).toContain('Top projects consuming runners');
expect(header.text()).toContain('Usage (min)'); expect(header.text()).toContain('Usage (min)');
...@@ -147,26 +158,31 @@ describe('RunnerUsage', () => { ...@@ -147,26 +158,31 @@ describe('RunnerUsage', () => {
src: '/project2.png', src: '/project2.png',
}); });
expect(row2.text()).toContain('Project2'); expect(row2.text()).toContain('Project2');
expect(row2.text()).toContain('12'); expect(row2.text()).toContain('1,001');
expect(row3.text()).toContain('Other projects');
expect(row3.text()).toContain('1,000');
}); });
it('loads top runners', async () => { it('loads top runners', async () => {
createWrapper({ mountFn: mountExtended }); createWrapper({ mountFn: mountExtended });
await waitForPromises(); await waitForPromises();
const [header, row1, row2] = findTopRunners().wrappers.map((w) => w.text()); expect(findTopRunners().length).toBe(4);
const [header, row1, row2, row3] = findTopRunners().wrappers.map((w) => w.text());
expect(header).toContain('Most used instance runners'); expect(header).toContain('Most used instance runners');
expect(header).toContain('Usage (min)'); expect(header).toContain('Usage (min)');
expect(row1).toContain('#1 (sha1)'); expect(row1).toContain('#1 (sha1) - Runner 1');
expect(row1).toContain('Runner 1'); expect(row1).toContain('2,002');
expect(row1).toContain('1,001');
expect(row2).toContain('#2 (sha2) - Runner 2');
expect(row2).toContain('2,001');
expect(row2).toContain('#2 (sha2)'); expect(row3).toContain('Other runners');
expect(row2).toContain('Runner 2'); expect(row3).toContain('2,000');
expect(row2).toContain('11');
}); });
it('calls mutation on button click', async () => { it('calls mutation on button click', async () => {
......
...@@ -42675,6 +42675,12 @@ msgstr "" ...@@ -42675,6 +42675,12 @@ msgstr ""
msgid "Runners|Operating systems" msgid "Runners|Operating systems"
msgstr "" msgstr ""
   
msgid "Runners|Other projects"
msgstr ""
msgid "Runners|Other runners"
msgstr ""
msgid "Runners|Owner" msgid "Runners|Owner"
msgstr "" msgstr ""
   
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册