Skip to content

Commit b0e8c25

Browse files
committed
feat: add functional tests for deal, task, app, dataset, and workerpool pages
1 parent 32b4ab1 commit b0e8c25

16 files changed

+396
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Deal Details Page', () => {
7+
test('Access deal page from deals list', async ({ page }) => {
8+
// Navigate to the deals list page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/deals');
10+
11+
// Click on a deal in the table
12+
await page.getByText('0x0481db...5b040').click();
13+
14+
// Verify that the deal detail page is displayed
15+
await expect(page.getByText('Deal details')).toBeVisible();
16+
17+
// Verify that the DETAILS tab is visible
18+
await expect(page.getByRole('tab', { name: 'DETAILS' })).toBeVisible();
19+
20+
// Verify that the TASKS tab is visible
21+
await expect(page.getByRole('tab', { name: 'TASKS' })).toBeVisible();
22+
});
23+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Deal Details Page', () => {
7+
test('Access deal page from homepage', async ({ page }) => {
8+
// Navigate to the homepage
9+
await page.goto('http://localhost:5173/arbitrum-mainnet');
10+
11+
// Click on the deal ID text to navigate to deal details
12+
await page.getByText('0x0481db...5b040').click();
13+
14+
// Verify that the Deal details heading is displayed
15+
await expect(page.getByText('Deal details')).toBeVisible();
16+
17+
// Verify that the DETAILS tab is visible
18+
await expect(page.getByRole('tab', { name: 'DETAILS' })).toBeVisible();
19+
20+
// Verify that the TASKS tab is visible
21+
await expect(page.getByRole('tab', { name: 'TASKS' })).toBeVisible();
22+
});
23+
});
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Task Details Page', () => {
7+
test('Access task page from homepage', async ({ page }) => {
8+
// Navigate to the homepage
9+
await page.goto('http://localhost:5173/arbitrum-mainnet');
10+
11+
// Click on the first task in the table
12+
await page.getByText('0x061a32...1c166').click();
13+
14+
// Verify that the task detail page is displayed
15+
await expect(page.getByText('Task details')).toBeVisible();
16+
17+
// Verify that the DETAILS tab is visible
18+
await expect(page.getByRole('tab', { name: 'DETAILS' })).toBeVisible();
19+
20+
// Verify that the DATASETS tab is visible
21+
await expect(page.getByRole('tab', { name: 'DATASETS' })).toBeVisible();
22+
23+
// Verify that the RAW DATA tab is visible
24+
await expect(page.getByRole('tab', { name: 'RAW DATA' })).toBeVisible();
25+
});
26+
});
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Index', () => {
7+
test('Display of main tables on homepage', async ({ page }) => {
8+
// Given the user navigates to the homepage
9+
await page.goto('http://localhost:5173/arbitrum-mainnet');
10+
11+
// Then 5 tables are displayed
12+
await expect(page.getByText('Latest deals')).toBeVisible();
13+
await expect(page.getByText('Latest tasks')).toBeVisible();
14+
await expect(page.getByText('Most pertinent apps')).toBeVisible();
15+
await expect(page.getByText('Latest datasets deployed')).toBeVisible();
16+
await expect(page.getByText('Most pertinent workerpools')).toBeVisible();
17+
18+
// And the Deals table contains all expected columns
19+
await expect(page.getByRole('columnheader', { name: 'Deal' })).toBeVisible();
20+
await expect(page.getByRole('columnheader', { name: 'App' })).toBeVisible();
21+
await expect(page.getByRole('columnheader', { name: 'Workerpool' }).first()).toBeVisible();
22+
await expect(page.getByRole('columnheader', { name: 'Dataset' }).first()).toBeVisible();
23+
await expect(page.getByRole('columnheader', { name: 'Time' }).first()).toBeVisible();
24+
await expect(page.getByRole('columnheader', { name: 'Success' })).toBeVisible();
25+
await expect(page.getByRole('columnheader', { name: 'Price' })).toBeVisible();
26+
27+
// And the Tasks table contains all expected columns
28+
await expect(page.getByRole('columnheader', { name: 'Task' })).toBeVisible();
29+
await expect(page.getByRole('columnheader', { name: 'Status' })).toBeVisible();
30+
await expect(page.getByRole('columnheader', { name: 'Deadline' })).toBeVisible();
31+
32+
// And the Apps table contains all expected columns
33+
await expect(page.getByRole('columnheader', { name: 'Address' }).first()).toBeVisible();
34+
await expect(page.getByRole('columnheader', { name: 'Name' }).first()).toBeVisible();
35+
await expect(page.getByRole('columnheader', { name: 'Owner' }).first()).toBeVisible();
36+
await expect(page.getByRole('columnheader', { name: 'TxHash' }).first()).toBeVisible();
37+
38+
// And the Datasets table contains all expected columns
39+
await expect(page.getByRole('columnheader', { name: 'Dataset' }).first()).toBeVisible();
40+
await expect(page.getByRole('columnheader', { name: 'Type' })).toBeVisible();
41+
42+
// And the Workerpools table contains all expected columns
43+
await expect(page.getByRole('columnheader', { name: 'Workerpool' }).nth(1)).toBeVisible();
44+
await expect(page.getByRole('columnheader', { name: 'Description' })).toBeVisible();
45+
});
46+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Index - Search', () => {
7+
test('Invalid search', async ({ page }) => {
8+
// Navigate to the homepage
9+
await page.goto('http://localhost:5173/arbitrum-mainnet');
10+
11+
// Given the user enters `0x908ab1ca1fb0179253534d8b5f7777b8499b34f`
12+
await page.getByRole('searchbox', { name: 'Search for addresses, deal' }).fill('0x908ab1ca1fb0179253534d8b5f7777b8499b34f');
13+
14+
// When the search is executed
15+
await page.keyboard.press('Enter');
16+
17+
// Then no result is returned
18+
await expect(page.getByText('Invalid value')).toBeVisible();
19+
});
20+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Page Apps', () => {
7+
test('Apps table behavior', async ({ page }) => {
8+
// Given the user navigates to the Apps page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/apps');
10+
11+
// Then the table is displayed with all expected columns
12+
await expect(page.getByRole('columnheader', { name: 'Address' })).toBeVisible();
13+
await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
14+
await expect(page.getByRole('columnheader', { name: 'Owner' })).toBeVisible();
15+
await expect(page.getByRole('columnheader', { name: 'Time' })).toBeVisible();
16+
await expect(page.getByRole('columnheader', { name: 'TxHash' })).toBeVisible();
17+
18+
// And pagination is available
19+
await expect(page.getByText('Previous')).toBeVisible();
20+
await expect(page.getByText('Next')).toBeVisible();
21+
22+
// And the Home button is present and functional
23+
await expect(page.getByText('Homepage')).toBeVisible();
24+
await page.getByRole('link', { name: 'Homepage' }).click();
25+
await expect(page.getByText('The iExec Protocol Explorer')).toBeVisible();
26+
});
27+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Page Datasets', () => {
7+
test('Datasets table behavior', async ({ page }) => {
8+
// Given the user navigates to the Datasets page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/datasets');
10+
11+
// Then the table is displayed with all expected columns
12+
await expect(page.getByRole('columnheader', { name: 'Dataset' })).toBeVisible();
13+
await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
14+
await expect(page.getByRole('columnheader', { name: 'Type' })).toBeVisible();
15+
await expect(page.getByRole('columnheader', { name: 'Owner' })).toBeVisible();
16+
await expect(page.getByRole('columnheader', { name: 'Time' })).toBeVisible();
17+
await expect(page.getByRole('columnheader', { name: 'TxHash' })).toBeVisible();
18+
19+
// And pagination is available
20+
await expect(page.getByText('Previous')).toBeVisible();
21+
await expect(page.getByText('Next')).toBeVisible();
22+
23+
// And the Home button is present and functional
24+
await expect(page.getByText('Homepage')).toBeVisible();
25+
await page.getByRole('link', { name: 'Homepage' }).click();
26+
await expect(page.getByText('The iExec Protocol Explorer')).toBeVisible();
27+
});
28+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Page Deals', () => {
7+
test('Deals table behavior', async ({ page }) => {
8+
// Given the user navigates to the Deals page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/deals');
10+
11+
// Then the table is displayed with all expected columns
12+
await expect(page.getByRole('columnheader', { name: 'Deal' })).toBeVisible();
13+
await expect(page.getByRole('columnheader', { name: 'App' })).toBeVisible();
14+
await expect(page.getByRole('columnheader', { name: 'Workerpool' })).toBeVisible();
15+
await expect(page.getByRole('columnheader', { name: 'Dataset' })).toBeVisible();
16+
await expect(page.getByRole('columnheader', { name: 'Time' })).toBeVisible();
17+
await expect(page.getByRole('columnheader', { name: 'Success' })).toBeVisible();
18+
await expect(page.getByRole('columnheader', { name: 'Price' })).toBeVisible();
19+
20+
// And pagination is available
21+
await expect(page.getByText('Previous')).toBeVisible();
22+
await expect(page.getByText('Next')).toBeVisible();
23+
24+
// And the Home button is present and functional
25+
await expect(page.getByText('Homepage')).toBeVisible();
26+
await page.getByRole('link', { name: 'Homepage' }).click();
27+
await expect(page.getByText('The iExec Protocol Explorer')).toBeVisible();
28+
29+
// Navigate back to test search functionality
30+
await page.goto('http://localhost:5173/arbitrum-mainnet/deals');
31+
32+
// And the search bar works with `0xc86054f7c22487835d9587e13b08ebb372e73ce1`
33+
await page.getByRole('searchbox', { name: 'Search for addresses, deal' }).fill('0xc86054f7c22487835d9587e13b08ebb372e73ce1');
34+
await page.keyboard.press('Enter');
35+
await expect(page.getByText('Dataset details')).toBeVisible();
36+
});
37+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Page Tasks', () => {
7+
test('Tasks table behavior', async ({ page }) => {
8+
// Given the user navigates to the Tasks page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/tasks');
10+
11+
// Then the table is displayed with all expected columns
12+
await expect(page.getByRole('columnheader', { name: 'Task' })).toBeVisible();
13+
await expect(page.getByRole('columnheader', { name: 'Status' })).toBeVisible();
14+
await expect(page.getByRole('columnheader', { name: 'Deadline' })).toBeVisible();
15+
16+
// And pagination is available
17+
await expect(page.getByText('Previous')).toBeVisible();
18+
await expect(page.getByText('Next')).toBeVisible();
19+
20+
// And the Home button is present and functional
21+
await expect(page.getByText('Homepage')).toBeVisible();
22+
await page.getByRole('link', { name: 'Homepage' }).click();
23+
await expect(page.getByText('The iExec Protocol Explorer')).toBeVisible();
24+
});
25+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// spec: specs/plan.md
2+
// seed: tests/seed.spec.ts
3+
4+
import { test, expect } from '@playwright/test';
5+
6+
test.describe('Page Workerpools', () => {
7+
test('Workerpools table behavior', async ({ page }) => {
8+
// Given the user navigates to the Workerpools page
9+
await page.goto('http://localhost:5173/arbitrum-mainnet/workerpools');
10+
11+
// Then the table is displayed with all expected columns
12+
await expect(page.getByRole('columnheader', { name: 'Workerpool' })).toBeVisible();
13+
await expect(page.getByRole('columnheader', { name: 'Description' })).toBeVisible();
14+
await expect(page.getByRole('columnheader', { name: 'Owner' })).toBeVisible();
15+
await expect(page.getByRole('columnheader', { name: 'Time' })).toBeVisible();
16+
await expect(page.getByRole('columnheader', { name: 'TxHash' })).toBeVisible();
17+
18+
// And pagination is available
19+
await expect(page.getByText('Previous')).toBeVisible();
20+
await expect(page.getByText('Next')).toBeVisible();
21+
22+
// And the Home button is present and functional
23+
await expect(page.getByText('Homepage')).toBeVisible();
24+
await page.getByRole('link', { name: 'Homepage' }).click();
25+
await expect(page.getByText('The iExec Protocol Explorer')).toBeVisible();
26+
});
27+
});

0 commit comments

Comments
 (0)