import { browser, ExpectedConditions as ec, promise } from 'protractor';
import { NavBarPage, SignInPage } from '../../page-objects/jhi-page-objects';

import { LikesComponentsPage, LikesDeleteDialog, LikesUpdatePage } from './likes.page-object';

const expect = chai.expect;

describe('Likes e2e test', () => {
  let navBarPage: NavBarPage;
  let signInPage: SignInPage;
  let likesComponentsPage: LikesComponentsPage;
  let likesUpdatePage: LikesUpdatePage;
  let likesDeleteDialog: LikesDeleteDialog;

  before(async () => {
    await browser.get('/');
    navBarPage = new NavBarPage();
    signInPage = await navBarPage.getSignInPage();
    await signInPage.autoSignInUsing('admin', 'search@admin');
    await browser.wait(ec.visibilityOf(navBarPage.entityMenu), 5000);
    // await navBarPage.clickOnEntityMenu();
    await browser.sleep(5000);
  });

  it('should load Likes', async () => {
    await navBarPage.goToEntity('likes');
    likesComponentsPage = new LikesComponentsPage();
    await browser.wait(ec.visibilityOf(likesComponentsPage.title), 5000);
    expect(await likesComponentsPage.getTitle()).to.eq('gitsearchApp.likes.home.title');
    await browser.wait(ec.or(ec.visibilityOf(likesComponentsPage.entities), ec.visibilityOf(likesComponentsPage.noResult)), 10000);
  });

  it('should load create Likes page', async () => {
    await likesComponentsPage.clickOnCreateButton();
    likesUpdatePage = new LikesUpdatePage();
    expect(await likesUpdatePage.getPageTitle()).to.eq('gitsearchApp.likes.home.createOrEditLabel');
    await likesUpdatePage.cancel();
  });

  it('should create and save Likes', async () => {
    const nbButtonsBeforeCreate = await likesComponentsPage.countDeleteButtons();

    await likesComponentsPage.clickOnCreateButton();

    await promise.all([
      likesUpdatePage.setDateInput('2000-12-31'),
      likesUpdatePage.setUserIDInput('5'),
      likesUpdatePage.setProjectIDInput('5'),
    ]);

    expect(await likesUpdatePage.getDateInput()).to.eq('2000-12-31', 'Expected date value to be equals to 2000-12-31');
    expect(await likesUpdatePage.getUserIDInput()).to.eq('5', 'Expected userID value to be equals to 5');
    expect(await likesUpdatePage.getProjectIDInput()).to.eq('5', 'Expected projectID value to be equals to 5');

    await likesUpdatePage.save();
    expect(await likesUpdatePage.getSaveButton().isPresent(), 'Expected save button disappear').to.be.false;

    expect(await likesComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeCreate + 1, 'Expected one more entry in the table');
  });

  it('should delete last Likes', async () => {
    const nbButtonsBeforeDelete = await likesComponentsPage.countDeleteButtons();
    await likesComponentsPage.clickOnLastDeleteButton();

    likesDeleteDialog = new LikesDeleteDialog();
    expect(await likesDeleteDialog.getDialogTitle()).to.eq('gitsearchApp.likes.delete.question');
    await likesDeleteDialog.clickOnConfirmButton();

    expect(await likesComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeDelete - 1);
  });

  after(async () => {
    await navBarPage.autoSignOut();
  });
});