Browse Source

bugfix: Login form was not displayed if only OAuth2 was configured (#457)

* bugfix: Login form was not displayed if only OAuth2 was configured

* bugfix: npe in AuthOAuth2Provider

* test: Try and fix flakey tests
James Read 1 year ago
parent
commit
9117163316

+ 12 - 2
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')
   })
 }
 

+ 9 - 1
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()
 

+ 9 - 1
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())
 

+ 9 - 0
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())
 

+ 10 - 0
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())
 

+ 10 - 1
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()
 

+ 7 - 0
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()

+ 6 - 5
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")
   })
 })

+ 10 - 0
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",

+ 1 - 1
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