fix: #721 Datetime args not being rendered
This commit is contained in:
parent
d4c80c65c2
commit
15390f7b80
|
|
@ -160,6 +160,10 @@ function getInputType(arg) {
|
||||||
return 'text'
|
return 'text'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arg.type === 'datetime') {
|
||||||
|
return 'datetime-local'
|
||||||
|
}
|
||||||
|
|
||||||
return arg.type
|
return arg.type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
listenAddressSingleHTTPFrontend: 0.0.0.0:1337
|
||||||
|
|
||||||
|
logLevel: "DEBUG"
|
||||||
|
checkForUpdates: false
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- title: Test datetime argument
|
||||||
|
shell: "echo 'Selected datetime: {{ datetime }}'"
|
||||||
|
icon: ping
|
||||||
|
arguments:
|
||||||
|
- name: datetime
|
||||||
|
title: Select a date and time
|
||||||
|
type: datetime
|
||||||
|
required: true
|
||||||
|
description: Choose a date and time for the action
|
||||||
|
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
import { describe, it, before, after } from 'mocha'
|
||||||
|
import { expect } from 'chai'
|
||||||
|
import { By, Condition } from 'selenium-webdriver'
|
||||||
|
import {
|
||||||
|
getRootAndWait,
|
||||||
|
getActionButton,
|
||||||
|
takeScreenshotOnFailure,
|
||||||
|
} from '../lib/elements.js'
|
||||||
|
|
||||||
|
describe('config: datetime', function () {
|
||||||
|
before(async function () {
|
||||||
|
await runner.start('datetime')
|
||||||
|
})
|
||||||
|
|
||||||
|
after(async () => {
|
||||||
|
await runner.stop()
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
takeScreenshotOnFailure(this.currentTest, webdriver)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Datetime argument uses datetime-local input type', async function () {
|
||||||
|
await getRootAndWait()
|
||||||
|
|
||||||
|
const btn = await getActionButton(webdriver, 'Test datetime argument')
|
||||||
|
|
||||||
|
await btn.click()
|
||||||
|
|
||||||
|
// Wait for navigation to argument form page
|
||||||
|
await webdriver.wait(
|
||||||
|
new Condition('wait for argument form page', async () => {
|
||||||
|
const url = await webdriver.getCurrentUrl()
|
||||||
|
return url.includes('/actionBinding/') && url.includes('/argumentForm')
|
||||||
|
}),
|
||||||
|
8000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Find the datetime input field
|
||||||
|
const datetimeInput = await webdriver.findElement(By.id('datetime'))
|
||||||
|
|
||||||
|
// Verify it's a datetime-local input type
|
||||||
|
const inputType = await datetimeInput.getAttribute('type')
|
||||||
|
expect(inputType).to.equal('datetime-local', 'Input type should be datetime-local')
|
||||||
|
|
||||||
|
// Verify it has the step attribute set to 1 (for seconds precision)
|
||||||
|
const step = await datetimeInput.getAttribute('step')
|
||||||
|
expect(step).to.equal('1', 'Step attribute should be 1')
|
||||||
|
|
||||||
|
// Verify it's required
|
||||||
|
const required = await datetimeInput.getAttribute('required')
|
||||||
|
expect(required).to.not.be.null
|
||||||
|
|
||||||
|
// Verify the label is present
|
||||||
|
const label = await webdriver.findElement(By.css('label[for="datetime"]'))
|
||||||
|
expect(await label.getText()).to.contain('Select a date and time')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Datetime argument can be filled and submitted', async function () {
|
||||||
|
await getRootAndWait()
|
||||||
|
|
||||||
|
const btn = await getActionButton(webdriver, 'Test datetime argument')
|
||||||
|
|
||||||
|
await btn.click()
|
||||||
|
|
||||||
|
// Wait for navigation to argument form page
|
||||||
|
await webdriver.wait(
|
||||||
|
new Condition('wait for argument form page', async () => {
|
||||||
|
const url = await webdriver.getCurrentUrl()
|
||||||
|
return url.includes('/actionBinding/') && url.includes('/argumentForm')
|
||||||
|
}),
|
||||||
|
8000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Find the datetime input field
|
||||||
|
const datetimeInput = await webdriver.findElement(By.id('datetime'))
|
||||||
|
|
||||||
|
// Set a datetime value (format: YYYY-MM-DDTHH:mm)
|
||||||
|
// datetime-local returns values without seconds, backend will add :00
|
||||||
|
const testDateTime = '2023-12-25T15:30'
|
||||||
|
|
||||||
|
// Use JavaScript to set the value directly (more reliable for datetime-local inputs)
|
||||||
|
await webdriver.executeScript(
|
||||||
|
'arguments[0].value = arguments[1]',
|
||||||
|
datetimeInput,
|
||||||
|
testDateTime
|
||||||
|
)
|
||||||
|
|
||||||
|
// Trigger input event to ensure Vue reactivity
|
||||||
|
await webdriver.executeScript(
|
||||||
|
'arguments[0].dispatchEvent(new Event("input", { bubbles: true }))',
|
||||||
|
datetimeInput
|
||||||
|
)
|
||||||
|
|
||||||
|
// Small wait for Vue to process the change
|
||||||
|
await webdriver.sleep(100)
|
||||||
|
|
||||||
|
// Verify the value was set
|
||||||
|
const value = await datetimeInput.getAttribute('value')
|
||||||
|
expect(value).to.equal(testDateTime)
|
||||||
|
|
||||||
|
// Find and click the submit button
|
||||||
|
const submitButton = await webdriver.findElement(
|
||||||
|
By.css('button[name="start"]')
|
||||||
|
)
|
||||||
|
await submitButton.click()
|
||||||
|
|
||||||
|
// Wait for navigation to logs page
|
||||||
|
await webdriver.wait(
|
||||||
|
new Condition('wait for logs page', async () => {
|
||||||
|
const url = await webdriver.getCurrentUrl()
|
||||||
|
return url.includes('/logs/')
|
||||||
|
}),
|
||||||
|
8000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Verify we're on the logs page (action was executed)
|
||||||
|
const url = await webdriver.getCurrentUrl()
|
||||||
|
expect(url).to.include('/logs/')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
Loading…
Reference in New Issue