mirror of
https://github.com/ansible/awx.git
synced 2026-01-13 11:00:03 -03:30
refactor e2e settings and config modules
This should make the settings and configuration logic less implicit and a little easier to follow. Some familiarity with the configuration behavior of nightwatch is still necessary in places - specifically, one should know that all test_settings defined for non-default environments are treated as overrides to the values defined for the default environment.
This commit is contained in:
parent
d70a0c8c24
commit
3800a16f3e
@ -24,7 +24,7 @@
|
||||
"test": "karma start test/spec/karma.spec.js",
|
||||
"jshint": "grunt jshint:source --no-color",
|
||||
"test:ci": "npm run test -- --single-run --reporter junit,dots --browsers=PhantomJS",
|
||||
"e2e": "./test/e2e/runner.js --config ./test/e2e/nightwatch.conf.js",
|
||||
"e2e": "./test/e2e/runner.js --config ./test/e2e/nightwatch.conf.js --suiteRetries=2",
|
||||
"unit": "karma start test/unit/karma.unit.js",
|
||||
"lint": "eslint .",
|
||||
"dev": "webpack --config build/webpack.development.js --progress",
|
||||
|
||||
@ -3,15 +3,15 @@ import https from 'https';
|
||||
import axios from 'axios';
|
||||
|
||||
import {
|
||||
awxURL,
|
||||
awxUsername,
|
||||
awxPassword
|
||||
AWX_E2E_URL,
|
||||
AWX_E2E_USERNAME,
|
||||
AWX_E2E_PASSWORD
|
||||
} from './settings';
|
||||
|
||||
let authenticated;
|
||||
|
||||
const session = axios.create({
|
||||
baseURL: awxURL,
|
||||
baseURL: AWX_E2E_URL,
|
||||
xsrfHeaderName: 'X-CSRFToken',
|
||||
xsrfCookieName: 'csrftoken',
|
||||
httpsAgent: new https.Agent({
|
||||
@ -24,7 +24,7 @@ const getEndpoint = location => {
|
||||
return location;
|
||||
}
|
||||
|
||||
return `${awxURL}/api/v2${location}`;
|
||||
return `${AWX_E2E_URL}/api/v2${location}`;
|
||||
};
|
||||
|
||||
const authenticate = () => {
|
||||
@ -35,8 +35,8 @@ const authenticate = () => {
|
||||
const uri = getEndpoint('/authtoken/');
|
||||
|
||||
const credentials = {
|
||||
username: awxUsername,
|
||||
password: awxPassword
|
||||
username: AWX_E2E_USERNAME,
|
||||
password: AWX_E2E_PASSWORD
|
||||
};
|
||||
|
||||
return session.post(uri, credentials).then(res => {
|
||||
|
||||
@ -1,6 +1,12 @@
|
||||
import { EventEmitter } from 'events';
|
||||
import { inherits } from 'util';
|
||||
|
||||
import {
|
||||
AWX_E2E_USERNAME,
|
||||
AWX_E2E_PASSWORD,
|
||||
AWX_E2E_TIMEOUT_LONG
|
||||
} from '../settings';
|
||||
|
||||
function Login () {
|
||||
EventEmitter.call(this);
|
||||
}
|
||||
@ -8,14 +14,14 @@ function Login () {
|
||||
inherits(Login, EventEmitter);
|
||||
|
||||
Login.prototype.command = function command (username, password) {
|
||||
username = username || this.api.globals.awxUsername;
|
||||
password = password || this.api.globals.awxPassword;
|
||||
username = username || AWX_E2E_USERNAME;
|
||||
password = password || AWX_E2E_PASSWORD;
|
||||
|
||||
const loginPage = this.api.page.login();
|
||||
|
||||
loginPage
|
||||
.navigate()
|
||||
.waitForElementVisible('@submit', this.api.globals.longWait)
|
||||
.waitForElementVisible('@submit', AWX_E2E_TIMEOUT_LONG)
|
||||
.waitForElementNotVisible('div.spinny')
|
||||
.setValue('@username', username)
|
||||
.setValue('@password', password)
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import { AWX_E2E_TIMEOUT_ASYNC } from '../settings';
|
||||
|
||||
exports.command = function waitForAngular (callback) {
|
||||
this.timeoutsAsyncScript(this.globals.asyncHookTimeout, () => {
|
||||
this.timeoutsAsyncScript(AWX_E2E_TIMEOUT_ASYNC, () => {
|
||||
this.executeAsync(done => {
|
||||
if (angular && angular.getTestability) {
|
||||
angular.getTestability(document.body).whenStable(done);
|
||||
|
||||
@ -2,46 +2,55 @@ import path from 'path';
|
||||
|
||||
import chromedriver from 'chromedriver';
|
||||
|
||||
import { test_workers } from './settings.js';
|
||||
|
||||
import {
|
||||
AWX_E2E_CLUSTER_HOST,
|
||||
AWX_E2E_CLUSTER_PORT,
|
||||
AWX_E2E_CLUSTER_WORKERS,
|
||||
AWX_E2E_LAUNCH_URL,
|
||||
AWX_E2E_TIMEOUT_ASYNC,
|
||||
AWX_E2E_TIMEOUT_MEDIUM
|
||||
} from './settings';
|
||||
|
||||
const resolve = location => path.resolve(__dirname, location);
|
||||
|
||||
|
||||
module.exports = {
|
||||
src_folders: [resolve('tests')],
|
||||
output_folder: resolve('reports'),
|
||||
custom_commands_path: resolve('commands'),
|
||||
page_objects_path: resolve('objects'),
|
||||
globals_path: resolve('settings.js'),
|
||||
test_settings: {
|
||||
default: {
|
||||
test_workers,
|
||||
skip_testcases_on_fail: false,
|
||||
desiredCapabilities: {
|
||||
browserName: 'chrome'
|
||||
}
|
||||
},
|
||||
smoke: {
|
||||
disable_colors: true,
|
||||
skip_testcases_on_fail: true,
|
||||
filter: 'smoke.js'
|
||||
},
|
||||
debug: {
|
||||
selenium_port: 9515,
|
||||
selenium_host: 'localhost',
|
||||
selenium_port: 9515,
|
||||
default_path_prefix: '',
|
||||
desiredCapabilities: { browserName: 'chrome' },
|
||||
test_workers: { enabled: false },
|
||||
globals: {
|
||||
before(done) {
|
||||
chromedriver.start();
|
||||
launch_url: AWX_E2E_LAUNCH_URL,
|
||||
retryAssertionTimeout: AWX_E2E_TIMEOUT_MEDIUM,
|
||||
waitForConditionTimeout: AWX_E2E_TIMEOUT_MEDIUM,
|
||||
asyncHookTimeout: AWX_E2E_TIMEOUT_ASYNC,
|
||||
before (done) {
|
||||
chromedriver.start(['--port=9515']);
|
||||
done();
|
||||
},
|
||||
after(done) {
|
||||
after (done) {
|
||||
chromedriver.stop();
|
||||
done();
|
||||
}
|
||||
}
|
||||
},
|
||||
// Note: These are environment-specific overrides to the default
|
||||
// test settings defined above.
|
||||
cluster: {
|
||||
selenium_host: AWX_E2E_CLUSTER_HOST,
|
||||
selenium_port: AWX_E2E_CLUSTER_PORT,
|
||||
default_path_prefix: '/wd/hub',
|
||||
test_workers: {
|
||||
enabled: (AWX_E2E_CLUSTER_WORKERS > 0),
|
||||
workers: AWX_E2E_CLUSTER_WORKERS
|
||||
},
|
||||
globals: { before: {}, after: {} }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -1,30 +1,25 @@
|
||||
const AWX_E2E_CLUSTER_HOST = process.env.AWX_E2E_CLUSTER_HOST || 'localhost';
|
||||
const AWX_E2E_CLUSTER_PORT = process.env.AWX_E2E_CLUSTER_PORT || 4444;
|
||||
const AWX_E2E_CLUSTER_WORKERS = process.env.AWX_E2E_CLUSTER_WORKERS || 0;
|
||||
const AWX_E2E_PASSWORD = process.env.AWX_E2E_PASSWORD || 'password';
|
||||
const AWX_E2E_URL = process.env.AWX_E2E_URL || 'https://localhost:8043';
|
||||
const AWX_E2E_USERNAME = process.env.AWX_E2E_USERNAME || 'awx-e2e';
|
||||
const AWX_E2E_PASSWORD = process.env.AWX_E2E_PASSWORD || 'password';
|
||||
const AWX_E2E_SELENIUM_HOST = process.env.AWX_E2E_SELENIUM_HOST || 'localhost';
|
||||
const AWX_E2E_SELENIUM_PORT = process.env.AWX_E2E_SELENIUM_PORT || 4444;
|
||||
const AWX_E2E_LAUNCH_URL = process.env.AWX_E2E_LAUNCH_URL || AWX_E2E_URL;
|
||||
const AWX_E2E_TIMEOUT_SHORT = process.env.AWX_E2E_TIMEOUT_SHORT || 1000;
|
||||
const AWX_E2E_TIMEOUT_MEDIUM = process.env.AWX_E2E_TIMEOUT_MEDIUM || 5000;
|
||||
const AWX_E2E_TIMEOUT_LONG = process.env.AWX_E2E_TIMEOUT_LONG || 10000;
|
||||
const AWX_E2E_TIMEOUT_ASYNC = process.env.AWX_E2E_TIMEOUT_ASYNC || 30000;
|
||||
const AWX_E2E_WORKERS = process.env.AWX_E2E_WORKERS || 0;
|
||||
const AWX_E2E_TIMEOUT_LONG = process.env.AWX_E2E_TIMEOUT_LONG || 10000;
|
||||
const AWX_E2E_TIMEOUT_MEDIUM = process.env.AWX_E2E_TIMEOUT_MEDIUM || 5000;
|
||||
const AWX_E2E_TIMEOUT_SHORT = process.env.AWX_E2E_TIMEOUT_SHORT || 1000;
|
||||
const AWX_E2E_LAUNCH_URL = process.env.AWX_E2E_LAUNCH_URL || AWX_E2E_URL;
|
||||
|
||||
module.exports = {
|
||||
awxURL: AWX_E2E_URL,
|
||||
awxUsername: AWX_E2E_USERNAME,
|
||||
awxPassword: AWX_E2E_PASSWORD,
|
||||
asyncHookTimeout: AWX_E2E_TIMEOUT_ASYNC,
|
||||
longTmeout: AWX_E2E_TIMEOUT_LONG,
|
||||
mediumTimeout: AWX_E2E_TIMEOUT_MEDIUM,
|
||||
retryAssertionTimeout: AWX_E2E_TIMEOUT_MEDIUM,
|
||||
selenium_host: AWX_E2E_SELENIUM_HOST,
|
||||
selenium_port: AWX_E2E_SELENIUM_PORT,
|
||||
launch_url: AWX_E2E_LAUNCH_URL,
|
||||
shortTimeout: AWX_E2E_TIMEOUT_SHORT,
|
||||
waitForConditionTimeout: AWX_E2E_TIMEOUT_MEDIUM,
|
||||
test_workers: {
|
||||
enabled: (AWX_E2E_WORKERS > 0),
|
||||
workers: AWX_E2E_WORKERS
|
||||
}
|
||||
AWX_E2E_CLUSTER_HOST,
|
||||
AWX_E2E_CLUSTER_PORT,
|
||||
AWX_E2E_CLUSTER_WORKERS,
|
||||
AWX_E2E_LAUNCH_URL,
|
||||
AWX_E2E_PASSWORD,
|
||||
AWX_E2E_URL,
|
||||
AWX_E2E_USERNAME,
|
||||
AWX_E2E_TIMEOUT_ASYNC,
|
||||
AWX_E2E_TIMEOUT_LONG,
|
||||
AWX_E2E_TIMEOUT_MEDIUM,
|
||||
AWX_E2E_TIMEOUT_SHORT
|
||||
};
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
@ -161,7 +163,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
@ -123,7 +125,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
@ -169,7 +171,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
@ -194,7 +196,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
@ -163,7 +165,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import uuid from 'uuid';
|
||||
|
||||
import { AWX_E2E_TIMEOUT_LONG } from '../settings';
|
||||
|
||||
const testID = uuid().substr(0, 8);
|
||||
|
||||
const store = {
|
||||
organization: {
|
||||
name: `org-${testID}`
|
||||
@ -123,7 +126,7 @@ module.exports = {
|
||||
const row = '#credentials_table tbody tr';
|
||||
|
||||
credentials.section.list.section.search
|
||||
.waitForElementVisible('@input', client.globals.longWait)
|
||||
.waitForElementVisible('@input', AWX_E2E_TIMEOUT_LONG)
|
||||
.setValue('@input', `name:${store.credential.name}`)
|
||||
.click('@searchButton');
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user