cloudfoundry/stratos

View on GitHub
src/test-e2e/login/login.po.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { browser, by, element, promise, protractor } from 'protractor';

import { E2EHelpers } from '../helpers/e2e-helpers';
import { ssoHelper } from '../helpers/sso-helper';
import { Component } from '../po/component.po';
import { SSOLoginPage } from './sso-login.po';

const LOGIN_FAIL_MSG = 'Username and password combination incorrect. Please try again.';
const until = protractor.ExpectedConditions;

export class LoginPage {

  helpers = new E2EHelpers();

  navigateTo() {
    return browser.get('/login');
  }

  isLoginPage(): promise.Promise<boolean> {
    return browser.getCurrentUrl().then(url => url === browser.baseUrl + '/login');
  }

  getTitle() {
    return element(by.css('app-root h1')).getText();
  }

  enterLogin(username: string, password: string) {
    const formFields = this.helpers.getFormFields('loginForm');
    formFields.get(0).clear();
    formFields.get(1).clear();
    formFields.get(0).sendKeys(username);
    return formFields.get(1).sendKeys(password);
  }

  loginButton() {
    return this.helpers.getForm('loginForm').element(by.css('button[type="submit"]'));
  }

  getLoginError() {
    return element(by.id('login-error-message')).getText();
  }

  login(username: string, password: string) {
    if (ssoHelper.ssoEnabled) {
      const ssoLoginPage = new SSOLoginPage();
      return ssoLoginPage.login(username, password);
    } else {
      return this.nonSSOLogin(username, password);
    }
  }

  nonSSOLogin(username: string, password: string) {
    this.navigateTo();
    this.enterLogin(username, password);
    this.loginButton().click();

    browser.wait(() => {
      return browser.getCurrentUrl().then(function (url) {
        return !url.endsWith('/login');
      });
    }, 10000, 'timed out waiting for login');

    // Wait for the page to be ready
    return browser.getCurrentUrl().then((url: string) => {
      if (url.endsWith('/noendpoints')) {
        return this.waitForNoEndpoints();
      } else {
        return this.waitForApplicationPage();
      }
    });
  }

  waitForLoggedIn() {
    return browser.wait(until.presenceOf(element(by.tagName('app-dashboard-base'))), 5000);
  }

  isLoginError() {
    return this.getLoginError().then(text => text === LOGIN_FAIL_MSG);
  }

  waitForDashboardPage() {
    return browser.wait(until.presenceOf(element(by.tagName('app-dashboard-base'))), 5000);
  }

  // Wait until an application page is shown (one that uses the dashboard base)
  waitForApplicationPage() {
    return browser.wait(until.presenceOf(element(by.tagName('app-dashboard-base'))), 5000);
    // return browser.wait(until.presenceOf(element(by.tagName('app-application-wall'))), 5000);
  }

  waitForLogin() {
    return browser.wait(until.presenceOf(element(by.id('app-login-page'))), 10000);
  }

  waitForNoEndpoints() {
    return browser.wait(until.presenceOf(element(by.tagName('app-no-endpoints-non-admin'))), 10000);
  }

  waitForLoading() {
    return Component.waitUntilNotShown(element(by.id('login__loading')));
  }

}