| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import { describe, it, before, after } from 'mocha'
- import { expect } from 'chai'
- import { By, Condition } from 'selenium-webdriver'
- import {
- DEFAULT_UI_WAIT_MS,
- argumentFieldId,
- getRootAndWait,
- getActionButton,
- takeScreenshotOnFailure,
- waitForArgumentFormPage,
- waitForArgumentFormReady,
- waitForLogsPage,
- waitForExecutionComplete,
- getTerminalBuffer,
- } from '../../lib/elements.js'
- async function openArgumentForm (actionTitle) {
- await getRootAndWait()
- const btn = await getActionButton(webdriver, actionTitle)
- await btn.click()
- await waitForArgumentFormPage()
- await waitForArgumentFormReady()
- }
- 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 waitForTerminalOutput (expectedSubstring) {
- await webdriver.wait(
- new Condition(`wait for terminal output containing ${expectedSubstring}`, async () => {
- try {
- const terminalReady = await webdriver.executeScript(`
- return !!(window.terminal && window.terminal.getBufferAsString);
- `)
- if (!terminalReady) {
- return false
- }
- const output = await getTerminalBuffer()
- return output && output.includes(expectedSubstring)
- } catch (e) {
- return false
- }
- }),
- DEFAULT_UI_WAIT_MS
- )
- }
- describe('config: argumentIdCollision', function () {
- this.timeout(10000)
- before(async function () {
- await runner.start('argumentIdCollision')
- })
- after(async () => {
- await runner.stop()
- })
- afterEach(function () {
- takeScreenshotOnFailure(this.currentTest, webdriver)
- })
- it('Argument named content validates and submits (#1071)', async function () {
- await openArgumentForm('Test content argument collision')
- const contentWrapper = await webdriver.findElement(By.id('content'))
- expect(await contentWrapper.getTagName()).to.equal('div')
- const textarea = await webdriver.findElement(By.id(argumentFieldId('content')))
- expect(await textarea.getTagName()).to.equal('textarea')
- expect(await textarea.getAttribute('id')).to.not.equal('content')
- const label = await webdriver.findElement(By.css(`label[for="${argumentFieldId('content')}"]`))
- expect(await label.getText()).to.contain('Cmd input')
- await textarea.sendKeys('hello from collision test')
- const submitButton = await webdriver.findElement(By.css('button[name="start"]'))
- await waitForStartButtonEnabled()
- await submitButton.click()
- await waitForLogsPage()
- await waitForExecutionComplete()
- await waitForTerminalOutput('Cmd input: hello from collision test')
- })
- it('Argument named layout validates and submits (#1071)', async function () {
- await openArgumentForm('Test layout argument collision')
- const layoutWrapper = await webdriver.findElement(By.id('layout'))
- expect(await layoutWrapper.getTagName()).to.equal('div')
- const input = await webdriver.findElement(By.id(argumentFieldId('layout')))
- expect(await input.getAttribute('type')).to.equal('text')
- expect(await input.getAttribute('id')).to.not.equal('layout')
- await input.sendKeys('testlayoutvalue')
- const submitButton = await webdriver.findElement(By.css('button[name="start"]'))
- await waitForStartButtonEnabled()
- await submitButton.click()
- await waitForLogsPage()
- await waitForExecutionComplete()
- await waitForTerminalOutput('Layout value: testlayoutvalue')
- })
- it('Namespaced argument ids do not match app-shell ids', async function () {
- await openArgumentForm('Test content argument collision')
- const namespacedIds = await webdriver.executeScript(`
- const requiredShellIds = ['content', 'layout'];
- const optionalShellIds = ['banner', 'app', 'mainnav', 'big-error'];
- const fieldId = arguments[0];
- const fieldElement = document.getElementById(fieldId);
- return {
- fieldTag: fieldElement?.tagName?.toLowerCase() ?? null,
- required: requiredShellIds.map((shellId) => {
- const shellElement = document.getElementById(shellId);
- return {
- shellId,
- shellTag: shellElement?.tagName?.toLowerCase() ?? null,
- sameElement: shellElement != null && shellElement === fieldElement
- };
- }),
- optional: optionalShellIds.map((shellId) => {
- const shellElement = document.getElementById(shellId);
- return {
- shellId,
- sameElement: shellElement != null && shellElement === fieldElement
- };
- })
- };
- `, argumentFieldId('content'))
- expect(namespacedIds.fieldTag, `argument field ${argumentFieldId('content')} should exist`).to.equal('textarea')
- for (const entry of namespacedIds.required) {
- expect(entry.shellTag, `app-shell #${entry.shellId} should exist`).to.not.equal(null)
- expect(entry.sameElement, `arg field must not resolve to #${entry.shellId}`).to.be.false
- }
- for (const entry of namespacedIds.optional) {
- expect(entry.sameElement, `arg field must not resolve to #${entry.shellId}`).to.be.false
- }
- })
- })
|