///<reference path="../../../node_modules/cypress/types/index.d.ts"/> / <reference types="Cypress" />

import {JsonBuilder} from "../../support/jsonBuilders/jsonBuilder";
import {ServiceModel} from "../../support/jsonBuilders/models/service.model";

describe('Welcome page', function () {
  var jsonBuilderAndMock : JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();

  //describe('Contact us', () => {

    beforeEach(() => {
      cy.login();
    });

  afterEach(() => {
    cy.screenshot();
  });

    it(`verifying Contact Us link"`, function () {
    cy.visit('/welcome.htm');
    cy.get('A[href="mailto:portal@lists.onap.org"]').contains('Contact Us');
      });

  it(`verifying VID version"`, function () {

    const APP_VERSION = "1902.1948";
    cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/version.json').then((res) => {
      jsonBuilderAndMock.basicJson(res,
        Cypress.config('baseUrl') + '/version',
        200,
        0,
        'app_version');
    });
    cy.visit('/welcome.htm');
    cy.getElementByDataTestsId('app-version').should("text", APP_VERSION);
  });
  //  });
  });


