mirror of
https://github.com/OliveTin/OliveTin
synced 2026-08-26 04:26:28 +00:00
Argument-form submits remount the dashboard, so flash via a one-shot binding-scoped pending result that ActionButton consumes after return.
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
import { describe, it, before, after } from 'mocha'
|
|
import { expect } from 'chai'
|
|
import { By, Condition } from 'selenium-webdriver'
|
|
import {
|
|
DEFAULT_UI_WAIT_MS,
|
|
getRootAndWait,
|
|
getActionButton,
|
|
takeScreenshotOnFailure,
|
|
waitForArgumentFormPage,
|
|
waitForArgumentFormReady,
|
|
waitForDashboardLoaded,
|
|
} from '../../lib/elements.js'
|
|
|
|
async function waitForStartButtonEnabled () {
|
|
await webdriver.wait(
|
|
new Condition('wait for Start button to be enabled', async () => {
|
|
const submitButton = await webdriver.findElement(By.css('button[name="start"]'))
|
|
return await submitButton.isEnabled()
|
|
}),
|
|
DEFAULT_UI_WAIT_MS
|
|
)
|
|
}
|
|
|
|
async function waitForActionSuccessFlash (actionTitle) {
|
|
await webdriver.wait(
|
|
new Condition(`wait for ${actionTitle} success flash`, async () => {
|
|
try {
|
|
const button = await getActionButton(webdriver, actionTitle)
|
|
const classAttr = await button.getAttribute('class')
|
|
return classAttr && classAttr.includes('action-success')
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
}),
|
|
DEFAULT_UI_WAIT_MS
|
|
)
|
|
}
|
|
|
|
describe('config: argumentActionFlash', function () {
|
|
this.timeout(15000)
|
|
|
|
before(async function () {
|
|
await runner.start('argumentActionFlash')
|
|
})
|
|
|
|
after(async () => {
|
|
await runner.stop()
|
|
})
|
|
|
|
afterEach(function () {
|
|
takeScreenshotOnFailure(this.currentTest, webdriver)
|
|
})
|
|
|
|
it('Action with arguments flashes success after returning to dashboard (#920)', async function () {
|
|
await getRootAndWait()
|
|
|
|
const argButton = await getActionButton(webdriver, 'Hello world')
|
|
await argButton.click()
|
|
|
|
await waitForArgumentFormPage()
|
|
await waitForArgumentFormReady()
|
|
await waitForStartButtonEnabled()
|
|
|
|
const submitButton = await webdriver.findElement(By.css('button[name="start"]'))
|
|
await submitButton.click()
|
|
|
|
await webdriver.wait(
|
|
new Condition('wait to leave argument form', async () => {
|
|
const url = await webdriver.getCurrentUrl()
|
|
return !url.includes('/argumentForm')
|
|
}),
|
|
DEFAULT_UI_WAIT_MS
|
|
)
|
|
await waitForDashboardLoaded()
|
|
|
|
await waitForActionSuccessFlash('Hello world')
|
|
|
|
const flashedButton = await getActionButton(webdriver, 'Hello world')
|
|
const classAttr = await flashedButton.getAttribute('class')
|
|
expect(classAttr).to.include('action-success')
|
|
})
|
|
|
|
it('Action without arguments still flashes success on the dashboard', async function () {
|
|
await getRootAndWait()
|
|
|
|
const simpleButton = await getActionButton(webdriver, 'Simple action')
|
|
await simpleButton.click()
|
|
|
|
await waitForActionSuccessFlash('Simple action')
|
|
|
|
const flashedButton = await getActionButton(webdriver, 'Simple action')
|
|
const classAttr = await flashedButton.getAttribute('class')
|
|
expect(classAttr).to.include('action-success')
|
|
})
|
|
})
|