import { browser, element, by } from 'protractor';
import { appLang, describeIf } from '../protractor-helpers';

describeIf(appLang.appIsTs || appLang.appIsJs, 'Forms Tests', function () {

  beforeEach(function () {
    browser.get('');
  });

  it('should display correct title', function () {
    expect(element.all(by.css('h1')).get(0).getText()).toEqual('Hero Form');
  });


  it('should not display message before submit', function () {
    let ele = element(by.css('h2'));
    expect(ele.isDisplayed()).toBe(false);
  });

  it('should hide form after submit', function () {
    let ele = element.all(by.css('h1')).get(0);
    expect(ele.isDisplayed()).toBe(true);
    let b = element.all(by.css('button[type=submit]')).get(0);
    b.click().then(function() {
      expect(ele.isDisplayed()).toBe(false);
    });
  });

  it('should display message after submit', function () {
    let b = element.all(by.css('button[type=submit]')).get(0);
    b.click().then(function() {
      expect(element(by.css('h2')).getText()).toContain('You submitted the following');
    });
  });

  it('should hide form after submit', function () {
    let alterEgoEle = element.all(by.css('input[name=alterEgo]')).get(0);
    expect(alterEgoEle.isDisplayed()).toBe(true);
    let submitButtonEle = element.all(by.css('button[type=submit]')).get(0);
    submitButtonEle.click().then(function() {
      expect(alterEgoEle.isDisplayed()).toBe(false);
    });
  });

  it('should reflect submitted data after submit', function () {
    let test = 'testing 1 2 3';
    let newValue: string;
    let alterEgoEle = element.all(by.css('input[name=alterEgo]')).get(0);
    alterEgoEle.getAttribute('value').then(function(value: string) {
      alterEgoEle.sendKeys(test);
      newValue = value + test;
      expect(alterEgoEle.getAttribute('value')).toEqual(newValue);
      let b = element.all(by.css('button[type=submit]')).get(0);
      return b.click();
    }).then(function() {
      let alterEgoTextEle = element(by.cssContainingText('div', 'Alter Ego'));
      expect(alterEgoTextEle.isPresent()).toBe(true, 'cannot locate "Alter Ego" label');
      let divEle = element(by.cssContainingText('div', newValue));
      expect(divEle.isPresent()).toBe(true, 'cannot locate div with this text: ' + newValue);
    });
  });
});