import { browser, ElementFinder, promise } from 'protractor/built';

import { GroupInputsPage } from './group-inputs.po';

describe('Group Inputs Page', () => {
  let page: GroupInputsPage;

  beforeEach(() => {
    page = new GroupInputsPage();
  });

  it('should display title', () => {
    page.navigateTo();
    expect(page.getTitleText()).toEqual('Ionic Core Group Inputs Demo');
  });

  describe('radio group', () => {
    it('should have the proper initial value', () => {
      page.navigateTo();
      const el = page.getRaioGroup();
      expect(el.getAttribute('value')).toEqual('tripe');
    });

    it('should check the proper initial radio button', () => {
      page.navigateTo();
      const btns = page.getGroupedRadioButtons();
      expect(btns.tripe.getAttribute('checked')).toEqual('true');
      expect(btns.beef.getAttribute('checked')).toEqual(null);
      expect(btns.chicken.getAttribute('checked')).toEqual(null);
      expect(btns.brains.getAttribute('checked')).toEqual(null);
      expect(btns.tongue.getAttribute('checked')).toEqual(null);
    });

    it('should reflect back the changed value', () => {
      page.navigateTo();
      const btns = page.getGroupedRadioButtons();
      btns.chicken.click();
      expect(page.getRadioOutputText()).toEqual('chicken');
    });

    it('should check and uncheck the proper buttons on a changed value', () => {
      page.navigateTo();
      const btns = page.getGroupedRadioButtons();
      btns.chicken.click();
      expect(btns.chicken.getAttribute('checked')).toEqual('true');
      expect(btns.beef.getAttribute('checked')).toEqual(null);
      expect(btns.tripe.getAttribute('checked')).toEqual(null);
      expect(btns.brains.getAttribute('checked')).toEqual(null);
      expect(btns.tongue.getAttribute('checked')).toEqual(null);
    });
  });

  describe('non-grouped radios', () => {
    it('should check the proper initial radio button', () => {
      page.navigateTo();
      const btns = page.getUngroupedRadioButtons();
      expect(btns.tripe.getAttribute('checked')).toEqual('true');
      expect(btns.beef.getAttribute('checked')).toEqual(null);
      expect(btns.chicken.getAttribute('checked')).toEqual(null);
      expect(btns.brains.getAttribute('checked')).toEqual(null);
      expect(btns.tongue.getAttribute('checked')).toEqual(null);
    });

    it('should reflect back the changed value', () => {
      page.navigateTo();
      return browser.executeScript('window.scrollTo(0, 500);').then(function() {
        const btns = page.getUngroupedRadioButtons();
        btns.chicken.click();
        expect(page.getRadioOutputText()).toEqual('chicken');
      });
    });

    it('should check and uncheck the proper buttons on a changed value', () => {
      page.navigateTo();
      return browser.executeScript('window.scrollTo(0, 500);').then(function() {
        const btns = page.getUngroupedRadioButtons();
        btns.chicken.click();
        expect(btns.chicken.getAttribute('checked')).toEqual('true');
        expect(btns.beef.getAttribute('checked')).toEqual(null);
        expect(btns.tripe.getAttribute('checked')).toEqual(null);
        expect(btns.brains.getAttribute('checked')).toEqual(null);
        expect(btns.tongue.getAttribute('checked')).toEqual(null);
      });
    });
  });

  describe('segments', () => {
    it('should have the proper initial value', () => {
      page.navigateTo();
      const el = page.getSegment();
      expect(el.getAttribute('value')).toEqual('tripe');
    });

    it('should reflect back the changed value', () => {
      page.navigateTo();
      return browser.executeScript('window.scrollTo(0, 500);').then(function() {
        const btns = page.getSegmentButtons();
        btns.chicken.click();
        expect(page.getRadioOutputText()).toEqual('chicken');
      });
    });
  });

  describe('select input', () => {
    it('should be set the initial value', () => {
      page.navigateTo();
      const el = page.getIonicSelect();
      expect(el.getAttribute('value')).toEqual('brains');
    });
  });
});
