Skip to content

Commit 4950c41

Browse files
committed
Added manage buttons on admin task-groups page
1 parent 004f5d4 commit 4950c41

File tree

8 files changed

+82
-11
lines changed

8 files changed

+82
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* Removed usage of DB_ENGINE and SQLITE_PATH variables (\#643);
1010
* Displayed `timestamp_last_used` property in task-group info modal (\#643);
1111
* Viewer paths page improvements (\#643);
12+
* Added manage buttons on admin task-groups page (\#643);
1213

1314
# 1.10.1
1415

playwright.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export default defineConfig({
107107

108108
webServer: [
109109
{
110-
command: './tests/start-test-server.sh 2.9.0a2',
110+
command: './tests/start-test-server.sh 2.9.0a4',
111111
port: 8000,
112112
waitForPort: true,
113113
stdout: 'pipe',

src/lib/components/v2/tasks/TaskGroupActivities.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
if (activityId && !isNaN(Number(activityId))) {
155155
task_group_activity_id = Number(activityId);
156156
}
157-
if (!admin) {
157+
if (!admin || task_group_activity_id !== null) {
158158
await searchActivities();
159159
}
160160
updateTasksCollectionTimeout = setTimeout(

src/lib/components/v2/tasks/TaskGroupManageModal.svelte

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import { displayStandardErrorAlert, getAlertErrorFromResponse } from '$lib/common/errors';
44
import Modal from '../../common/Modal.svelte';
55
6+
/** @type {boolean} */
7+
export let admin;
8+
69
/** @type {Modal} */
710
let modal;
811
@@ -36,7 +39,9 @@
3639
headers.append('Content-Type', 'application/json');
3740
3841
const response = await fetch(
39-
`/api/v2/task-group/${taskGroup?.id}/${active ? 'reactivate' : 'deactivate'}/`,
42+
`/api/${admin ? 'admin/' : ''}v2/task-group/${taskGroup?.id}/${
43+
active ? 'reactivate' : 'deactivate'
44+
}/`,
4045
{
4146
method: 'POST',
4247
credentials: 'include',
@@ -48,7 +53,8 @@
4853
4954
if (response.ok) {
5055
const result = await response.json();
51-
goto(`/v2/tasks/activities?activity_id=${result.id}`);
56+
const page = admin ? `/v2/admin/task-groups/activities` : `/v2/tasks/activities`;
57+
goto(`${page}?activity_id=${result.id}`);
5258
modal.hide();
5359
} else {
5460
errorAlert = displayStandardErrorAlert(

src/lib/components/v2/tasks/TaskGroupsTable.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@
268268
{updateEditedTaskGroup}
269269
groupIdsNames={user.group_ids_names || []}
270270
/>
271-
<TaskGroupManageModal bind:this={taskGroupManageModal} />
271+
<TaskGroupManageModal bind:this={taskGroupManageModal} admin={false} />
272272
<TaskInfoModal bind:this={taskInfoModal} />
273273
<TaskEditModal bind:this={taskEditModal} {updateEditedTask} />
274274

src/routes/v2/admin/task-groups/+page.svelte

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import Modal from '$lib/components/common/Modal.svelte';
77
import TimestampCell from '$lib/components/jobs/TimestampCell.svelte';
88
import TaskGroupEditModal from '$lib/components/v2/tasks/TaskGroupEditModal.svelte';
9+
import TaskGroupManageModal from '$lib/components/v2/tasks/TaskGroupManageModal.svelte';
910
1011
/** @type {Array<import('$lib/types').User>} */
1112
const users = $page.data.users;
@@ -36,6 +37,8 @@
3637
3738
/** @type {import('$lib/components/v2/tasks/TaskGroupEditModal.svelte').default} */
3839
let taskGroupEditModal;
40+
/** @type {import('$lib/components/v2/tasks/TaskGroupManageModal.svelte').default} */
41+
let taskGroupManageModal;
3942
4043
async function searchTaskGroups() {
4144
searching = true;
@@ -267,7 +270,7 @@
267270
<col width="90" />
268271
<col width="90" />
269272
<col width="90" />
270-
<col width="270" />
273+
<col width="400" />
271274
</colgroup>
272275
<thead>
273276
<tr>
@@ -304,6 +307,10 @@
304307
<i class="bi bi-pencil" />
305308
Edit
306309
</button>
310+
<button class="btn btn-info" on:click={() => taskGroupManageModal.open(taskGroup)}>
311+
<i class="bi bi-gear" />
312+
Manage
313+
</button>
307314
<ConfirmActionButton
308315
modalId="confirmTaskGroupDeleteModal{taskGroup.pkg_name}"
309316
style={'danger'}
@@ -331,6 +338,7 @@
331338
updateEditedTaskGroup={searchTaskGroups}
332339
groupIdsNames={groups.map((g) => [g.id, g.name])}
333340
/>
341+
<TaskGroupManageModal bind:this={taskGroupManageModal} admin={true} />
334342
335343
<Modal id="taskInfoModal" bind:this={infoModal} size="xl" onClose={onInfoModalClose}>
336344
<svelte:fragment slot="header">
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { expect, test } from '@playwright/test';
2+
import { waitPageLoading } from '../utils.js';
3+
import { createFakeTask, deleteTask } from './task_utils.js';
4+
5+
test('Admin task group manage (deactivate / reactivate)', async ({ page }) => {
6+
let taskName;
7+
await test.step('Create test task group', async () => {
8+
taskName = await createFakeTask(page, {
9+
type: 'non_parallel'
10+
});
11+
});
12+
13+
await test.step('Open admin task-groups page', async () => {
14+
await page.goto('/v2/admin/task-groups');
15+
await waitPageLoading(page);
16+
await page.getByRole('textbox', { name: 'Package name' }).fill(taskName);
17+
await page.getByRole('button', { name: 'Search task groups' }).click();
18+
});
19+
20+
await test.step('Deactivate the task', async () => {
21+
await page.getByRole('row', { name: taskName }).getByRole('button', { name: 'Manage' }).click();
22+
const modal = page.locator('.modal.show');
23+
await modal.waitFor();
24+
await expect(modal.getByText('The task group is currently active')).toBeVisible();
25+
await modal.getByText('active').click();
26+
await modal.getByRole('button', { name: 'Deactivate task group' }).click();
27+
await modal.getByRole('button', { name: 'Confirm' }).click();
28+
});
29+
30+
await test.step('Verify that page loads the proper activity', async () => {
31+
await page.waitForURL(/\/v2\/admin\/task-groups\/activities\?activity_id=\d+/);
32+
await waitPageLoading(page);
33+
await expect(page.getByRole('row')).toHaveCount(2);
34+
await expect(page.getByRole('row', { name: taskName })).toContainText('deactivate');
35+
});
36+
37+
await test.step('Go back to previous page and reactivate the task', async () => {
38+
await page.goBack();
39+
await waitPageLoading(page);
40+
await page.getByRole('textbox', { name: 'Package name' }).fill(taskName);
41+
await page.getByRole('button', { name: 'Search task groups' }).click();
42+
await page.getByRole('row', { name: taskName }).getByRole('button', { name: 'Manage' }).click();
43+
const modal = page.locator('.modal.show');
44+
await modal.waitFor();
45+
await modal.getByText('active').click();
46+
await modal.getByRole('button', { name: 'Reactivate task group' }).click();
47+
});
48+
49+
await test.step('Verify that page loads the proper activity', async () => {
50+
await page.waitForURL(/\/v2\/admin\/task-groups\/activities\?activity_id=\d+/);
51+
await waitPageLoading(page);
52+
await expect(page.getByRole('row')).toHaveCount(2);
53+
await expect(page.getByRole('row', { name: taskName })).toContainText('reactivate');
54+
});
55+
56+
await test.step('Cleanup', async () => {
57+
await deleteTask(page, taskName);
58+
});
59+
});

tests/v2/task_group_manage.spec.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { expect, test } from './workflow_fixture.js';
1+
import { expect, test } from '@playwright/test';
22
import { waitPageLoading } from '../utils.js';
33
import { createFakeTask, deleteTask } from './task_utils.js';
44

5-
test('Task group manage (deactivate / reactivate)', async ({ page, workflow }) => {
6-
await page.waitForURL(workflow.url);
7-
await waitPageLoading(page);
8-
5+
test('Task group manage (deactivate / reactivate)', async ({ page }) => {
96
let taskName;
107
await test.step('Create test task group', async () => {
118
taskName = await createFakeTask(page, {

0 commit comments

Comments
 (0)