import { CommonKeyword } from "./commonKeyword"; import { DewDropdown } from "./dewDropdown"; import { DewButton } from "./dewButton"; import { logger } from "../Logger/logger"; import { DewLoader } from "./dewLoader"; import { Global } from "../data/Global"; import fetch from "node-fetch"; import { lmt } from '../Helpers/readI18NProp'; import { Wait } from '../components/dewWait'; import { TextField } from './textfield'; import { DewElement } from './element'; import { ReadLocators } from "../readLocators"; const locators:any = ReadLocators.readJson(); /** * Login class */ export class Login { /** * To login into buyer side and save to token id into global varibale. * Stored token id will be used during to logout api call * * ```js * Login.loginIntoBuyer("https://github.com","abc@zycus.com","12345"); * ``` * * @param {String} pageUrl Url of the Webpage * @param {String} userName UserName * @param {String} passWord Password * */ static async loginIntoBuyer(pageUrl: string, userName: string, passWord: string) { await CommonKeyword.amOnPage(pageUrl); Global.url = pageUrl; await Wait.waitUntilVisibilityOfElement(locators.loginIntoBuyerEmailXpath); await TextField.enterTextUsingLocator(locators.loginIntoBuyerEmailXpath, userName); await TextField.enterTextUsingLocator(locators.loginIntoBuyerPasswordXpath, passWord); await Wait.waitForDefaultTimeout(2); await DewButton.click(`Login`); try { await DewLoader.waitForSpinner(); await Wait.waitUntilVisibilityOfElement(locators.loginWelcomePageXpath); if (await DewElement.checkIfElementVisible(locators.dewSideNavigateContinueXpath)) { await DewButton.click(`Continue`); } await CommonKeyword.dismissNotification(); Global.tokenId = await CommonKeyword.getCookie(); } catch (err) { logger.info(`Unable to login.Trying to login again`); await CommonKeyword.clearCookie(); await CommonKeyword.amOnPage(pageUrl); Global.url = pageUrl; await Wait.waitUntilVisibilityOfElement(locators.loginIntoBuyerEmailXpath); await CommonKeyword.clickElement(locators.loginIntoBuyerEmailXpath); await TextField.enterTextUsingLocator(locators.loginIntoBuyerEmailXpath, userName); await CommonKeyword.clickElement(locators.loginIntoBuyerPasswordXpath); await TextField.enterTextUsingLocator(locators.loginIntoBuyerPasswordXpath, passWord); await Wait.waitForDefaultTimeout(2); await DewButton.click(`Login`); await DewLoader.waitForSpinner(); await Wait.waitUntilVisibilityOfElement(locators.loginWelcomePageXpath); await CommonKeyword.dismissNotification(); try { Global.tokenId = await await CommonKeyword.getCookie(); } catch (err1) { logger.info(`Login Failed`); throw err1; } } } /** * To login out from buyer side * * ```js * Login.logOutFromBuyer(); * ``` * */ static async logOutFromBuyer() { await CommonKeyword.amOnPage(Global.url); await DewDropdown.selectByText(locators.logOutFromBuyerXpath, `Logout`); await DewButton.click(await lmt.getLabel(`Yes`)); await Wait.waitForDefaultTimeout(3); await logger.info(`Logged Out Successfully`); } /** * To login out from buyer side using API call * * ```js * Login.logoutUsingAPI("PARTNER"); * ``` * * @param {String} setup Name for the Environment */ static async logoutUsingAPI(setup: string) { const envName = await this.getEnvNameForSSO(setup); if (envName == `Invalid`) { logger.info(`Issue while performing operation in DDCC: Invalid Setup Name Provided. Unable to call logout API. Please provide valid Setup Name`); } else { console.log(`Logging Out`); const args = { "tokenId": `` + Global.tokenId + ``, "env": `` + envName + ``, "userId": `varun.khurana@zycus.com`, "authToken": `YWRtaW5BdXRoQHp5Y3VzLmNvbTojam5LKz1lUTs4JWgu`, }; await fetch(`http://10.100.0.19:9000/sso/terminate`, { method: `post`, body: JSON.stringify(args), headers: { 'Content-Type': `application/json` }, }) .then((res) => res.json()) .then((json) => console.log(json)); } } /** * Fetch Environment Name required for Logout Api * * @param {String} setup Name for the Environment */ static async getEnvNameForSSO(setup: string) { let envName = null; switch (setup) { case `USPROD`: envName = `prod`; break; case `AUSPROD`: envName = `ausprod`; break; case `SGPROD`: envName = `awssingapore`; break; case `UKPROD`: envName = `awsprod`; break; case `US_STAGING`: envName = `staging`; break; case `AUSUAT`: case `AUS_STAGING`: envName = `ausuat`; break; case `RM`: envName = `rmpartner`; break; case `QCVM`: case `QCVMWARE`: envName = `qcvmware`; break; case `PARTNER`: envName = `partner`; break; default: envName = `Invalid`; } return envName; } /** * login into isource supplier side portal. * * ```js * Login.iSourceSupplierPortalLogin(`https://ilogix-qcvw.zycus.net/iSource/login.htm`,`ABC`,`abc@zycus.com`,`ABC@123`); * ``` * * @param {String} pageUrl Url of the Webpage * @param {String} userName UserName * @param {String} emailAddress emailAddress * @param {String} passWord Password * */ static async iSourceSupplierPortalLogin(pageUrl: string, userName: string, emailAddress: string, passWord: string) { try { await CommonKeyword.amOnPage(pageUrl); // Global.url = pageUrl; await Wait.waitUntilVisibilityOfElement(locators.iSourceSupplierPortalUserName); await TextField.enterTextUsingLocator(locators.iSourceSupplierPortalUserName, userName); await TextField.enterTextUsingLocator(locators.iSourceSupplierPortalUserEmail, emailAddress); await CommonKeyword.clickElement(locators.iSourceSupplierPortalPasswordInput); await TextField.enterTextUsingLocator(locators.iSourceSupplierPortalPasswordXpath, passWord); await Wait.waitForDefaultTimeout(2); await CommonKeyword.clickElement(locators.iSourceSupplierPortalLoginButton); await Wait.waitForDefaultTimeout(5); await Wait.waitUntilVisibilityOfElement(locators.iSourceSupplierPortalInnerWrapper); if (await DewElement.checkIfElementVisible(locators.iSourceSupplierPortalPopUp)) { await CommonKeyword.clickElement(locators.iSourceSupplierPortalPopUp); } } catch (err) { logger.info(`Unable to login into supplier portal. ${pageUrl}`); } } }