mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-07 07:42:45 +01:00
104 lines
3.5 KiB
TypeScript
104 lines
3.5 KiB
TypeScript
import { expect } from '@playwright/test'
|
|
import { randomUUID } from 'crypto'
|
|
import { login, test } from './util'
|
|
|
|
const createReaction = async (page, name: string) => {
|
|
await page.goto('reactions')
|
|
await page.getByRole('button', { name: 'New Reaction' }).click()
|
|
await page.waitForURL('**/reactions/new')
|
|
await page.locator('#name').fill(name)
|
|
await page.locator('#trigger').selectOption('Schedule')
|
|
await page.locator('#expression').fill('* * * * *')
|
|
await page.locator('#action').selectOption('Python')
|
|
await page.locator('#script').fill('print("Hello, world!")')
|
|
const saveBtn = page.getByRole('button', { name: 'Save' }).last()
|
|
await expect(saveBtn).toBeEnabled()
|
|
await saveBtn.click()
|
|
await page.waitForURL('**/reactions/r*')
|
|
}
|
|
|
|
test('reactions list shows existing reactions', async ({ page }) => {
|
|
await login(page)
|
|
await page.goto('reactions')
|
|
await expect(page.getByRole('heading', { name: 'Reactions' })).toBeVisible()
|
|
})
|
|
|
|
test('can create a reaction', async ({ page }) => {
|
|
await login(page)
|
|
const name = `playwright-${randomUUID()}`
|
|
await createReaction(page, name)
|
|
await expect(page.locator('#name')).toHaveValue(name)
|
|
await expect(page.locator('#trigger')).toHaveValue('schedule')
|
|
await expect(page.locator('#expression')).toHaveValue('* * * * *')
|
|
await expect(page.locator('#action')).toHaveValue('python')
|
|
await expect(page.locator('#script')).toHaveValue('print("Hello, world!")')
|
|
})
|
|
|
|
test.describe('update a reaction', () => {
|
|
const updates = [
|
|
{
|
|
field: 'name',
|
|
update: async (page) => {
|
|
await page.waitForSelector('#name')
|
|
await page.locator('#name').fill("Updated Reaction")
|
|
},
|
|
selector: '#name',
|
|
value: 'Updated Reaction'
|
|
},
|
|
{
|
|
field: 'trigger',
|
|
update: async (page) => {
|
|
await page.waitForSelector('#trigger')
|
|
await page.locator('button').filter({ hasText: 'Schedule' }).click()
|
|
await page.getByRole('option', { name: 'HTTP / Webhook' }).click()
|
|
await page.locator('#path').fill('webhook')
|
|
},
|
|
selector: '#trigger',
|
|
value: 'webhook'
|
|
},
|
|
{
|
|
field: 'action',
|
|
update: async (page) => {
|
|
await page.waitForSelector('#action')
|
|
await page.locator('button').filter({ hasText: 'Python' }).click()
|
|
await page.getByRole('option', { name: 'HTTP / Webhook' }).click()
|
|
await page.locator('#url').fill('https://example.com')
|
|
},
|
|
selector: '#action',
|
|
value: 'webhook'
|
|
},
|
|
{
|
|
field: 'script',
|
|
update: async (page) => {
|
|
await page.waitForSelector('#script')
|
|
await page.locator('#script').fill('pass')
|
|
},
|
|
selector: '#script',
|
|
value: 'pass'
|
|
},
|
|
]
|
|
|
|
for (const { field, update, selector, value } of updates) {
|
|
test(`can update ${field}`, async ({ page }) => {
|
|
await login(page)
|
|
const name = `playwright-${randomUUID()}`
|
|
await createReaction(page, name)
|
|
await update(page)
|
|
const saveBtn = page.getByRole('button', { name: 'Save' }).last()
|
|
await expect(saveBtn).toBeEnabled()
|
|
await saveBtn.click()
|
|
await expect(page.locator(selector)).toHaveValue(value)
|
|
})
|
|
}
|
|
})
|
|
|
|
test('can delete a reaction', async ({ page }) => {
|
|
await login(page)
|
|
const name = `playwright-${randomUUID()}`
|
|
await createReaction(page, name)
|
|
await page.getByRole('button', { name: 'Delete Reaction' }).click()
|
|
await page.getByRole('dialog').getByRole('button', { name: 'Delete' }).click()
|
|
await page.waitForURL('**/reactions')
|
|
await expect(page.locator(`text=${name}`)).toHaveCount(0)
|
|
})
|