New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Display WF always nodes in conjunction with success and failure #2373
Changes from all commits
4d9523a
ad566cc
a2f4e36
1b25dd0
b02677a
8fceaf8
1e3c229
27da141
c25d208
e7c52bc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
exports.command = function findThenClick (selector) { | ||
this.waitForElementPresent(selector, () => { | ||
this.moveToElement(selector, 0, 0, () => { | ||
this.click(selector); | ||
}); | ||
}); | ||
return this; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
import { | ||
getInventorySource, | ||
getJobTemplate, | ||
getProject, | ||
getWorkflowTemplate | ||
} from '../fixtures'; | ||
|
||
let data; | ||
const spinny = "//*[contains(@class, 'spinny')]"; | ||
const workflowTemplateNavTab = "//at-side-nav-item[contains(@name, 'TEMPLATES')]"; | ||
const workflowSelector = "//a[contains(text(), 'test-actions-workflow-template')]"; | ||
const workflowVisualizerBtn = "//button[contains(@id, 'workflow_job_template_workflow_visualizer_btn')]"; | ||
|
||
const rootNode = "//*[@id='node-2']"; | ||
const childNode = "//*[@id='node-3']"; | ||
const newChildNode = "//*[@id='node-5']"; | ||
const leafNode = "//*[@id='node-6']"; | ||
const nodeAdd = "//*[contains(@class, 'nodeAddCross')]"; | ||
const nodeRemove = "//*[contains(@class, 'nodeRemoveCross')]"; | ||
|
||
// one of the jobs or projects or inventories | ||
const testActionsProject = "//td[contains(text(), 'test-actions-project')]"; | ||
const testActionsJob = "//td[contains(text(), 'test-actions-job')]"; | ||
|
||
// dropdown bar which lets you select edge type | ||
const edgeTypeDropdownBar = "//span[contains(@id, 'select2-workflow_node_edge-container')]"; | ||
const alwaysDropdown = "//li[contains(@id, 'select2-workflow_node_edge') and text()='Always']"; | ||
const successDropdown = "//li[contains(@id, 'select2-workflow_node_edge') and text()='On Success']"; | ||
const failureDropdown = "//li[contains(@id, 'select2-workflow_node_edge') and text()='On Failure']"; | ||
const selectButton = "//*[@id='workflow_maker_select_btn']"; | ||
const deleteConfirmation = "//button[@ng-click='confirmDeleteNode()']"; | ||
|
||
module.exports = { | ||
before: (client, done) => { | ||
const resources = [ | ||
getInventorySource('test-actions'), | ||
getJobTemplate('test-actions'), | ||
getProject('test-actions'), | ||
getWorkflowTemplate('test-actions'), | ||
]; | ||
|
||
Promise.all(resources) | ||
.then(([source, template, project, workflow]) => { | ||
data = { source, template, project, workflow }; | ||
done(); | ||
}); | ||
client | ||
.login() | ||
.waitForAngular() | ||
.resizeWindow(1200, 1000) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. let's avoid doing this midtest. We can launch chrome with a certain window size if it's necessary. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Noticed this happens across a ton of the UI tests ~15 times. I've made #2426 to track the issue to be handled en masse. |
||
.useXpath() | ||
.findThenClick(workflowTemplateNavTab) | ||
.pause(1500) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(workflowSelector) | ||
.findThenClick(workflowVisualizerBtn); | ||
}, | ||
'verify that workflow visualizer root node can only be set to always': client => { | ||
client | ||
.useXpath() | ||
.findThenClick(rootNode) | ||
.findThenClick(testActionsProject) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.waitForElementNotPresent(successDropdown) | ||
.waitForElementNotPresent(failureDropdown) | ||
.waitForElementPresent(alwaysDropdown); | ||
}, | ||
'verify that a non-root node can be set to always/success/failure': client => { | ||
client | ||
.useXpath() | ||
.findThenClick(childNode) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.waitForElementPresent(successDropdown) | ||
.waitForElementPresent(failureDropdown) | ||
.waitForElementPresent(alwaysDropdown) | ||
.findThenClick(edgeTypeDropdownBar); | ||
}, | ||
'verify that a sibling node can be any edge type': client => { | ||
client | ||
.useXpath() | ||
.moveToElement(childNode, 0, 0, () => { | ||
client.pause(500); | ||
client.waitForElementNotVisible(spinny); | ||
// Concatenating the xpaths lets us click the proper node | ||
client.click(childNode + nodeAdd); | ||
}) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(testActionsJob) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.waitForElementPresent(successDropdown) | ||
.waitForElementPresent(failureDropdown) | ||
.waitForElementPresent(alwaysDropdown) | ||
.findThenClick(alwaysDropdown) | ||
.click(selectButton); | ||
}, | ||
'Verify node-shifting behavior upon deletion': client => { | ||
client | ||
.findThenClick(newChildNode) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.findThenClick(successDropdown) | ||
.click(selectButton) | ||
.moveToElement(newChildNode, 0, 0, () => { | ||
client.pause(500); | ||
client.waitForElementNotVisible(spinny); | ||
client.click(newChildNode + nodeAdd); | ||
}) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(testActionsJob) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.waitForElementPresent(successDropdown) | ||
.waitForElementPresent(failureDropdown) | ||
.waitForElementPresent(alwaysDropdown) | ||
.findThenClick(alwaysDropdown) | ||
.click(selectButton) | ||
.moveToElement(newChildNode, 0, 0, () => { | ||
client.pause(500); | ||
client.waitForElementNotVisible(spinny); | ||
client.click(newChildNode + nodeRemove); | ||
}) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(deleteConfirmation) | ||
.findThenClick(leafNode) | ||
.pause(1000) | ||
.waitForElementNotVisible(spinny) | ||
.findThenClick(edgeTypeDropdownBar) | ||
.waitForElementPresent(successDropdown) | ||
.waitForElementPresent(failureDropdown) | ||
.waitForElementPresent(alwaysDropdown); | ||
}, | ||
after: client => { | ||
client.end(); | ||
} | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can confirm, this test is currently failing on the
always_nodes_ui
branch:py.test -c config/docker.cfg --base-url='http://localhost:8013' -k 'test_node_triggers_should_be_mutually_exclusive' --disable-pytest-warnings