add smoke test

This commit is contained in:
Jake McDermott 2017-10-10 19:39:30 -04:00
parent b5899c193a
commit 113d62a95f
No known key found for this signature in database
GPG Key ID: 3B02CAD476EECB35
4 changed files with 295 additions and 0 deletions

View File

@ -22,6 +22,11 @@ module.exports = {
browserName: 'chrome'
}
},
smoke: {
disable_colors: true,
skip_testcases_on_fail: true,
filter: 'smoke.js'
},
debug: {
selenium_port: 9515,
selenium_host: 'localhost',

View File

@ -0,0 +1,7 @@
$ANSIBLE_VAULT;1.1;AES256
36663862313439656164323336396466323737666532643061323738646337623166653338663939
6365663839623936363566393461643961363963613333650a333463653831386463646564376265
39376362376231303064326464303738343136643931336432396638333933356337383866326539
3830316634306466310a366234333566613733633232623434363434376534663466393833666435
36373961636564353865653162393266383135363362336139613435323464356136393034636539
6166663537623261336262363732346238343066393861643134

View File

@ -0,0 +1,273 @@
import uuid from 'uuid';
const id = uuid().substr(0, 8);
const INVENTORY_NAME = `inventory-${id}`;
const MACHINE_CREDENTIAL_NAME = `credential-machine-${id}`;
const ORGANIZATION_NAME = `organization-${id}`;
const PROJECT_NAME = `project-${id}`;
const PROJECT_URL = 'https://github.com/ansible/awx';
const PROJECT_BRANCH = 'devel';
const PLAYBOOK_NAME = 'awx/ui/test/e2e/tests/smoke.yml';
const TEMPLATE_NAME = `template-${id}`;
const VAULT_CREDENTIAL_NAME = `credential-vault-${id}`;
const VAULT_CREDENTIAL_PASSWORD = 'VAULT_CREDENTIAL_PASSWORD';
module.exports = {
'login to awx': client => {
client.login();
client.resizeWindow(1200, 800);
client.waitForAngular();
},
'create organization': client => {
const organizations = client.page.organizations();
const { details } = organizations.section.add.section;
organizations.section.navigation.waitForElementVisible('@organizations');
organizations.section.navigation.expect.element('@organizations').enabled;
organizations.section.navigation.click('@organizations');
organizations.waitForElementVisible('div.spinny');
organizations.waitForElementNotVisible('div.spinny');
organizations.section.list.expect.element('@add').visible;
organizations.section.list.expect.element('@add').enabled;
organizations.section.list.click('@add');
details.waitForElementVisible('@name');
details.expect.element('@name').enabled;
details.setValue('@name', ORGANIZATION_NAME);
organizations.waitForElementVisible('@save');
organizations.expect.element('@save').enabled;
organizations.click('@save');
organizations.waitForElementVisible('div.spinny');
organizations.waitForElementNotVisible('div.spinny');
},
'create project': client => {
const projects = client.page.projects();
projects.navigate();
projects.waitForElementVisible('div.spinny');
projects.waitForElementNotVisible('div.spinny');
projects.section.list.waitForElementVisible('@add');
projects.section.list.expect.element('@add').enabled;
projects.section.list.click('@add');
projects.waitForElementVisible('label[for="name"] + div input');
projects.waitForElementVisible('label[for="organization"] + div input');
projects.waitForElementPresent('label[for="scm_type"] + div > div select option[value="git"]');
projects.setValue('label[for="name"] + div input', PROJECT_NAME);
projects.clearValue('label[for="organization"] + div input');
projects.setValue('label[for="organization"] + div input', ORGANIZATION_NAME);
projects.click('label[for="scm_type"] + div > div select option[value="git"]');
projects.waitForElementVisible('.sourceSubForm');
projects.waitForElementVisible('label[for="scm_url"] + div input');
projects.waitForElementVisible('label[for="scm_branch"] + div input');
projects.setValue('label[for="scm_url"] + div input', PROJECT_URL);
projects.setValue('label[for="scm_branch"] + div input', PROJECT_BRANCH);
projects.expect.element('#project_save_btn').enabled;
projects.click('#project_save_btn');
projects.waitForElementVisible('div.spinny');
projects.waitForElementNotVisible('div.spinny');
projects.expect.element('smart-search input').enabled;
projects.sendKeys('smart-search input', `${PROJECT_NAME}${client.Keys.ENTER}`);
projects.waitForElementVisible('div.spinny');
projects.waitForElementNotVisible('div.spinny');
projects.waitForElementVisible('div.spinny', 120000);
projects.waitForElementNotVisible('div.spinny');
projects.expect.element('i[class$="success"]').visible;
},
'create inventory': client => {
const inventories = client.page.inventories();
const details = inventories.section.addStandardInventory.section.standardInvDetails;
inventories.section.navigation.waitForElementVisible('@inventories');
inventories.section.navigation.expect.element('@inventories').enabled;
inventories.section.navigation.click('@inventories');
inventories.waitForElementVisible('div.spinny');
inventories.waitForElementNotVisible('div.spinny');
inventories.selectAdd('Inventory');
details.waitForElementVisible('@name');
details.waitForElementVisible('@organization');
details.expect.element('@name').enabled;
details.expect.element('@organization').enabled;
details.setValue('@name', INVENTORY_NAME);
details.setValue('@organization', ORGANIZATION_NAME);
inventories.waitForElementVisible('@save');
inventories.expect.element('@save').enabled;
inventories.click('@save');
inventories.waitForElementVisible('div.spinny');
inventories.waitForElementNotVisible('div.spinny');
},
'create host': client => {
const addHost = './/span[text()="+ ADD HOST"]';
client.expect.element('#hosts_tab').enabled;
client.expect.element('#hosts_tab').css('opacity').equal('1');
client.expect.element('#hosts_tab').css('background-color').contain('255, 255, 255');
client.click('#hosts_tab');
client.waitForElementVisible('div.spinny');
client.waitForElementNotVisible('div.spinny');
client.expect.element('#hosts_tab').css('background-color').contain('132, 137, 146');
client.useXpath();
client.waitForElementVisible(addHost);
client.expect.element(addHost).enabled;
client.click(addHost);
client.useCss();
client.waitForElementVisible('#host_name');
client.sendKeys('#host_name', 'localhost');
client.click('div[class="CodeMirror-scroll"]');
client.sendKeys('.CodeMirror textarea', client.Keys.ENTER);
client.sendKeys('.CodeMirror textarea', 'ansible_connection: local');
client.click('#host_host_variables_parse_type label[class$="hollow"]');
client.click('#host_host_variables_parse_type label[class$="hollow"]');
client.expect.element('#host_save_btn').enabled;
client.click('#host_save_btn');
client.waitForElementVisible('div.spinny');
client.waitForElementNotVisible('div.spinny');
},
'create vault credential': client => {
const credentials = client.page.credentials();
const { details } = credentials.section.add.section;
credentials.section.navigation.waitForElementVisible('@credentials');
credentials.section.navigation.expect.element('@credentials').enabled;
credentials.section.navigation.click('@credentials');
credentials.waitForElementVisible('div.spinny');
credentials.waitForElementNotVisible('div.spinny');
credentials.section.list.waitForElementVisible('@add');
credentials.section.list.expect.element('@add').enabled;
credentials.section.list.click('@add');
details.waitForElementVisible('@save');
details.clearAndSelectType('Vault');
details.setValue('@organization', ORGANIZATION_NAME);
details.setValue('@name', VAULT_CREDENTIAL_NAME);
details.section.vault.setValue('@vaultPassword', VAULT_CREDENTIAL_PASSWORD);
details.expect.element('@save').enabled;
details.click('@save');
credentials.waitForElementVisible('div.spinny');
credentials.waitForElementNotVisible('div.spinny');
},
'create machine credential': client => {
const credentials = client.page.credentials();
const { details } = credentials.section.add.section;
credentials.section.navigation.waitForElementVisible('@credentials');
credentials.section.navigation.expect.element('@credentials').enabled;
credentials.section.navigation.click('@credentials');
credentials.waitForElementVisible('div.spinny');
credentials.waitForElementNotVisible('div.spinny');
credentials.section.list.waitForElementVisible('@add');
credentials.section.list.expect.element('@add').enabled;
credentials.section.list.click('@add');
details.waitForElementVisible('@save');
details.clearAndSelectType('Machine');
details.setValue('@organization', ORGANIZATION_NAME);
details.setValue('@name', MACHINE_CREDENTIAL_NAME);
details.expect.element('@save').enabled;
details.click('@save');
credentials.waitForElementVisible('div.spinny');
credentials.waitForElementNotVisible('div.spinny');
},
'create job template': client => {
const templates = client.page.templates();
templates.navigate();
templates.waitForElementVisible('div.spinny');
templates.waitForElementNotVisible('div.spinny');
templates.selectAdd('Job Template');
templates.selectInventory(INVENTORY_NAME);
templates.selectProject(PROJECT_NAME);
templates.selectVaultCredential(VAULT_CREDENTIAL_NAME);
templates.selectMachineCredential(MACHINE_CREDENTIAL_NAME);
templates.selectPlaybook(PLAYBOOK_NAME);
templates.sendKeys('label[for="name"] + div input', TEMPLATE_NAME);
templates.expect.element('#job_template_save_btn').enabled;
templates.click('#job_template_save_btn');
templates.waitForElementVisible('div.spinny');
templates.waitForElementNotVisible('div.spinny');
templates.expect.element('#job_template_save_btn').enabled;
},
'launch job': client => {
const templates = client.page.templates();
templates.waitForElementVisible('smart-search input');
templates.expect.element('smart-search input').enabled;
templates.sendKeys('smart-search input', `${TEMPLATE_NAME}${client.Keys.ENTER}`);
templates.waitForElementVisible('div.spinny');
templates.waitForElementNotVisible('div.spinny');
templates.sendKeys('smart-search input', `${TEMPLATE_NAME}${client.Keys.ENTER}`);
templates.waitForElementVisible('div.spinny');
templates.waitForElementNotVisible('div.spinny');
templates.waitForElementPresent('i[class$="launch"]');
templates.waitForElementNotPresent('i[class$="launch"]:nth-of-type(2)');
templates.expect.element('.List-titleBadge').text.equal('1');
templates.waitForElementVisible('i[class$="launch"]');
templates.click('i[class$="launch"]');
},
'verify expected job results': client => {
const output = './/span[normalize-space(text())=\'"msg": "Hello World!"\']';
const running = 'i[class$="icon-job-running"]';
const success = 'i[class$="icon-job-successful"]';
client.waitForElementVisible('div.spinny');
client.waitForElementNotVisible('div.spinny');
client.waitForElementVisible('.JobResults-detailsPanel');
client.waitForElementNotPresent(running, 60000);
client.waitForElementVisible(success, 60000);
client.useXpath();
client.waitForElementVisible(output, 60000);
client.useCss();
client.end();
}
};

View File

@ -0,0 +1,10 @@
---
- hosts: all
tasks:
- name: Import Vault Variables
include_vars: smoke-vars.yml
no_log: true
- name: Display Vault Message
debug:
msg: '{{ vault_message }}'