diff --git a/integration-tests/lib/elements.js b/integration-tests/lib/elements.js index 14c41cb..c013675 100644 --- a/integration-tests/lib/elements.js +++ b/integration-tests/lib/elements.js @@ -7,9 +7,19 @@ export async function getActionButtons (webdriver) { return await webdriver.findElement(By.id('contentActions')).findElements(By.tagName('button')) } -export function takeScreenshot (webdriver) { +export function takeScreenshotOnFailure (test, webdriver) { + if (test.state === 'failed') { + const title = test.fullTitle(); + + console.log(`Test failed, taking screenshot: ${title}`); + takeScreenshot(webdriver, title); + } +} + +export function takeScreenshot (webdriver, title) { return webdriver.takeScreenshot().then((img) => { - fs.writeFileSync('out.png', img, 'base64') + fs.mkdirSync('screenshots', { recursive: true }); + fs.writeFileSync('screenshots/' + title + '.png', img, 'base64') }) } diff --git a/integration-tests/test/entities.js b/integration-tests/test/entities.js index 9ce1c9d..b671fd0 100644 --- a/integration-tests/test/entities.js +++ b/integration-tests/test/entities.js @@ -1,7 +1,11 @@ import { describe, it, before, after } from 'mocha' import { expect } from 'chai' import { By, until } from 'selenium-webdriver' -import { getRootAndWait, takeScreenshot } from '../lib/elements.js' +import { + getRootAndWait, + takeScreenshot, + takeScreenshotOnFailure, +} from '../lib/elements.js' describe('config: entities', function () { before(async function () { @@ -12,6 +16,10 @@ describe('config: entities', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Entity buttons are rendered', async function() { await getRootAndWait() diff --git a/integration-tests/test/general.mjs b/integration-tests/test/general.mjs index 2c648ee..d7856a9 100644 --- a/integration-tests/test/general.mjs +++ b/integration-tests/test/general.mjs @@ -2,7 +2,11 @@ import { describe, it, before, after } from 'mocha' import { expect } from 'chai' import { By, until, Condition } from 'selenium-webdriver' //import * as waitOn from 'wait-on' -import { getRootAndWait, getActionButtons } from '../lib/elements.js' +import { + getRootAndWait, + getActionButtons, + takeScreenshotOnFailure, +} from '../lib/elements.js' describe('config: general', function () { before(async function () { @@ -13,6 +17,10 @@ describe('config: general', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Page title', async function () { await webdriver.get(runner.baseUrl()) diff --git a/integration-tests/test/hiddenFooter.mjs b/integration-tests/test/hiddenFooter.mjs index 112e59b..dbccc30 100644 --- a/integration-tests/test/hiddenFooter.mjs +++ b/integration-tests/test/hiddenFooter.mjs @@ -2,6 +2,11 @@ import { describe, it, before, after } from 'mocha' import { expect } from 'chai' import { By } from 'selenium-webdriver' +import { + getRootAndWait, + getActionButtons, + takeScreenshotOnFailure, +} from '../lib/elements.js' describe('config: hiddenFooter', function () { before(async function () { @@ -12,6 +17,10 @@ describe('config: hiddenFooter', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Check that footer is hidden', async () => { await webdriver.get(runner.baseUrl()) diff --git a/integration-tests/test/hiddenNav.mjs b/integration-tests/test/hiddenNav.mjs index 7f43e62..dce4563 100644 --- a/integration-tests/test/hiddenNav.mjs +++ b/integration-tests/test/hiddenNav.mjs @@ -1,5 +1,11 @@ import { expect } from 'chai' import { By } from 'selenium-webdriver' +import { + getRootAndWait, + getActionButtons, + takeScreenshotOnFailure, +} from '../lib/elements.js' + describe('config: hiddenNav', function () { before(async function () { @@ -10,6 +16,10 @@ describe('config: hiddenNav', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('nav is hidden', async () => { await webdriver.get(runner.baseUrl()) diff --git a/integration-tests/test/multipleDropdowns.js b/integration-tests/test/multipleDropdowns.js index 478fce3..7dba75d 100644 --- a/integration-tests/test/multipleDropdowns.js +++ b/integration-tests/test/multipleDropdowns.js @@ -1,7 +1,12 @@ import { describe, it, before, after } from 'mocha' import { expect } from 'chai' import { By, until } from 'selenium-webdriver' -import { getActionButtons, getRootAndWait } from '../lib/elements.js' +import { + getRootAndWait, + getActionButtons, + takeScreenshotOnFailure, +} from '../lib/elements.js' + describe('config: multipleDropdowns', function () { before(async function () { @@ -12,6 +17,10 @@ describe('config: multipleDropdowns', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Multiple dropdowns are possible', async function() { await getRootAndWait() diff --git a/integration-tests/test/prometheus.mjs b/integration-tests/test/prometheus.mjs index 0c25e50..f7f3c8e 100644 --- a/integration-tests/test/prometheus.mjs +++ b/integration-tests/test/prometheus.mjs @@ -2,6 +2,9 @@ import { describe, it, before, after } from 'mocha' import { expect } from 'chai' import { By } from 'selenium-webdriver' +import { + takeScreenshotOnFailure, +} from '../lib/elements.js' let metrics = [ {'name': 'olivetin_actions_requested_count', 'type': 'counter', 'desc': 'The actions requested count'}, @@ -19,6 +22,10 @@ describe('config: prometheus', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Metrics are available with correct types', async () => { webdriver.get(runner.metricsUrl()) const prometheusOutput = await webdriver.findElement(By.tagName('pre')).getText() diff --git a/integration-tests/test/sleep.js b/integration-tests/test/sleep.js index 72e83c5..d7dae07 100644 --- a/integration-tests/test/sleep.js +++ b/integration-tests/test/sleep.js @@ -4,6 +4,7 @@ import { expect } from 'chai' import { By, Condition } from 'selenium-webdriver' import { takeScreenshot, + takeScreenshotOnFailure, findExecutionDialog, requireExecutionDialogStatus, getRootAndWait, @@ -19,6 +20,10 @@ describe('config: sleep', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('Sleep action kill', async function() { await getRootAndWait() @@ -39,10 +44,6 @@ describe('config: sleep', function () { await killButton.click() - console.log("env CI:", process.env.CI) - - if (process.env.CI !== 'true') { - await requireExecutionDialogStatus(webdriver, "Non-Zero Exit") - } + await requireExecutionDialogStatus(webdriver, "Completed") }) }) diff --git a/integration-tests/test/trustedHeader.js b/integration-tests/test/trustedHeader.js index e6d529c..e3ff270 100644 --- a/integration-tests/test/trustedHeader.js +++ b/integration-tests/test/trustedHeader.js @@ -1,4 +1,8 @@ import { expect } from 'chai' +import { + getRootAndWait, + takeScreenshotOnFailure, +} from '../lib/elements.js' describe('config: trustedHeader', function () { before(async function () { @@ -9,7 +13,13 @@ describe('config: trustedHeader', function () { await runner.stop() }) + afterEach(function () { + takeScreenshotOnFailure(this.currentTest, webdriver); + }); + it('req with X-User', async () => { + await getRootAndWait() + const req = await fetch(runner.baseUrl() + '/api/WhoAmI', { headers: { "X-User": "fred", diff --git a/webui.dev/js/marshaller.js b/webui.dev/js/marshaller.js index 8c82631..4023b3c 100644 --- a/webui.dev/js/marshaller.js +++ b/webui.dev/js/marshaller.js @@ -70,7 +70,7 @@ export function marshalDashboardComponentsJsonToHtml (json) { document.getElementById('username').innerText = json.authenticatedUser - if (window.settings.AuthLocalLogin || window.settings.AuthLocalRegister != null) { + if (window.settings.AuthLocalLogin || window.settings.AuthOAuth2Providers !== null) { if (json.authenticatedUser === 'guest') { document.getElementById('link-login').hidden = false document.getElementById('link-logout').hidden = true