import fetch from "node-fetch"; import { Wait } from '../components/dewWait'; import { Global } from "../data/Global"; import { lmt } from '../Helpers/readI18NProp'; import { logger } from "../Logger/logger"; import { CommonKeyword } from "./commonKeyword"; import { DewButton } from "./dewButton"; import { DewDropdown } from "./dewDropdown"; import { DewLoader } from "./dewLoader"; import { DewElement } from './element'; import { TextField } from './textfield'; /** * 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(`//input[@formcontrolname='emailAddress']`); await TextField.enterTextUsingLocator(`//input[@formcontrolname='emailAddress']`, userName); await TextField.enterTextUsingLocator(`//input[@formcontrolname='password']`, passWord); await Wait.waitForDefaultTimeout(2); await DewButton.click(`Login`); /* try { await DewLoader.waitForSpinner(); await Wait.waitUntilVisibilityOfElement(`//span[contains(@class,'welcome-message')]`); if (await DewElement.checkIfElementVisible(`.//dew-btn/button[div/span[text()[normalize-space()='Continue']]]`)) { 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(`//input[@formcontrolname='emailAddress']`); await CommonKeyword.clickElement(`//input[@formcontrolname='emailAddress']`); await TextField.enterTextUsingLocator(`//input[@formcontrolname='emailAddress']`, userName); await CommonKeyword.clickElement(`//input[@formcontrolname='password']`); await TextField.enterTextUsingLocator(`//input[@formcontrolname='password']`, passWord); await Wait.waitForDefaultTimeout(2); await DewButton.click(`Login`); await DewLoader.waitForSpinner(); await Wait.waitUntilVisibilityOfElement(`//span[contains(@class,'welcome-message')]`); 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(`//div[contains(@class,'user-p-click')]`, `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 APz. 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(`//form//input[@id='USER']`); await TextField.enterTextUsingLocator(`//form//input[@id='USER']`, userName); await TextField.enterTextUsingLocator(`//form//input[@id='USER_EMAIL']`, emailAddress); await CommonKeyword.clickElement(`//form//input[@id='password']/following-sibling::input`); await TextField.enterTextUsingLocator(`//form//input[@id='password']`, passWord); await Wait.waitForDefaultTimeout(2); await CommonKeyword.clickElement(`//form//input[@id='imgLoginButton']`); await Wait.waitForDefaultTimeout(5); await Wait.waitUntilVisibilityOfElement(`//div[@id='mainInnerWrapper']`); if (await DewElement.checkIfElementVisible(`//div[contains(@class,'supplierPopup')]//i[@class='close-popup']`)) { await CommonKeyword.clickElement(`//div[contains(@class,'supplierPopup')]//i[@class='close-popup']`); } } catch (err) { logger.info(`Unable to login into supplier portal. ${pageUrl}`); } } }