/**
 * @license
 * Copyright Google Inc. All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */

import {modifiedInIvy} from '@angular/private/testing';
import {$, ExpectedConditions, browser, by, element} from 'protractor';
import {verifyNoBrowserErrors} from '../../../../test-utils';

function waitForElement(selector: string) {
  const EC = ExpectedConditions;
  // Waits for the element with id 'abc' to be present on the dom.
  browser.wait(EC.presenceOf($(selector)), 20000);
}

describe('ngIf', () => {
  const URL = '/ngIf';
  afterEach(verifyNoBrowserErrors);

  describe('ng-if-simple', () => {
    let comp = 'ng-if-simple';
    it('should hide/show content', () => {
      browser.get(URL);
      waitForElement(comp);
      expect(element.all(by.css(comp)).get(0).getText()).toEqual('hide show = true\nText to show');
      element(by.css(comp + ' button')).click();
      expect(element.all(by.css(comp)).get(0).getText()).toEqual('show show = false');
    });
  });

  describe('ng-if-else', () => {
    let comp = 'ng-if-else';
    it('should hide/show content', () => {
      browser.get(URL);
      waitForElement(comp);
      expect(element.all(by.css(comp)).get(0).getText()).toEqual('hide show = true\nText to show');
      element(by.css(comp + ' button')).click();
      expect(element.all(by.css(comp)).get(0).getText())
          .toEqual('show show = false\nAlternate text while primary text is hidden');
    });
  });

  describe('ng-if-then-else', () => {
    let comp = 'ng-if-then-else';

    modifiedInIvy('FW-1019: Design new API to replace static queries')
        .it('should hide/show content', () => {
          browser.get(URL);
          waitForElement(comp);
          expect(element.all(by.css(comp)).get(0).getText())
              .toEqual('hideSwitch Primary show = true\nPrimary text to show');
          element.all(by.css(comp + ' button')).get(1).click();
          expect(element.all(by.css(comp)).get(0).getText())
              .toEqual('hideSwitch Primary show = true\nSecondary text to show');
          element.all(by.css(comp + ' button')).get(0).click();
          expect(element.all(by.css(comp)).get(0).getText())
              .toEqual(
                  'showSwitch Primary show = false\nAlternate text while primary text is hidden');
        });
  });

  describe('ng-if-let', () => {
    let comp = 'ng-if-let';
    it('should hide/show content', () => {
      browser.get(URL);
      waitForElement(comp);
      expect(element.all(by.css(comp)).get(0).getText())
          .toEqual('Next User\nWaiting... (user is null)');
      element(by.css(comp + ' button')).click();
      expect(element.all(by.css(comp)).get(0).getText()).toEqual('Next User\nHello Smith, John!');
    });
  });
});
