mirror of
https://github.com/ansible/awx.git
synced 2026-03-22 11:25:08 -02:30
First pass at automated jt launch tests
This commit is contained in:
committed by
Jake McDermott
parent
a6837343a5
commit
264b0f248a
@@ -11,7 +11,7 @@ import pagination from './sections/pagination';
|
||||
import permissions from './sections/permissions';
|
||||
import search from './sections/search';
|
||||
|
||||
const details = createFormSection({
|
||||
const jtDetails = createFormSection({
|
||||
selector: 'form',
|
||||
props: {
|
||||
formElementSelectors: [
|
||||
@@ -31,6 +31,25 @@ const details = createFormSection({
|
||||
}
|
||||
});
|
||||
|
||||
const wfjtDetails = createFormSection({
|
||||
selector: 'form',
|
||||
props: {
|
||||
formElementSelectors: [
|
||||
'#workflow_job_template_form .Form-textInput',
|
||||
'#workflow_job_template_form select.Form-dropDown',
|
||||
'#workflow_job_template_form .Form-textArea',
|
||||
'#workflow_job_template_form input[type="checkbox"]',
|
||||
'#workflow_job_template_form .ui-spinner-input',
|
||||
'#workflow_job_template_form .ScheduleToggle-switch'
|
||||
]
|
||||
},
|
||||
labels: {
|
||||
name: 'Name',
|
||||
description: 'Description'
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
const lookupInventory = _.merge({}, lookupModal, {
|
||||
locateStrategy: 'xpath',
|
||||
selector: './/div[text()="Select inventory"]/ancestor::div[contains(@class, "modal-content")]'
|
||||
@@ -54,7 +73,7 @@ module.exports = {
|
||||
addJobTemplate: {
|
||||
selector: 'div[ui-view="form"]',
|
||||
sections: {
|
||||
details
|
||||
jtDetails
|
||||
},
|
||||
elements: {
|
||||
title: 'div[class^="Form-title"]'
|
||||
@@ -63,7 +82,7 @@ module.exports = {
|
||||
editJobTemplate: {
|
||||
selector: 'div[ui-view="form"]',
|
||||
sections: {
|
||||
details,
|
||||
jtDetails,
|
||||
permissions
|
||||
},
|
||||
elements: {
|
||||
@@ -73,7 +92,7 @@ module.exports = {
|
||||
addWorkflowJobTemplate: {
|
||||
selector: 'div[ui-view="form"]',
|
||||
sections: {
|
||||
details
|
||||
wfjtDetails
|
||||
},
|
||||
elements: {
|
||||
title: 'div[class^="Form-title"]'
|
||||
@@ -82,7 +101,7 @@ module.exports = {
|
||||
editWorkflowJobTemplate: {
|
||||
selector: 'div[ui-view="form"]',
|
||||
sections: {
|
||||
details,
|
||||
wfjtDetails,
|
||||
permissions
|
||||
},
|
||||
elements: {
|
||||
@@ -90,7 +109,7 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
list: {
|
||||
selector: '.Panel',
|
||||
selector: '.at-Panel',
|
||||
elements: {
|
||||
badge: 'span[class~="badge"]',
|
||||
title: 'div[class="List-titleText"]',
|
||||
|
||||
170
awx/ui/test/e2e/tests/test-launch-jt.js
Normal file
170
awx/ui/test/e2e/tests/test-launch-jt.js
Normal file
@@ -0,0 +1,170 @@
|
||||
import { post, patch } from '../api';
|
||||
import {
|
||||
getOrCreate,
|
||||
getProject,
|
||||
getInventory
|
||||
} from '../fixtures';
|
||||
|
||||
let templateReferences = {};
|
||||
|
||||
module.exports = {
|
||||
before: (client, done) => {
|
||||
const resources = [
|
||||
getProject('test-launch-jt'),
|
||||
getInventory('test-launch-jt')
|
||||
];
|
||||
|
||||
Promise.all(resources)
|
||||
.then(([project, inventory]) => {
|
||||
const noPromptPromise = getOrCreate('/job_templates/', {
|
||||
name: `test-launch-jt-no-prompts`,
|
||||
inventory: inventory.id,
|
||||
project: project.id,
|
||||
playbook: 'hello_world.yml',
|
||||
});
|
||||
|
||||
const promptNoPassPromise = getOrCreate('/job_templates/', {
|
||||
name: `test-launch-jt-prompts-no-pass`,
|
||||
inventory: inventory.id,
|
||||
ask_inventory_on_launch: true,
|
||||
project: project.id,
|
||||
playbook: 'hello_world.yml',
|
||||
ask_diff_mode_on_launch: true,
|
||||
ask_variables_on_launch: true,
|
||||
ask_limit_on_launch: true,
|
||||
ask_tags_on_launch: true,
|
||||
ask_skip_tags_on_launch: true,
|
||||
ask_job_type_on_launch: true,
|
||||
ask_verbosity_on_launch: true,
|
||||
ask_credential_on_launch: true
|
||||
});
|
||||
|
||||
Promise.all([noPromptPromise, promptNoPassPromise])
|
||||
.then(([noPrompt, promptNoPass]) => {
|
||||
templateReferences = {noPrompt, promptNoPass};
|
||||
let surveyPost = post(promptNoPass.related.survey_spec, {
|
||||
name: "",
|
||||
description: "",
|
||||
spec: [{
|
||||
question_name: "Foo",
|
||||
question_description: "",
|
||||
required: true,
|
||||
type: "text",
|
||||
variable: "foo",
|
||||
min: 0,
|
||||
max: 1024,
|
||||
default: "bar",
|
||||
choices: "",
|
||||
new_question: true
|
||||
}]
|
||||
});
|
||||
let surveyPatch = patch(promptNoPass.url, { survey_enabled: true });
|
||||
Promise.all([surveyPost, surveyPatch])
|
||||
.then(done);
|
||||
});
|
||||
});
|
||||
},
|
||||
'login to awx': client => {
|
||||
client.login();
|
||||
client.resizeWindow(1200, 800);
|
||||
client.waitForAngular();
|
||||
},
|
||||
'expected jt launch with no prompts to navigate to job details': client => {
|
||||
const templates = client.page.templates();
|
||||
templates.load();
|
||||
|
||||
templates.waitForElementVisible('input[class*="SmartSearch-input"]');
|
||||
|
||||
templates.section.list.section.search
|
||||
.sendKeys('@input', `id:${templateReferences.noPrompt.id}`);
|
||||
// work in progress trying to check search input for correct text
|
||||
// templates.section.list.section.search.getText('@input', function(result) {
|
||||
// client.assert.equal(result.value, `id:${templateReferences.noPrompt.id}`);
|
||||
// });
|
||||
templates.section.list.section.search.click('i[class$="search"]');
|
||||
|
||||
templates.waitForElementVisible('div.spinny');
|
||||
templates.waitForElementNotVisible('div.spinny');
|
||||
|
||||
templates.expect.element(`#templates_list .at-Row[id="row-${templateReferences.noPrompt.id}"]`).visible;
|
||||
templates.expect.element('i[class*="icon-launch"]').visible;
|
||||
templates.expect.element('i[class*="icon-launch"]').enabled;
|
||||
|
||||
templates.click('i[class*="icon-launch"]');
|
||||
templates.waitForElementVisible('div.spinny');
|
||||
templates.waitForElementNotVisible('div.spinny');
|
||||
|
||||
client.waitForElementVisible('at-job-details');
|
||||
},
|
||||
'expected jt launch with prompts but no changes to navigate to job details': client => {
|
||||
const templates = client.page.templates();
|
||||
|
||||
templates.load();
|
||||
templates.waitForElementVisible('input[class*="SmartSearch-input"]', 5000);
|
||||
|
||||
templates.section.list.section.search
|
||||
.sendKeys('@input', `id:${templateReferences.promptNoPass.id}`);
|
||||
templates.section.list.section.search.click('i[class$="search"]');
|
||||
|
||||
templates.waitForElementVisible('div.spinny');
|
||||
templates.waitForElementNotVisible('div.spinny');
|
||||
|
||||
templates.expect.element(`#templates_list .at-Row[id="row-${templateReferences.promptNoPass.id}"]`).visible;
|
||||
templates.expect.element('i[class*="icon-launch"]').visible;
|
||||
templates.expect.element('i[class*="icon-launch"]').enabled;
|
||||
|
||||
templates.click('i[class*="icon-launch"]');
|
||||
|
||||
templates.waitForElementVisible('.Prompt-previewTag');
|
||||
|
||||
templates.expect.element('#prompt_inventory_tab').visible;
|
||||
templates.expect.element('#prompt_inventory_tab').to.have.attribute('class').which.contains('at-Tab--active');
|
||||
templates.expect.element('#prompt_inventory_next').visible;
|
||||
templates.expect.element('#prompt_inventory_next').enabled;
|
||||
|
||||
templates.click('#prompt_inventory_next');
|
||||
|
||||
templates.waitForElementVisible('#prompt_credential_step');
|
||||
|
||||
templates.expect.element('#prompt_credential_tab').visible;
|
||||
templates.expect.element('#prompt_credential_tab').to.have.attribute('class').which.contains('at-Tab--active');
|
||||
templates.expect.element('#prompt_credential_next').visible;
|
||||
templates.expect.element('#prompt_credential_next').enabled;
|
||||
|
||||
templates.click('#prompt_credential_next');
|
||||
|
||||
templates.waitForElementVisible('#prompt_other_prompts_step');
|
||||
|
||||
templates.expect.element('#prompt_other_prompts_tab').visible;
|
||||
templates.expect.element('#prompt_other_prompts_tab').to.have.attribute('class').which.contains('at-Tab--active');
|
||||
templates.expect.element('#prompt_other_prompts_next').visible;
|
||||
templates.expect.element('#prompt_other_prompts_next').enabled;
|
||||
|
||||
templates.click('#prompt_other_prompts_next');
|
||||
|
||||
templates.waitForElementVisible('#prompt_survey_step');
|
||||
|
||||
templates.expect.element('#prompt_survey_tab').visible;
|
||||
templates.expect.element('#prompt_survey_tab').to.have.attribute('class').which.contains('at-Tab--active');
|
||||
templates.expect.element('#prompt_survey_next').visible;
|
||||
templates.expect.element('#prompt_survey_next').enabled;
|
||||
|
||||
templates.click('#prompt_survey_next');
|
||||
|
||||
templates.waitForElementVisible('#prompt_preview_step');
|
||||
|
||||
templates.expect.element('#prompt_preview_tab').visible;
|
||||
templates.expect.element('#prompt_preview_tab').to.have.attribute('class').which.contains('at-Tab--active');
|
||||
templates.expect.element('#prompt_finish').visible;
|
||||
templates.expect.element('#prompt_finish').enabled;
|
||||
|
||||
templates.click('#prompt_finish');
|
||||
|
||||
templates.waitForElementVisible('div.spinny');
|
||||
templates.waitForElementNotVisible('div.spinny');
|
||||
|
||||
client.waitForElementVisible('at-job-details');
|
||||
|
||||
client.end();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user