update e2e and smoke tests for multivault select

This commit is contained in:
Jake McDermott
2017-12-14 00:47:37 -05:00
parent 6759e60428
commit 5939116b0a
5 changed files with 92 additions and 139 deletions

View File

@@ -95,9 +95,6 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
let extraCredIds = $scope.selectedCredentials.extra.map(cred => cred.id);
$scope.credentials.forEach(cred => {
cred.checked = (extraCredIds.indexOf(cred.id) > - 1) ? 1 : 0;
// if (cred.credential_type !== $scope.credentialKinds.Machine) {
// cred.checked = (extraCredIds.indexOf(cred.id) > - 1) ? 1 : 0;
//}
});
$scope.credTags = MultiCredentialService
@@ -105,36 +102,6 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
$scope.allCredentialTypeOptions);
};
// let updateMachineCredentialList = function() {
// $scope.credentials.forEach(cred => {
// if (cred.credential_type === $scope.credentialKinds.Machine) {
// cred.checked = ($scope.selectedCredentials
// .machine !== null &&
// cred.id === $scope.selectedCredentials
// .machine.id) ? 1 : 0;
// }
// });
// $scope.credTags = MultiCredentialService
// .updateCredentialTags($scope.selectedCredentials,
// $scope.allCredentialTypeOptions);
// };
// let updateVaultCredentialList = function() {
// $scope.credentials.forEach(cred => {
// if (cred.credential_type === $scope.credentialKinds.Vault) {
// cred.checked = ($scope.selectedCredentials
// .vault !== null &&
// cred.id === $scope.selectedCredentials
// .vault.id) ? 1 : 0;
// }
// });
// $scope.credTags = MultiCredentialService
// .updateCredentialTags($scope.selectedCredentials,
// $scope.allCredentialTypeOptions);
// };
let uncheckAllCredentials = function() {
$scope.credentials.forEach(cred => {
cred.checked = 0;
@@ -200,108 +167,51 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
$scope.$watchCollection('credentials', updateExtraCredentialsList);
$scope.$watchCollection('selectedCredentials.extra', () => {
//$scope.$watchGroup(['credentials', 'selectedCredentials.extra'], () => {
if($scope.credentials && $scope.credentials.length > 0) {
if($scope.selectedCredentials.extra &&
$scope.selectedCredentials.extra.length > 0){ //&&
// parseInt($scope.credentialKind) !== $scope.credentialKinds.Machine) {
$scope.selectedCredentials.extra.length > 0) {
updateExtraCredentialsList();
} else { //if (parseInt($scope.credentialKind) !== $scope.credentialKinds.Machine) {
} else {
uncheckAllCredentials();
}
}
});
// $scope.$watch('selectedCredentials.machine', () => {
// if($scope.selectedCredentials &&
// $scope.selectedCredentials.machine &&
// parseInt($scope.credentialKind) === $scope.credentialKinds.Machine) {
// updateMachineCredentialList();
// } else {
// uncheckAllCredentials();
// }
// });
// $scope.$watch('selectedCredentials.vault', () => {
// if($scope.selectedCredentials &&
// $scope.selectedCredentials.vault &&
// parseInt($scope.credentialKind) === $scope.credentialKinds.Vault) {
// updateVaultCredentialList();
// } else {
// uncheckAllCredentials();
// }
// });
// $scope.$watchGroup(['credentials',
// 'selectedCredentials.machine',
// 'selectedCredentials.vault'], () => {
// if($scope.credentials &&
// $scope.credentials.length > 0) {
// if($scope.selectedCredentials &&
// $scope.selectedCredentials.machine &&
// parseInt($scope.credentialKind) === $scope.credentialKinds.Machine) {
// updateMachineCredentialList();
// } else if($scope.selectedCredentials &&
// $scope.selectedCredentials.vault &&
// parseInt($scope.credentialKind) === $scope.credentialKinds.Vault) {
// updateVaultCredentialList();
// } else if($scope.selectedCredentials &&
// $scope.selectedCredentials.extra &&
// $scope.selectedCredentials.extra.length > 0 &&
// parseInt($scope.credentialKind) !== $scope.credentialKinds.Machine) {
// updateExtraCredentialsList();
// } else {
// uncheckAllCredentials();
// }
// }
// });
};
$scope.$on('multiCredentialModalLinked', function() {
init();
});
$scope.toggle_credential = id => {
// This is called only when a checkbox input is clicked directly. For clicks anywhere
// else on the row or direct radio button clicks, the toggle_row handler is called
// instead with a slightly different set of arguments. We normalize those arguments
// here and pass them through to the other handler so that the behavior is consistent.
const [credential] = $scope.credentials.filter(credential => credential.id === id);
return $scope.toggle_row(credential);
};
$scope.toggle_row = function(selectedRow) {
// if(false) { //if(parseInt($scope.credentialKind) === $scope.credentialKinds.Machine) {
// if($scope.selectedCredentials &&
// $scope.selectedCredentials.machine &&
// $scope.selectedCredentials.machine.id === selectedRow.id) {
// $scope.selectedCredentials.machine = null;
// } else {
// $scope.selectedCredentials.machine = _.cloneDeep(selectedRow);
// }
// }else if (false) { //if(parseInt($scope.credentialKind) === $scope.credentialKinds.Vault) {
// if($scope.selectedCredentials &&
// $scope.selectedCredentials.vault &&
// $scope.selectedCredentials.vault.id === selectedRow.id) {
// $scope.selectedCredentials.vault = null;
// } else {
// $scope.selectedCredentials.vault = _.cloneDeep(selectedRow);
// }
// } else {
let rowDeselected = false;
for (let i = $scope.selectedCredentials.extra.length - 1; i >= 0; i--) {
if($scope.selectedCredentials.extra[i].id === selectedRow.id) {
let rowDeselected = false;
for (let i = $scope.selectedCredentials.extra.length - 1; i >= 0; i--) {
if($scope.selectedCredentials.extra[i].id === selectedRow.id) {
$scope.selectedCredentials.extra.splice(i, 1);
rowDeselected = true;
} else if(selectedRow.credential_type === $scope.selectedCredentials.extra[i].credential_type) {
if (selectedRow.credential_type !== $scope.credentialKinds.Vault) {
$scope.selectedCredentials.extra.splice(i, 1);
rowDeselected = true;
} else if(selectedRow.credential_type === $scope.selectedCredentials.extra[i].credential_type) {
if (selectedRow.credential_type !== $scope.credentialKinds.Vault) {
$scope.selectedCredentials.extra.splice(i, 1);
}
}
}
if(!rowDeselected) {
$scope.selectedCredentials.extra
.push(_.cloneDeep(selectedRow));
}
// }
}
if(!rowDeselected) {
$scope.selectedCredentials.extra
.push(_.cloneDeep(selectedRow));
}
};
$scope.selectedCredentialsDirty = function() {
if ($scope.originalSelectedCredentials) {
return !($scope.originalSelectedCredentials.machine === null &&
$scope.originalSelectedCredentials.vault === null &&
$scope.originalSelectedCredentials.extra.length === 0) &&
return !($scope.originalSelectedCredentials.extra.length === 0) &&
!_.isEqual($scope.selectedCredentials,
$scope.originalSelectedCredentials);
} else {

View File

@@ -39,6 +39,7 @@ const vault = createFormSection({
selector: '.at-InputGroup-inset',
labels: {
vaultPassword: 'Vault Password',
vaultIdentifier: 'Vault Identifier'
}
});

View File

@@ -226,11 +226,10 @@ module.exports = {
.waitForElementVisible('div.spinny')
.waitForElementNotVisible('div.spinny')
.waitForElementNotPresent('multi-credential-modal tbody tr:nth-child(2)')
.waitForElementVisible('multi-credential-modal tbody tr:nth-child(1) input[type="radio"]')
.click('multi-credential-modal tbody tr:nth-child(1) input[type="radio"]')
.waitForElementVisible('multi-credential-modal tbody tr:nth-child(1) input[type="checkbox"]')
.click('multi-credential-modal tbody tr:nth-child(1) input[type="checkbox"]')
.click('multi-credential-modal button[class*="save"]')
.waitForElementVisible('div.spinny')
.waitForElementNotVisible('div.spinny');
.pause(1000);
return this;
},
@@ -256,8 +255,7 @@ module.exports = {
.waitForElementVisible('multi-credential-modal tbody tr:nth-child(1) input[type="radio"]')
.click('multi-credential-modal tbody tr:nth-child(1) input[type="radio"]')
.click('multi-credential-modal button[class*="save"]')
.waitForElementVisible('div.spinny')
.waitForElementNotVisible('div.spinny');
.pause(1000);
return this;
}

View File

@@ -6,12 +6,12 @@ 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 PROJECT_URL = 'https://github.com/jlaska/ansible-playbooks';
const PROJECT_BRANCH = 'master';
const PLAYBOOK_NAME = 'multivault.yml';
const TEMPLATE_NAME = `template-${id}`;
const VAULT_CREDENTIAL_NAME = `credential-vault-${id}`;
const VAULT_CREDENTIAL_PASSWORD = 'VAULT_CREDENTIAL_PASSWORD';
const VAULT_CREDENTIAL_NAME_1 = `credential-vault-${id}-1`;
const VAULT_CREDENTIAL_NAME_2 = `credential-vault-${id}-2`;
module.exports = {
'login to awx': client => {
@@ -153,7 +153,7 @@ module.exports = {
client.waitForElementVisible('div.spinny');
client.waitForElementNotVisible('div.spinny');
},
'create vault credential': client => {
'create vault credentials': client => {
const credentials = client.page.credentials();
const { details } = credentials.section.add.section;
@@ -171,9 +171,35 @@ module.exports = {
details.waitForElementVisible('@save');
details.clearAndSelectType('Vault');
details.setValue('@organization', ORGANIZATION_NAME);
details.setValue('@name', VAULT_CREDENTIAL_NAME);
details.setValue('@name', VAULT_CREDENTIAL_NAME_1);
details.section.vault.setValue('@vaultPassword', VAULT_CREDENTIAL_PASSWORD);
details.section.vault.setValue('@vaultPassword', 'secret1');
details.section.vault.setValue('@vaultIdentifier', 'first');
details.expect.element('@save').enabled;
details.click('@save');
credentials.waitForElementVisible('div.spinny');
credentials.waitForElementNotVisible('div.spinny');
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_2);
details.section.vault.setValue('@vaultPassword', 'secret2');
details.section.vault.setValue('@vaultIdentifier', 'second');
details.expect.element('@save').enabled;
details.click('@save');
@@ -217,7 +243,8 @@ module.exports = {
templates.selectAdd('Job Template');
templates.selectInventory(INVENTORY_NAME);
templates.selectProject(PROJECT_NAME);
templates.selectVaultCredential(VAULT_CREDENTIAL_NAME);
templates.selectVaultCredential(VAULT_CREDENTIAL_NAME_1);
templates.selectVaultCredential(VAULT_CREDENTIAL_NAME_2);
templates.selectMachineCredential(MACHINE_CREDENTIAL_NAME);
templates.selectPlaybook(PLAYBOOK_NAME);
templates.sendKeys('label[for="name"] + div input', TEMPLATE_NAME);
@@ -253,7 +280,8 @@ module.exports = {
templates.click('i[class$="launch"]');
},
'verify expected job results': client => {
const output = './/span[normalize-space(text())=\'"msg": "Hello World!"\']';
const output1 = './/span[normalize-space(text())=\'"first": "First!"\']';
const output2 = './/span[normalize-space(text())=\'"second": "Second!"\']';
const running = 'i[class$="icon-job-running"]';
const success = 'i[class$="icon-job-successful"]';
@@ -265,7 +293,8 @@ module.exports = {
client.waitForElementVisible(success, 60000);
client.useXpath();
client.waitForElementVisible(output, 60000);
client.waitForElementVisible(output1, 60000);
client.waitForElementVisible(output2, 60000);
client.useCss();
client.end();

View File

@@ -1,10 +1,25 @@
---
- hosts: all
tasks:
- name: Import Vault Variables
include_vars: smoke-vars.yml
no_log: true
# ansible-playbook multivault.yml --vault-id var1@prompt --vault-id var2@prompt
# Vault password (var1): secret1
# Vault password (var2): secret2
- name: Display Vault Message
debug:
msg: '{{ vault_message }}'
- hosts: all
gather_facts: false
vars:
first: !vault |
$ANSIBLE_VAULT;1.2;AES256;first
30326539376633656433636231653132623266336338316462356132366361653566303364353335
6665626463633737666336643334353262373836613332650a353531666262636531383430363935
33633465306165393538323336323135393730383563653738666163633835383262396135353765
6238333837306332630a336538623333313636353363326666613564353666623635373432386162
3562
second: !vault |
$ANSIBLE_VAULT;1.2;AES256;second
34653738643565633930336534363230343562343362643432616165373034376565353833366361
6264346330376564643262643166623164323433336631360a396336353866323663613935383534
33643034373439326435373539323433313832366437303764353562653834623966663533613464
3961663934613264360a613763346638636566386461333235366335336564353935356232316265
3164
tasks:
- debug: var=first
- debug: var=second