import { GrowthInterceptApis } from '@growth-lib/api-intercept';
import { UsersWizardPages } from '@growth-lib/users-wizard-pages';
import { LoginSelfSell } from '@support-growth/login-self-sell';
import { UsersRoles } from '@growth-lib/users-roles';
import { GrowthRegistrationUrls } from '@growth-lib/model';
import { FreePricing, OnboardingGuide, SignUp, SignupReason } from '../../../growth_common_lib';

describe('Affiliate: users traveler roles, expense roles', () => {
  let companyDomain: string;
  beforeEach(() => {
    GrowthInterceptApis.interceptApis();
    LoginSelfSell.createNewSelfSellLead({
      registrationUrl: GrowthRegistrationUrls.travel,
      tag: 'userswizard'
    }).then(({ companyDomain: _companyDomain, token }) => {
      companyDomain = _companyDomain;
      SignUp.signupWithSkipAdmin(token, SignupReason.TRAVEL_SOLUTION, false);
      FreePricing.verifyTravelPricingScreenIsOpened();
      FreePricing.openAdminClaim();

      OnboardingGuide.verifyOnboardingGuideOpen();

      UsersRoles.gotoUsersWizard();
      UsersWizardPages.checkLandingPageOpened();
    });
  });

  it('C13140099: users page - add individuals and then check users roles', { tags: ['@tier1'] }, () => {
    const usersArr = ['A', 'B', 'C'].map((letter, index) => ({
      firstName: 'user' + letter,
      lastName: 'family' + letter,
      email: `test-user-${letter.toLowerCase()}@${companyDomain}`,
      userNum: index.toString()
    }));

    UsersWizardPages.completeTheWizardAndAddUsers(usersArr);

    UsersRoles.testTravelDelegateAllRole(usersArr[0].email);

    UsersRoles.testTravelDelegateSpecific(usersArr[0], usersArr[1]);

    UsersRoles.testDelegateSpecificAllUsers(usersArr);

    UsersRoles.testSelectAdminRoleForUser(usersArr[1].email);

    UsersRoles.testAddManagerRoleForUser(usersArr[2].email, usersArr[1]);
  });
});
