web: completed test for single application, provided new programming language to make it easier to write tests.

This commit is contained in:
Ken Sternberg 2023-08-25 15:30:09 -07:00
parent 9ecf5cb219
commit 8313d6f801
5 changed files with 256 additions and 71 deletions

View File

@ -0,0 +1,36 @@
"use strict";
const CLICK_TIME_DELAY = 250;
async function text(selector, value) {
const input = await $(selector);
return await input.setValue(value);
}
async function button(selector) {
console.log("HEY:", selector);
const button = await $(selector);
return await button.click();
}
async function search(searchSelector, buttonSelector) {
const inputBind = await $(searchSelector);
await inputBind.click();
const searchBlock = await $('>>>div[data-managed-by="ak-search-select"]');
const target = searchBlock.$(buttonSelector);
return await target.click();
}
async function pause(selector) {
if (selector) {
return await $(selector).waitForDisplayed();
}
return await browser.pause(CLICK_TIME_DELAY);
}
exports.$AkSel = {
button,
pause,
search,
text,
};

View File

@ -10,6 +10,7 @@
"license": "ISC",
"dependencies": {
"@wdio/cli": "^8.15.6",
"@wdio/types": "^8.15.7",
"prettier": "^3.0.2"
},
"devDependencies": {
@ -1586,6 +1587,23 @@
"node": ">=12.0.0"
}
},
"node_modules/@wdio/config/node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
}
},
"node_modules/@wdio/config/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@ -4628,22 +4646,21 @@
}
},
"node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"version": "8.15.7",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.15.7.tgz",
"integrity": "sha512-zxst2NBSMAUozcB1L/UVfdxfC9E6JPUCd1owZnS1xKo4XqXgRyzLSOTOc5TIegtrPmO9gFIdNzjnV34oehLNIQ==",
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
"@types/node": "^20.1.0"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
"node": "^16.13 || >=18"
}
},
"node_modules/@wdio/types/node_modules/@types/node": {
"version": "20.5.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
"integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ=="
},
"node_modules/@wdio/utils": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.20.3.tgz",
@ -4659,6 +4676,23 @@
"node": ">=12.0.0"
}
},
"node_modules/@wdio/utils/node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
}
},
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -5698,6 +5732,23 @@
"devOptional": true,
"peer": true
},
"node_modules/devtools/node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
}
},
"node_modules/diff": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
@ -10982,6 +11033,23 @@
"node": ">=12.0.0"
}
},
"node_modules/webdriver/node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
}
},
"node_modules/webdriverio": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.20.5.tgz",
@ -11021,6 +11089,23 @@
"node": ">=12.0.0"
}
},
"node_modules/webdriverio/node_modules/@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "^4.6.2"
}
},
"node_modules/webdriverio/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@ -12566,6 +12651,17 @@
"glob": "^8.0.3"
},
"dependencies": {
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
}
},
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@ -14751,14 +14847,18 @@
}
},
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"version": "8.15.7",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.15.7.tgz",
"integrity": "sha512-zxst2NBSMAUozcB1L/UVfdxfC9E6JPUCd1owZnS1xKo4XqXgRyzLSOTOc5TIegtrPmO9gFIdNzjnV34oehLNIQ==",
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
"@types/node": "^20.1.0"
},
"dependencies": {
"@types/node": {
"version": "20.5.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
"integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ=="
}
}
},
"@wdio/utils": {
@ -14771,6 +14871,19 @@
"@wdio/logger": "7.19.0",
"@wdio/types": "7.20.3",
"p-iteration": "^1.1.8"
},
"dependencies": {
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
}
}
}
},
"agent-base": {
@ -15530,6 +15643,19 @@
"query-selector-shadow-dom": "^1.0.0",
"ua-parser-js": "^1.0.1",
"uuid": "^8.0.0"
},
"dependencies": {
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
}
}
}
},
"devtools-protocol": {
@ -19334,6 +19460,19 @@
"got": "^11.0.2",
"ky": "^0.30.0",
"lodash.merge": "^4.6.1"
},
"dependencies": {
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
}
}
}
},
"webdriverio": {
@ -19372,6 +19511,17 @@
"webdriver": "7.20.4"
},
"dependencies": {
"@wdio/types": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.20.3.tgz",
"integrity": "sha512-5q1urjM2Q1eYFZSxKO9Uhj86rt2NWS70c2rbbnKaB9oNNHUVtFFqSKNKAkJ84rNAfo/atWqWup7VSlg3BLrGNg==",
"dev": true,
"peer": true,
"requires": {
"@types/node": "^18.0.0",
"got": "^11.8.1"
}
},
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",

View File

