Skip to content

Commit fd43a35

Browse files
committed
test(admin): pages tests
1 parent 5f39f8b commit fd43a35

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

tests/e2e/admin/pages.spec.ts

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import { test, expect } from '@playwright/test';
2+
import { objectToSnake } from 'ts-case-convert';
3+
4+
import {
5+
createTestSupabaseClient,
6+
getTestUsers,
7+
login,
8+
prepDb,
9+
} from '../util';
10+
11+
const supabase = createTestSupabaseClient();
12+
const testUsers = getTestUsers();
13+
14+
test.beforeEach(async () => {
15+
await prepDb(supabase);
16+
17+
await supabase.from('sites').insert(
18+
[
19+
{
20+
id: 'a6f684de-b326-467c-99af-7942777684ff',
21+
name: 'Test Site 1',
22+
homepage: 'https://example.com/site1',
23+
},
24+
{
25+
id: '6b89d08f-3e7a-4cf5-9f21-c69d0fefdd3e',
26+
name: 'Test Site 2',
27+
homepage: 'https://example.com/site2',
28+
},
29+
].map(objectToSnake),
30+
);
31+
32+
await supabase.from('scrapers').insert(
33+
[
34+
{
35+
id: 'a75f8c18-213b-4045-81c2-4b546f550724',
36+
name: 'Test Scraper 1',
37+
},
38+
].map(objectToSnake),
39+
);
40+
41+
await supabase.from('pages').insert(
42+
[
43+
{
44+
id: '3651e6eb-6547-43a5-bd03-929b93ff4065',
45+
url: 'https://example.com/site1/page1',
46+
scrapeUrl: 'https://example.com/site1/page1/scrape',
47+
siteId: 'a6f684de-b326-467c-99af-7942777684ff',
48+
scrapeGroup: 'andromeda',
49+
scrapeStatus: 'pending',
50+
},
51+
{
52+
id: 'b9787bc9-fc73-44f6-bcf9-ebe113ae9a78',
53+
url: 'https://example.com/site1/page2',
54+
scrapeUrl: 'https://example.com/site1/page2/scrape',
55+
siteId: 'a6f684de-b326-467c-99af-7942777684ff',
56+
scrapeGroup: 'andromeda',
57+
scrapeStatus: 'pending',
58+
},
59+
{
60+
id: '7960430f-939a-4304-be4c-473642679524',
61+
url: 'https://example.com/site2/page1',
62+
siteId: '6b89d08f-3e7a-4cf5-9f21-c69d0fefdd3e',
63+
scrapeGroup: 'andromeda',
64+
scrapeStatus: 'active',
65+
},
66+
].map(objectToSnake),
67+
);
68+
});
69+
70+
test.describe('Pages', () => {
71+
test('should show table of pages', async ({ page }) => {
72+
await login(page, testUsers.testMaintainer1);
73+
await page.goto('/admin/pages');
74+
75+
await expect(page.getByText('3 pages')).toBeVisible();
76+
await expect(
77+
page.getByRole('cell', {
78+
name: 'https://example.com/site1/page2/scrape',
79+
}),
80+
).toBeVisible();
81+
await expect(
82+
page.getByRole('cell', { name: 'Test Site 2' }),
83+
).toBeVisible();
84+
});
85+
86+
test('should add page', async ({ page }) => {
87+
await login(page, testUsers.testAdmin1);
88+
await page.goto('/admin/pages');
89+
90+
await page
91+
.getByRole('textbox', { name: 'URL', exact: true })
92+
.fill('https://example.com/testpage32');
93+
await page
94+
.getByRole('textbox', { name: 'Scrape URL' })
95+
.fill('https://example.com/testpage32/scrape');
96+
await page.locator('#v-0-7-3').click();
97+
await page.getByRole('option', { name: 'Test Site 1' }).click();
98+
await page.locator('#v-0-7-4').click();
99+
await page.getByText('Test Scraper').click();
100+
await page.locator('#v-0-7-5').click();
101+
await page.getByRole('option', { name: 'andromeda' }).click();
102+
await page.getByRole('combobox', { name: 'Scrape Status' }).click();
103+
await page.getByRole('option', { name: 'active' }).click();
104+
105+
await page.getByRole('button', { name: 'Create' }).click();
106+
107+
await expect(page.getByText('Created!')).toBeVisible();
108+
109+
await page.goto('/admin/pages');
110+
await expect(page.getByText('4 pages')).toBeVisible();
111+
await expect(
112+
page.getByRole('cell', {
113+
name: 'https://example.com/testpage32/scrape',
114+
}),
115+
).toBeVisible();
116+
await expect(
117+
page.getByRole('cell', { name: 'Test Site 2' }),
118+
).toBeVisible();
119+
});
120+
121+
test('should fail to add page without permissions', async ({ page }) => {
122+
await login(page, testUsers.testRolelessUser);
123+
await page.goto('/admin/pages');
124+
125+
await page
126+
.getByRole('textbox', { name: 'URL', exact: true })
127+
.fill('https://example.com/testpage32');
128+
await page
129+
.getByRole('textbox', { name: 'Scrape URL' })
130+
.fill('https://example.com/testpage32/scrape');
131+
await page.locator('#v-0-7-3').click();
132+
await page.getByRole('option', { name: 'Test Site 1' }).click();
133+
await page.locator('#v-0-7-4').click();
134+
await page.getByText('Test Scraper').click();
135+
await page.locator('#v-0-7-5').click();
136+
await page.getByRole('option', { name: 'andromeda' }).click();
137+
await page.getByRole('combobox', { name: 'Scrape Status' }).click();
138+
await page.getByRole('option', { name: 'active' }).click();
139+
140+
await page.getByRole('button', { name: 'Create' }).click();
141+
142+
await expect(
143+
page.getByText('Error: new row violates row-level security'),
144+
).toBeVisible();
145+
146+
await page.goto('/admin/pages');
147+
await expect(page.getByText('3 pages')).toBeVisible();
148+
});
149+
});

0 commit comments

Comments
 (0)