From fc3e41cc99ad799f1e94913ace1522cec643b66d Mon Sep 17 00:00:00 2001 From: Christopher Fullarton Date: Sat, 16 Jun 2018 22:05:08 +0200 Subject: [PATCH] Adds some e2e tests --- e2e/app.e2e-spec.ts | 43 ++++++++++++++++-- e2e/app.po.ts | 64 +++++++++++++++++++++++++-- package.json | 3 +- protractor.conf.js | 14 +++--- src/app/root/home/home.component.html | 4 +- 5 files changed, 111 insertions(+), 17 deletions(-) diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts index 0cf792d2..daa9dc71 100644 --- a/e2e/app.e2e-spec.ts +++ b/e2e/app.e2e-spec.ts @@ -1,14 +1,49 @@ import { FrontendPage } from './app.po'; -describe('frontend App', () => { +describe('Home: Basics', () => { let page: FrontendPage; beforeEach(() => { page = new FrontendPage(); }); - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getParagraphText()).toEqual('Welcome to app!!'); + afterEach(() => { + page.clearLocalStorage(); + page.clearSessionStorage(); + }); + + it('should display the arsnova.click slogan', () => { + page.navigateToBaseUrl(); + expect(page.getArsnovaClickSlogan()).toEqual('a r s n o v a . c l i c k'); + }); + + describe('Home: Create Quiz', () => { + + beforeEach(() => { + page = new FrontendPage(); + }); + + afterEach(() => { + page.clearLocalStorage(); + page.clearSessionStorage(); + }); + + it('should be able to create a new demo quiz and be redirected to the quiz lobby', () => { + page.navigateToBaseUrl(); + page.fillInDemoQuiz(); + expect(page.getUrl()).toEqual(`${page.getHost()}/quiz/flow/lobby`); + }); + + it('should be able to create a new abcd quiz and be redirected to the quiz lobby', () => { + page.navigateToBaseUrl(); + page.fillInAbcdQuiz(); + expect(page.getUrl()).toEqual(`${page.getHost()}/quiz/flow/lobby`); + }); + + it('should be able to create a new quiz and be redirected to the quiz manager', () => { + page.navigateToBaseUrl(); + page.fillInDefaultQuiz(); + expect(page.getUrl()).toEqual(`${page.getHost()}/quiz/manager/overview`); + }); }); }); diff --git a/e2e/app.po.ts b/e2e/app.po.ts index 8920c9ca..323586a3 100644 --- a/e2e/app.po.ts +++ b/e2e/app.po.ts @@ -1,12 +1,70 @@ -import { browser, by, element } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { promise } from 'selenium-webdriver'; export class FrontendPage { - public navigateTo(): promise.Promise { + public navigateToBaseUrl(): promise.Promise { return browser.get('/'); } - public getParagraphText(): promise.Promise { + public getUrl(): promise.Promise { + return browser.getCurrentUrl(); + } + + public getHost(): string { + return 'http://localhost:4201'; + } + + public getArsnovaClickSlogan(): promise.Promise { return element(by.css('app-root h1')).getText(); } + + public fillInDemoQuiz(): promise.Promise { + return promise.all([ + this.getQuiznameInputElement().sendKeys('Demo Quiz'), this.getPasswordInputElement().sendKeys('abc'), this.getAddDemoQuizButton().click(), + ]); + } + + public fillInAbcdQuiz(): promise.Promise { + return promise.all([ + this.getQuiznameInputElement().sendKeys('ABCD'), this.getPasswordInputElement().sendKeys('abc'), this.getAddAbcdQuizButton().click(), + ]); + } + + public fillInDefaultQuiz(): promise.Promise { + return promise.all([ + this.getQuiznameInputElement().sendKeys('testquiz'), this.getPasswordInputElement().sendKeys('abc'), this.getAddSessionButton().click(), + ]); + } + + public getAvailableQuizzesDialogCloseButton(): ElementFinder { + return element(by.css('.close.pointer')); + } + + public clearLocalStorage(): void { + browser.executeScript('window.localStorage.clear();'); + } + + public clearSessionStorage(): void { + browser.executeScript('window.sessionStorage.clear();'); + } + + private getQuiznameInputElement(): ElementFinder { + return element(by.css('#hashtag-input-field')); + } + + private getPasswordInputElement(): ElementFinder { + return element(by.css('#server-password-input-field')); + } + + private getAddSessionButton(): ElementFinder { + return element(by.css('#addSession')); + } + + private getAddDemoQuizButton(): ElementFinder { + return element(by.css('#runDemoQuizSession')); + } + + private getAddAbcdQuizButton(): ElementFinder { + return element(by.css('#runABCDQuizSession')); + } } diff --git a/package.json b/package.json index 71375490..40383a08 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,7 @@ "test:DEV": "ng test --browsers=Chrome --karma-config=src/karma.conf.dev.js --source-map=false", "test:DEV:HEADLESS": "ng test --browsers=ChromeHeadless --karma-config=src/karma.conf.dev.js --source-map=false", "lint": "ng lint", - "pree2e": "webdriver-manager update --standalone false --gecko false", - "e2e": "ng e2e --no-webdriver-update", + "e2e": "ng e2e --port 4201", "purify": "node purifycss.js", "compress": "gzip dist/browser/** -r", "http-startup": "http-server dist/browser/ -p 4711 --gzip", diff --git a/protractor.conf.js b/protractor.conf.js index 87822dc2..8f007a7a 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -1,7 +1,7 @@ // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts -const { SpecReporter } = require('jasmine-spec-reporter'); +const {SpecReporter} = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, @@ -11,8 +11,9 @@ exports.config = { capabilities: { 'browserName': 'chrome', chromeOptions: { - args: [ "--headless", "--disable-gpu", "--window-size=800x600", '--no-sandbox' ] - } + binary: process.env.CHROME_BIN, + args: ["--disable-gpu", "--window-size=800x600", '--no-sandbox'] + }, }, directConnect: false, baseUrl: 'http://localhost:49153/', @@ -20,14 +21,15 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000, - print: function() {} + print: function () { + } }, - beforeLaunch: function() { + beforeLaunch: function () { require('ts-node').register({ project: 'e2e/tsconfig.e2e.json' }); }, onPrepare() { - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}})); } }; diff --git a/src/app/root/home/home.component.html b/src/app/root/home/home.component.html index 0e5e581f..7d4e4ecd 100644 --- a/src/app/root/home/home.component.html +++ b/src/app/root/home/home.component.html @@ -3,12 +3,12 @@
-
+

a r s n o v a . c l i c k -

+
-- GitLab