@ -17,6 +17,7 @@
},
"dependencies": {
"@wdio/cli": "^8.15.6",
"@wdio/types": "^8.15.7",
"prettier": "^3.0.2"
}
}

View File

@ -1,67 +1,59 @@
const { execSync } = require('child_process')
const { readdirSync } = require('fs')
const path = require('path')
const { execSync } = require("child_process");
const { readdirSync } = require("fs");
const path = require("path");
const { $AkSel } = require("../lib/idiom");
const CLICK_TIME_DELAY = 250;
describe('Login', () => {
const login = [
['text', '>>>input[name="uidField"]', "ken@goauthentik.io"],
['button', '>>>button[type="submit"]'],
['pause'],
['text', '>>>input[name="password"]', "eat10bugs"],
['button', '>>>button[type="submit"]'],
['pause', ">>>div.header h1"],
];
const simpleApplication = [
['text', '>>>ak-form-element-horizontal input[name="name"]', "This Is My Application"],
['button', ">>>ak-wizard-frame footer button.pf-m-primary"],
['button', '>>>input[value="ldapprovider"]'],
['button', ">>>ak-wizard-frame footer button.pf-m-primary"],
['text', '>>>ak-form-element-horizontal input[name="name"]', "This Is My Provider"],
['search', '>>>ak-tenanted-flow-search input[type="text"]', "button*=default-authentication-flow"],
['text', '>>>ak-form-element-horizontal input[name="tlsServerName"]', "example.goauthentik.io"],
['button', ">>>ak-wizard-frame footer button.pf-m-primary"]
];
describe("Login", () => {
it(`Should correctly log in to Authentik}`, async () => {
await browser.reloadSession()
await browser.url("http://localhost:9000")
await browser.reloadSession();
await browser.url("http://localhost:9000");
const uidField = await $('>>>input[name="uidField"]');
await uidField.setValue('ken@goauthentik.io');
let start = Date.now();
for ([command, ...args] of login) {
await $AkSel[command].apply($, args);
}
const next1 = await $('>>>button[type="submit"]');
await next1.click();
await browser.pause(CLICK_TIME_DELAY);
const pwdField = await $('>>>input[name="password"]');
await pwdField.setValue('eat10bugs');
const next2 = await $('>>>button[type="submit"]');
await next2.click();
await browser.pause(CLICK_TIME_DELAY);
const home = await $('>>>div.header h1');
expect(home).toHaveText('My applications');
const home = await $(">>>div.header h1");
expect(home).toHaveText("My applications");
const goToAdmin = await $('>>>a[href="/if/admin"]');
goToAdmin.click();
await $('>>>ak-admin-overview').waitForDisplayed();
await $(">>>ak-admin-overview").waitForDisplayed();
$AkSel.button('>>>a[href="#/core/applications;%7B%22createForm%22%3Atrue%7D"]');
const applicationLink = await $('>>>a[href="#/core/applications;%7B%22createForm%22%3Atrue%7D"]');
applicationLink.click();
await $(">>>ak-application-list").waitForDisplayed();
$AkSel.button('>>>ak-wizard-frame button[slot="trigger"]');
await $('>>>ak-application-list').waitForDisplayed();
const startWizard = await $('>>>ak-wizard-frame button[slot="trigger"]')
startWizard.click();
{
const nameInput = await $('>>>ak-form-element-horizontal input[name="name"]');
await nameInput.setValue('This Is My Application');
const slugInput = await $('>>>ak-form-element-horizontal input[name="slug"]');
await slugInput.setValue('this-is-my-application');
const nextButton = await $('>>>ak-wizard-frame footer button.pf-m-primary');
await nextButton.click();
for ([command, ...args] of simpleApplication) {
await $AkSel[command].apply($, args);
}
{
const input = await $('>>>input[value="proxyprovider-proxy"]');
await input.click();
const nextButton = await $('>>>ak-wizard-frame footer button.pf-m-primary');
await nextButton.click();
}
{
const input = await $('>>>ak-form-element-horizontal input[name="name"]');
await input.setValue('This Is My Provider');
}
await browser.pause(2000);
})
})
let timeTaken = Date.now() - start;
console.log("Total time taken : " + timeTaken + " milliseconds");
});
});

View File

@ -27,6 +27,12 @@ export class ApplicationWizardAuthenticationMethodChoice extends BasePanel {
this.dispatchWizardUpdate({ providerModel: target.value });
}
validator() {
const radios = Array.from(this.form.querySelectorAll('input[type="radio"]'));
const chosen = radios.find((radio: Element) => radio instanceof HTMLInputElement && radio.checked);
return chosen;
}
renderProvider(type: LocalTypeCreate) {
const method = this.wizard.providerModel;