import { mockApiResponse, cypressConfig } from './common';
import { environment } from './../../src/environments/environment';

export class LoginHelper {
  elements: any;
  formValues = {
    companyId: '123',
    password: 'arbitaryPw',
    username: 'arbitaryUn',
  };
  route = `${cypressConfig.appUrl}/login`;
  constructor() {
    this.elements = {
      form: {
        apiError: () => cy.get('form *[cypress-id="submission-error"]'),
        companyIdField: () => cy.get('input[name="companyId"]'),
        passwordField: () => cy.get('input[name="password"]'),
        resetButton: () => cy.get('.reset'),
        submitButton: () => cy.get('form ion-button'),
        usernameField: () => cy.get('input[name="username"]'),
      },
    };
  }
  satisfyClientValidation() {
    this.elements.form.companyIdField().type(this.formValues.companyId);
    this.elements.form.usernameField().type(this.formValues.username);
    this.elements.form.passwordField().type(this.formValues.password);
  }
  visitPageAndSubmitForm(
    fixture: string,
    mockOptions: any,
  ) {
    if (fixture && mockOptions) {
      cy.fixture(fixture).as(mockOptions.response.replace('@', ''));
    }
    mockApiResponse({
      ...mockOptions,
      method: 'POST',
      url: `${environment.apiUrl}/login`,
    });
    cy.visit(this.route);
    this.satisfyClientValidation();
    this.elements.form.submitButton().click();
  }
}
