mirror of
https://github.com/ansible/awx.git
synced 2026-03-13 23:17:32 -02:30
update e2e and smoke tests for multivault select
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -39,6 +39,7 @@ const vault = createFormSection({
|
||||
selector: '.at-InputGroup-inset',
|
||||
labels: {
|
||||
vaultPassword: 'Vault Password',
|
||||
vaultIdentifier: 'Vault Identifier'
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user