2024-06-28 01:17:11 -04:00
// @ts-check
2024-09-11 16:34:33 -04:00
// @watch start
// templates/repo/actions/**
// web_src/css/actions.css
// web_src/js/components/ActionRunStatus.vue
// web_src/js/components/RepoActionView.vue
// modules/actions/**
// modules/structs/workflow.go
// routers/api/v1/repo/action.go
// routers/web/repo/actions/**
// @watch end
2024-08-14 17:34:36 -04:00
import { expect } from '@playwright/test' ;
import { test , login _user , load _logged _in _context } from './utils_e2e.js' ;
2024-06-28 01:17:11 -04:00
test . beforeAll ( async ( { browser } , workerInfo ) => {
await login _user ( browser , workerInfo , 'user2' ) ;
} ) ;
2024-07-06 01:30:58 -04:00
const workflow _trigger _notification _text = 'This workflow has a workflow_dispatch event trigger.' ;
2024-07-22 14:03:32 -04:00
test ( 'workflow dispatch present' , async ( { browser } , workerInfo ) => {
2024-06-28 01:17:11 -04:00
const context = await load _logged _in _context ( browser , workerInfo , 'user2' ) ;
/** @type {import('@playwright/test').Page} */
const page = await context . newPage ( ) ;
await page . goto ( '/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0' ) ;
2024-07-06 01:30:58 -04:00
await expect ( page . getByText ( workflow _trigger _notification _text ) ) . toBeVisible ( ) ;
2024-06-28 01:17:11 -04:00
const run _workflow _btn = page . locator ( '#workflow_dispatch_dropdown>button' ) ;
await expect ( run _workflow _btn ) . toBeVisible ( ) ;
const menu = page . locator ( '#workflow_dispatch_dropdown>.menu' ) ;
await expect ( menu ) . toBeHidden ( ) ;
await run _workflow _btn . click ( ) ;
await expect ( menu ) . toBeVisible ( ) ;
} ) ;
2024-07-22 14:03:32 -04:00
test ( 'workflow dispatch error: missing inputs' , async ( { browser } , workerInfo ) => {
2024-06-28 01:17:11 -04:00
test . skip ( workerInfo . project . name === 'Mobile Safari' , 'Flaky behaviour on mobile safari; see https://codeberg.org/forgejo/forgejo/pulls/3334#issuecomment-2033383' ) ;
const context = await load _logged _in _context ( browser , workerInfo , 'user2' ) ;
/** @type {import('@playwright/test').Page} */
const page = await context . newPage ( ) ;
await page . goto ( '/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0' ) ;
await page . waitForLoadState ( 'networkidle' ) ;
await page . locator ( '#workflow_dispatch_dropdown>button' ) . click ( ) ;
// Remove the required attribute so we can trigger the error message!
await page . evaluate ( ( ) => {
const elem = document . querySelector ( 'input[name="inputs[string2]"]' ) ;
elem ? . removeAttribute ( 'required' ) ;
} ) ;
await page . locator ( '#workflow-dispatch-submit' ) . click ( ) ;
await page . waitForLoadState ( 'networkidle' ) ;
await expect ( page . getByText ( 'Require value for input "String w/o. default".' ) ) . toBeVisible ( ) ;
} ) ;
2024-07-22 14:03:32 -04:00
test ( 'workflow dispatch success' , async ( { browser } , workerInfo ) => {
2024-06-28 01:17:11 -04:00
test . skip ( workerInfo . project . name === 'Mobile Safari' , 'Flaky behaviour on mobile safari; see https://codeberg.org/forgejo/forgejo/pulls/3334#issuecomment-2033383' ) ;
const context = await load _logged _in _context ( browser , workerInfo , 'user2' ) ;
/** @type {import('@playwright/test').Page} */
const page = await context . newPage ( ) ;
await page . goto ( '/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0' ) ;
await page . waitForLoadState ( 'networkidle' ) ;
await page . locator ( '#workflow_dispatch_dropdown>button' ) . click ( ) ;
await page . type ( 'input[name="inputs[string2]"]' , 'abc' ) ;
await page . locator ( '#workflow-dispatch-submit' ) . click ( ) ;
await page . waitForLoadState ( 'networkidle' ) ;
await expect ( page . getByText ( 'Workflow run was successfully requested.' ) ) . toBeVisible ( ) ;
await expect ( page . locator ( '.run-list>:first-child .run-list-meta' , { hasText : 'now' } ) ) . toBeVisible ( ) ;
} ) ;
2024-07-06 01:30:58 -04:00
2024-07-22 14:03:32 -04:00
test ( 'workflow dispatch box not available for unauthenticated users' , async ( { page } ) => {
2024-07-06 01:30:58 -04:00
await page . goto ( '/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0' ) ;
await page . waitForLoadState ( 'networkidle' ) ;
await expect ( page . locator ( 'body' ) ) . not . toContainText ( workflow _trigger _notification _text ) ;
} ) ;