import * as path from 'path';

export abstract class TestCase {
  protected _name: string;
  protected path = path;

  public constructor() {
    this._name = path.basename(__filename);
  }

  protected abstract execute(): void;

  run(): void {
    this.execute();
  }

  public get name(): string {
    return this._name;
  }

  public set name(name: string) {
    this._name = name;
  }

  public getLastReceivedEmail(): Cypress.Chainable {
    cy.log('Waiting email to be sent.');

    cy.wait(Cypress.env('GET_EMAIL_DELAY'));

    return cy.maildevGetLastMessage();
  }

  public deleteAllEmail() {
    return cy.maildevDeleteAllMessages();
  }
}
