import { LoginPage, AdminPayment } from '@admin-lib/index';
import { Provider_Type, User_Type } from '@support-onboard/index';
import {
  paymentMethodData,
  cardNumber
} from '@fixtures/payment-method/payment-method-data';

describe('Commerce: Valid CVV', () => {
  beforeEach(() => {
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.SABRE_FLIGHT],
      users: [User_Type.ADMIN]
    });
    AdminPayment.visitPage();
    AdminPayment.clickAddCard('SETTINGS_ADD_NEW_CARD');
    AdminPayment.closeHelpPopup();
  });

  it(
    'C377734: Should be checked to have 3 digit CVC for Visa and Mastercard',
    { tags: ['@tier1'] },
    () => {
      // Visa, cvc error message should be shown
      AdminPayment.enterNickname(paymentMethodData.nickname);
      AdminPayment.enterCardInfo();
      AdminPayment.enterBillingAddressInfo();
      AdminPayment.enterCardNumber(cardNumber.visa);
      AdminPayment.enterCardCVC('12');
      AdminPayment.cvcErrorShould('be.visible', 3);
      AdminPayment.bottomButtonShould('Save', 'be.disabled');

      // Mastercard, cvc error message should be shown
      AdminPayment.enterCardNumber(cardNumber.mastercard);
      AdminPayment.enterCardCVC('12');
      AdminPayment.cvcErrorShould('be.visible', 3);
      AdminPayment.bottomButtonShould('Save', 'be.disabled');

      // Mastercard, cvc error message should not be shown
      AdminPayment.enterCardNumber(cardNumber.mastercard);
      AdminPayment.enterCardCVC('321');

      // Add card
      AdminPayment.bottomButtonShould('Save', 'not.be.disabled');
      AdminPayment.clickBottomButton('Save');

      // Edit card
      AdminPayment.editCard();

      // Delete card
      AdminPayment.deleteCard(paymentMethodData.creditCard._fullName);
    }
  );

  it(
    'C377733: Should be checked to have 4 digit CVC for Amex cards',
    { tags: ['@tier1'] },
    () => {
      // Amex, cvc error message should be shown
      AdminPayment.enterNickname(paymentMethodData.nickname);
      AdminPayment.enterCardInfo();
      AdminPayment.enterBillingAddressInfo();
      AdminPayment.enterCardNumber(cardNumber.amex);
      AdminPayment.enterCardCVC('123');
      AdminPayment.cvcErrorShould('be.visible', 4);
      AdminPayment.bottomButtonShould('Save', 'be.disabled');

      // Amex, cvc error message should be shown
      AdminPayment.enterCardNumber(cardNumber.amex);
      AdminPayment.enterCardCVC('4567');

      // Add card
      AdminPayment.bottomButtonShould('Save', 'not.be.disabled');
      AdminPayment.clickBottomButton('Save');

      // Edit card
      AdminPayment.editCard();

      // Delete card
      AdminPayment.deleteCard(paymentMethodData.creditCard._fullName);
    }
  );
});
