token-wizard-test-automation/entity/User.js

508 lines
17 KiB
JavaScript

const logger = require('../entity/Logger.js').logger;
const MetaMask = require('../pages/MetaMask.js').MetaMask;
const WizardWelcome = require('../pages/WizardWelcome.js').WizardWelcome;
const WizardStep1 = require('../pages/WizardStep1.js').WizardStep1;
const WizardStep2 = require('../pages/WizardStep2.js').WizardStep2;
const WizardStep3 = require('../pages/WizardStep3.js').WizardStep3;
const WizardStep4 = require('../pages/WizardStep4.js').WizardStep4;
const TierPage = require('../pages/TierPage.js').TierPage;
const ReservedTokensPage = require('../pages/ReservedTokensPage.js').ReservedTokensPage;
const CrowdsalePage = require('../pages/CrowdsalePage.js').CrowdsalePage;
const InvestPage = require('../pages/ContributionPage.js').InvestPage;
const ManagePage = require('../pages/ManagePage.js').ManagePage;
const Utils = require('../utils/Utils.js').Utils;
const Crowdsale = require('../entity/Crowdsale.js').Crowdsale;
const Page = require('../pages/Page.js').Page;
const fs = require('fs');
class User {
constructor(driver, file) {
try {
this.driver = driver;
let obj = JSON.parse(fs.readFileSync(file, "utf8"));
this.account = obj.account;
this.privateKey = obj.privateKey;
this.networkID = obj.networkID;
this.accountOrderInWallet = undefined;//for Wallet usage only
this.name = file;
this.minCap;
this.maxCap;
this.tokenBalance;
}
catch (err) {
logger.info("can not create User instance");
logger.info(err);
}
}
async getTokenBalance(crowdsale) {
logger.info("getTokenBalance");
try {
const web3 = await Utils.getWeb3Instance(crowdsale.networkID);
let contractAddress = await Utils.getContractAddressIdx(crowdsale);
logger.info("contractAddress" + contractAddress);
let addressRegistryStorage = await Utils.getFromEnvAbstractStorageAddress();
logger.info("addressRegistryStorage" + addressRegistryStorage);
let abi = await Utils.getContractABIInitCrowdsale(crowdsale);
let myContract = new web3.eth.Contract(abi, contractAddress);
let balance = await myContract.methods.balanceOf(addressRegistryStorage, crowdsale.executionID, this.account).call();
logger.info("Balance = " + balance);
return balance;
}
catch (err) {
logger.info("Can not get balance. " + err);
return 0;
}
}
async setWalletAccount() {
logger.info("User: setWalletAccount")
let wallet = await Utils.getWalletInstance(this.driver);
if (this.accountOrderInWallet === undefined) {
return await wallet.importAccount(this);
}
else {
return await wallet.selectAccount(this);
}
}
print() {
logger.info("account:" + this.account);
logger.info("privateKey:" + this.privateKey);
logger.info("networkID:" + this.networkID);
}
async openInvestPage(crowdsale) {
return await new Page(this.driver).open(crowdsale.url);
}
async openManagePage(crowdsale) {
logger.info("Open manage page")
const startURL = Utils.getStartURL();
let mngPage = new ManagePage(this.driver);
mngPage.URL = startURL + "manage/" + crowdsale.proxyAddress;
return await mngPage.open()
&& await mngPage.waitUntilLoaderGone()
&& !await mngPage.isDisplayedButtonOK();
}
async getSupplyTier(tier) {
logger.info("get Supply for tier #" + tier);
let mngPage = new ManagePage(this.driver);
await mngPage.refresh();
let s = await mngPage.getSupplyTier(tier);
logger.info("Received value=" + s);
return s;
}
async getRateTier(tier) {
logger.info("get Rate for tier #" + tier);
let mngPage = new ManagePage(this.driver);
await mngPage.refresh();
let s = await mngPage.getRateTier(tier);
logger.info("Received value=" + s);
return s;
}
async getStartTime(tier) {
logger.info("get Start time of tier #" + tier);
try {
let mngPage = new ManagePage(this.driver);
await mngPage.refresh();
let result = await mngPage.getStartTimeTier(tier);
logger.info("Received value=" + result);
return result;
}
catch (err) {
logger.info(err);
return null;
}
}
async getEndTime(tier) {
logger.info("getEndTime of tier #" + tier);
try {
let mngPage = new ManagePage(this.driver);
await mngPage.refresh();
let result = await mngPage.getEndTimeTier(tier);
logger.info("Received value=" + result);
return result;
}
catch (err) {
logger.info(err);
return null;
}
}
async changeRate(tier, value) {
logger.info("change Rate for tier#" + tier);
let mngPage = new ManagePage(this.driver);
await mngPage.waitUntilLoaderGone();
try {
await mngPage.fillRateTier(tier, value);
await mngPage.clickButtonSave();
let metaMask = new MetaMask(this.driver);
await metaMask.signTransaction(5);
await mngPage.waitUntilLoaderGone();
let result = await this.confirmPopup();
await mngPage.waitUntilLoaderGone();
return result;
}
catch (err) {
logger.info("can not change Rate for tier #" + tier + " ,err:" + err);
return false;
}
}
async addWhitelistTier(tier, address, min, max) {
logger.info("fill whitelist for tier " + tier);
logger.info("Wh address=" + address + " , min=" + min + ", max=" + max);
let mngPage = new ManagePage(this.driver);
let metaMask = new MetaMask(this.driver);
return await mngPage.fillWhitelist(tier, address, min, max)
&& await metaMask.signTransaction(10)
&& await mngPage.waitUntilLoaderGone()
&& await this.confirmPopup()
&& await mngPage.waitUntilLoaderGone();
}
async changeSupply(tier, value) {
logger.info("change Supply for tier#" + tier);
let mngPage = new ManagePage(this.driver);
await mngPage.waitUntilLoaderGone();
try {
await mngPage.fillSupplyTier(tier, value);
await mngPage.clickButtonSave();
let metaMask = new MetaMask(this.driver);
await metaMask.signTransaction(5);
await mngPage.waitUntilLoaderGone();
let result = await this.confirmPopup();
await mngPage.waitUntilLoaderGone();
return result;
}
catch (err) {
logger.info("can not change Supply for tier #" + tier + " ,err:" + err);
return false;
}
}
async changeEndTimeFromManagePage(tier, newDate, newTime) {
logger.info("changeEndTimeFromManagePage for tier#" + tier + ", new date=" + newDate + ", new time=" + newTime);
let formatTimeBrowser = await Utils.getDateFormat(this.driver);
if (formatTimeBrowser === "mdy") {
newDate = Utils.convertDateToMdy(newDate);
newTime = Utils.convertTimeToMdy(newTime);
}
let mngPage = new ManagePage(this.driver);
let metaMask = new MetaMask(this.driver);
if (tier > 2) {
return await mngPage.waitUntilLoaderGone()
&& await mngPage.fillEndTimeTier(tier, newDate, newTime)
&& !await mngPage.isPresentWarningEndTimeTier1()
&& !await mngPage.isPresentWarningEndTimeTier2()
&& await mngPage.clickButtonSave()
&& await metaMask.signTransaction(10)
//&& await metaMask.signTransaction(10)
&& await mngPage.waitUntilLoaderGone()
&& await this.confirmPopup()
&& await mngPage.waitUntilLoaderGone();
} else
return await mngPage.waitUntilLoaderGone()
&& await mngPage.fillEndTimeTier(tier, newDate, newTime)
&& !await mngPage.isPresentWarningEndTimeTier1()
&& !await mngPage.isPresentWarningEndTimeTier2()
&& await mngPage.clickButtonSave()
&& await metaMask.signTransaction(10)
&& await metaMask.signTransaction(10)
&& await mngPage.waitUntilLoaderGone()
&& await this.confirmPopup()
&& await mngPage.waitUntilLoaderGone();
}
async changeStartTime(tier, newDate, newTime) {
logger.info("change StartTime for tier#" + tier + ", new date=" + newDate + ", new time=" + newTime);
let formatTimeBrowser = await Utils.getDateFormat(this.driver);
if (formatTimeBrowser == "mdy") {
newDate = Utils.convertDateToMdy(newDate);
newTime = Utils.convertTimeToMdy(newTime);
}
let mngPage = new ManagePage(this.driver);
await mngPage.waitUntilLoaderGone();
try {
let result = await mngPage.fillStartTimeTier(tier, newDate, newTime);
if (!result) return false;
if (await mngPage.isPresentWarningStartTimeTier1() ||
await mngPage.isPresentWarningStartTimeTier2()
)
return false;
await mngPage.clickButtonSave();
let metaMask = new MetaMask(this.driver);
await metaMask.signTransaction();
await mngPage.waitUntilLoaderGone();
result = await this.confirmPopup();
await mngPage.waitUntilLoaderGone();
return result;
}
catch (err) {
logger.info("can not change start time for tier #" + tier + " ,err:" + err);
return false;
}
}
async finalize(crowdsale) {
logger.info(this.account + ": finalize ");
let metaMask = new MetaMask(this.driver);
let mngPage = new ManagePage(this.driver);
return await this.openManagePage(crowdsale)
&& await mngPage.waitUntilLoaderGone()
&& !await mngPage.waitUntilShowUpPopupConfirm(10) //3 sec
&& await mngPage.isEnabledButtonFinalize()
&& await mngPage.clickButtonFinalize()
&& await mngPage.waitUntilShowUpPopupFinalize()
&& await mngPage.clickButtonYesFinalize()
&& await metaMask.signTransaction(5)
&& await mngPage.waitUntilLoaderGone()
&& await mngPage.waitUntilShowUpPopupConfirm()
&& await mngPage.clickButtonOk();
}
async confirmPopup() {
logger.info("confirmPopup ");
let investPage = new InvestPage(this.driver);
return await investPage.waitUntilShowUpButtonOk(60)
&& await investPage.clickButtonOK();
}
async contribute(amount) {
logger.info("contribute " + amount);
const investPage = new InvestPage(this.driver);
return !await investPage.waitUntilShowUpWarning(15)
&& await investPage.waitUntilLoaderGone()
&& await investPage.fillContribute(amount)
&& await investPage.clickButtonContribute()
&& !await investPage.waitUntilShowUpErrorNotice(10)//3 sec
&& !await investPage.waitUntilShowUpWarning(10)//3 sec
&& await new MetaMask(this.driver).signTransaction(5)
&& await investPage.waitUntilLoaderGone()
&& await investPage.waitUntilShowUpWarning(10)//3 sec
&& await investPage.clickButtonOK()
&& await investPage.waitUntilLoaderGone();
}
async getBalanceFromInvestPage(crowdsale) {
logger.info("getBalanceFromInvestPage " + crowdsale.url);
try {
const investPage = new InvestPage(this.driver);
const curURL = await investPage.getURL();
if (crowdsale.url !== curURL) await investPage.open(crowdsale.url);
await investPage.waitUntilLoaderGone();
await this.driver.sleep(2000);
await investPage.refresh();
await this.driver.sleep(3000);
await investPage.refresh();
await this.driver.sleep(7000);
let result = await investPage.getBalance();
let arr = result.split(" ");
result = arr[0].trim();
logger.info("received " + result);
return result;
}
catch (err) {
logger.info("Error " + err);
return false;
}
}
async createMintedCappedCrowdsale(crowdsale,isFillBulkReservedAddresses, pathCSV,isFillBulkWhitelistAddresses, pathCSVWhitelist) {
logger.info(" createMintedCappedCrowdsale ");
const startURL = Utils.getStartURL();
const welcomePage = new WizardWelcome(this.driver, startURL);
const wizardStep1 = new WizardStep1(this.driver);
const wizardStep2 = new WizardStep2(this.driver);
const wizardStep3 = new WizardStep3(this.driver);
const wizardStep4 = new WizardStep4(this.driver);
const crowdsalePage = new CrowdsalePage(this.driver);
const investPage = new InvestPage(this.driver);
const reservedTokens = new ReservedTokensPage(this.driver);
await TierPage.setCountTiers(0);
let result = await welcomePage.open() &&
await welcomePage.clickButtonNewCrowdsale();
let counter = 200;
do {
await this.driver.sleep(300);
if ((await wizardStep1.isDisplayedButtonContinue()) &&
!(await wizardStep2.isDisplayedFieldName())) {
result = result && await wizardStep1.clickButtonContinue();
}
else break;
if (counter === 0) return false;
} while (counter-- >= 0);
result = result &&
await wizardStep2.fillPage(crowdsale)
&& ((isFillBulkReservedAddresses) ? await reservedTokens.fillBulkReservedTokens(pathCSV) : await reservedTokens.fillReservedTokens(crowdsale))
&& await wizardStep2.scrollDownUntilButtonContinueDislayed()
&& await wizardStep2.clickButtonContinue()
&& await wizardStep3.fillPage(crowdsale,isFillBulkWhitelistAddresses, pathCSVWhitelist);
counter = 200;
do {
await this.driver.sleep(300);
if ((await wizardStep3.isDisplayedButtonContinue()) &&
!(await wizardStep4.isDisplayedModal())) {
result = result && await wizardStep3.clickButtonContinue();
}
else break;
if (counter === 0) {
logger.info("Incorrect data in tiers");
return false;
}
} while (counter-- >= 0);
result = result &&
await wizardStep4.deployContracts(crowdsale) &&
await wizardStep4.waitUntilDisplayedButtonContinue() &&
await wizardStep4.clickButtonContinue() &&
await wizardStep4.waitUntilLoaderGone();
crowdsale.proxyAddress = await crowdsalePage.getProxyAddress();
counter = 200;
do {
await this.driver.sleep(300);
if ((await crowdsalePage.isDisplayedButtonInvest()) &&
!(await investPage.isDisplayedCountdownTimer())) {
result = result && await crowdsalePage.clickButtonInvest();
}
else break;
if (counter === 0) {
return false;
}
} while (counter-- >= 0);
result = result && await investPage.waitUntilLoaderGone();
crowdsale.url = await investPage.getURL();
logger.info("Final invest page link: " + crowdsale.url);
logger.info("proxyAddress " + crowdsale.proxyAddress);
crowdsale.networkID = this.networkID;
crowdsale.sort = 'minted';
crowdsale.executionID = await Utils.getProxyExecID(crowdsale);
logger.info("executionID " + crowdsale.executionID);
return result && crowdsale.proxyAddress !== "";
}
async createDutchAuctionCrowdsale(crowdsale,isFillBulkWhitelistAddresses, pathCSVWhitelist) {
logger.info(" createDutchAuctionCrowdsale ");
const startURL = Utils.getStartURL();
const welcomePage = new WizardWelcome(this.driver, startURL);
const wizardStep1 = new WizardStep1(this.driver);
const wizardStep2 = new WizardStep2(this.driver);
const wizardStep3 = new WizardStep3(this.driver);
const wizardStep4 = new WizardStep4(this.driver);
const crowdsalePage = new CrowdsalePage(this.driver);
const investPage = new InvestPage(this.driver);
const reservedTokens = new ReservedTokensPage(this.driver);
await TierPage.setCountTiers(0);
let result = await welcomePage.open() &&
await welcomePage.clickButtonNewCrowdsale() &&
await wizardStep1.waitUntilDisplayedCheckboxDutchAuction() &&
await wizardStep1.clickCheckboxDutchAuction();
if (!result) return false;
let counter = 200;
do {
await this.driver.sleep(300);
if ((await wizardStep1.isDisplayedButtonContinue()) &&
!(await wizardStep2.isDisplayedFieldName())) {
result = result && await wizardStep1.clickButtonContinue();
}
else break;
if (counter === 0) return false;
} while (counter-- >= 0);
result = result
&& await wizardStep2.fillPage(crowdsale)
&& await wizardStep2.clickButtonContinue()
&& await await wizardStep3.fillPage(crowdsale,isFillBulkWhitelistAddresses, pathCSVWhitelist);
if (!result) return false;
counter = 200;
do {
await this.driver.sleep(300);
if ((await wizardStep3.isDisplayedButtonContinue()) &&
!(await wizardStep4.isDisplayedModal())) {
result = result && await wizardStep3.clickButtonContinue();
}
else break;
if (counter === 0) {
logger.info("Incorrect data in tiers");
return false;
}
} while (counter-- >= 0);
result = result &&
await wizardStep4.deployContracts(crowdsale) &&
await wizardStep4.waitUntilDisplayedButtonContinue() &&
await wizardStep4.clickButtonContinue() &&
await wizardStep4.waitUntilLoaderGone();
if (!result) return false;
crowdsale.proxyAddress = await crowdsalePage.getProxyAddress();
counter = 200;
do {
await this.driver.sleep(300);
if ((await crowdsalePage.isDisplayedButtonInvest()) &&
!(await investPage.isDisplayedCountdownTimer())) {
result = result && await crowdsalePage.clickButtonInvest();
}
else break;
if (counter === 0) {
return false;
}
} while (counter-- >= 0);
result = result && await investPage.waitUntilLoaderGone();
crowdsale.url = await investPage.getURL();
logger.info("Final invest page link: " + crowdsale.url);
logger.info("proxyAddress: " + crowdsale.proxyAddress);
crowdsale.networkID = this.networkID;
logger.info("crowdsale.networkID " + crowdsale.networkID);
crowdsale.networkID = this.networkID;
crowdsale.sort = 'dutch';
crowdsale.executionID = await Utils.getProxyExecID(crowdsale);
logger.info("executionID " + crowdsale.executionID);
return result && crowdsale.proxyAddress !== "";
}
async changeMinCapFromManagePage(tier, value) {
logger.info("changeMinCapFromManagePage ");
let mngPage = new ManagePage(this.driver);
let metaMask = new MetaMask(this.driver);
return await mngPage.waitUntilLoaderGone()
&& await mngPage.fillMinCap(tier, value)
//&& !await mngPage.isDisplayedWarningMinCap()
&& await mngPage.clickButtonSave()
&& await metaMask.signTransaction(10)
&& await mngPage.waitUntilLoaderGone()
&& await this.confirmPopup()
&& await mngPage.waitUntilLoaderGone();
}
}
module.exports.User = User;