1091 lines
53 KiB
JavaScript
1091 lines
53 KiB
JavaScript
let test = require('selenium-webdriver/testing');
|
|
let assert = require('assert');
|
|
const fs = require('fs-extra');
|
|
///////////////////////////////////////////////////////
|
|
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 logger = require('../entity/Logger.js').logger;
|
|
const tempOutputPath = require('../entity/Logger.js').tempOutputPath;
|
|
const Utils = require('../utils/Utils.js').Utils;
|
|
const User = require("../entity/User.js").User;
|
|
const smallAmount = 0.1;
|
|
|
|
test.describe(`e2e test for TokenWizard2.0/DutchAuctionCrowdsale. v ${testVersion} `, async function () {
|
|
this.timeout(2400000);//40 min
|
|
this.slow(1800000);
|
|
|
|
const user8545_dDdCFile = './users/user8545_dDdC.json';//Owner
|
|
const user8545_Db0EFile = './users/user8545_Db0E.json';//Investor1 - whitelisted before deployment
|
|
const user8545_F16AFile = './users/user8545_F16A.json';//Investor2 - whitelisted before deployment
|
|
const scenarioE2eMinCap = './scenarios/scenarioE2eDutchMincapLong.json';
|
|
const scenarioE2eWhitelist = './scenarios/scenarioE2eDutchWhitelistShort.json';
|
|
const scenarioForUItests = './scenarios/scenarioUItests.json';
|
|
const scenarioE2eDutchCheckBurn = './scenarios/scenarioE2eDutchCheckBurn.json';
|
|
let driver;
|
|
let Owner;
|
|
let Investor1;
|
|
let Investor2;
|
|
|
|
let wallet;
|
|
let welcomePage;
|
|
let wizardStep1;
|
|
let wizardStep2;
|
|
let wizardStep3;
|
|
let wizardStep4;
|
|
let tierPage;
|
|
let mngPage;
|
|
let reservedTokensPage;
|
|
let investPage;
|
|
let startURL;
|
|
let crowdsaleForUItests;
|
|
let e2eMinCap;
|
|
let e2eWhitelist;
|
|
let e2eCheckBurn;
|
|
let balanceEthOwnerBefore;
|
|
let balanceEthOwnerAfter;
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
test.before(async function () {
|
|
|
|
await Utils.copyEnvFromWizard();
|
|
e2eMinCap = await Utils.getDutchCrowdsaleInstance(scenarioE2eMinCap);
|
|
|
|
e2eWhitelist = await Utils.getDutchCrowdsaleInstance(scenarioE2eWhitelist);
|
|
crowdsaleForUItests = await Utils.getDutchCrowdsaleInstance(scenarioForUItests);
|
|
|
|
e2eCheckBurn = await Utils.getDutchCrowdsaleInstance(scenarioE2eDutchCheckBurn);
|
|
|
|
startURL = await Utils.getStartURL();
|
|
driver = await Utils.startBrowserWithWallet();
|
|
|
|
Owner = new User(driver, user8545_dDdCFile);
|
|
Owner.tokenBalance = 0;
|
|
Investor1 = new User(driver, user8545_Db0EFile);
|
|
Investor1.tokenBalance = 0;
|
|
Investor2 = new User(driver, user8545_F16AFile);
|
|
Investor2.minCap = e2eWhitelist.tiers[0].whitelist[0].min;
|
|
Investor2.maxCap = e2eWhitelist.tiers[0].whitelist[0].max;
|
|
Investor2.tokenBalance = 0;
|
|
|
|
await Utils.receiveEth(Owner, 20);
|
|
await Utils.receiveEth(Investor1, 20);
|
|
await Utils.receiveEth(Investor2, 20);
|
|
logger.info("Roles:");
|
|
logger.info("Owner = " + Owner.account);
|
|
logger.info("Owner's balance = :" + await Utils.getBalance(Owner) / 1e18);
|
|
logger.info("Investor1 = " + Investor1.account);
|
|
logger.info("Investor1 balance = :" + await Utils.getBalance(Investor1) / 1e18);
|
|
logger.info("Investor2 = " + Investor2.account);
|
|
logger.info("Investor2 balance = :" + await Utils.getBalance(Investor2) / 1e18);
|
|
|
|
wallet = await Utils.getWalletInstance(driver);
|
|
await wallet.activate();//return activated Wallet and empty page
|
|
await Owner.setWalletAccount();
|
|
|
|
welcomePage = new WizardWelcome(driver, startURL);
|
|
wizardStep1 = new WizardStep1(driver);
|
|
wizardStep2 = new WizardStep2(driver);
|
|
wizardStep3 = new WizardStep3(driver);
|
|
wizardStep4 = new WizardStep4(driver);
|
|
investPage = new InvestPage(driver);
|
|
reservedTokensPage = new ReservedTokensPage(driver);
|
|
mngPage = new ManagePage(driver);
|
|
tierPage = new TierPage(driver, crowdsaleForUItests.tiers[0]);
|
|
|
|
});
|
|
|
|
test.after(async function () {
|
|
// Utils.killProcess(ganache);
|
|
//await Utils.sendEmail(tempOutputFile);
|
|
let outputPath = Utils.getOutputPath();
|
|
outputPath = outputPath + "/result" + Utils.getDate();
|
|
await fs.ensureDirSync(outputPath);
|
|
await fs.copySync(tempOutputPath, outputPath);
|
|
//await fs.remove(tempOutputPath);
|
|
//await driver.quit();
|
|
});
|
|
|
|
//////// UI TESTS ////////////////////////////////////////////////
|
|
/*
|
|
test.it('User is able to open wizard welcome page',
|
|
async function () {
|
|
await welcomePage.open();
|
|
let result = await welcomePage.waitUntilDisplayedButtonNewCrowdsale(180);
|
|
return await assert.equal(result, true, "Test FAILED. Wizard's page is not available ");
|
|
});
|
|
|
|
test.it('Welcome page: button NewCrowdsale present ',
|
|
async function () {
|
|
let result = await welcomePage.isDisplayedButtonNewCrowdsale();
|
|
return await assert.equal(result, true, "Test FAILED. Button NewCrowdsale not present ");
|
|
});
|
|
|
|
test.it('Welcome page: button ChooseContract present ',
|
|
async function () {
|
|
let result = await welcomePage.isDisplayedButtonChooseContract();
|
|
return await assert.equal(result, true, "Test FAILED. button ChooseContract not present ");
|
|
});
|
|
|
|
test.it('Welcome page: user is able to open Step1 by clicking button NewCrowdsale ',
|
|
async function () {
|
|
await welcomePage.clickButtonNewCrowdsale();
|
|
let result = await wizardStep1.isDisplayedButtonContinue();
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to activate Step1 by clicking button NewCrowdsale");
|
|
});
|
|
|
|
test.it('Wizard step#1: user is able to click DutchAuction checkbox ',
|
|
async function () {
|
|
let result = await wizardStep1.waitUntilDisplayedCheckboxDutchAuction()
|
|
&& await wizardStep1.clickCheckboxDutchAuction();
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to to click DutchAuction checkbox");
|
|
});
|
|
|
|
test.it('Wizard step#1: user is able to open Step2 by clicking button Continue ',
|
|
async function () {
|
|
let count = 10;
|
|
do {
|
|
await driver.sleep(1000);
|
|
if ((await wizardStep1.isDisplayedButtonContinue()) &&
|
|
!(await wizardStep2.isDisplayedFieldName())) {
|
|
await wizardStep1.clickButtonContinue();
|
|
}
|
|
else break;
|
|
}
|
|
while (count-- > 0);
|
|
let result = await wizardStep2.isDisplayedFieldName();
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to open Step2 by clicking button Continue");
|
|
|
|
});
|
|
test.it('Wizard step#2:Check persistant if account has changed ',
|
|
async function () {
|
|
let investor = Investor1;
|
|
let owner = Owner;
|
|
assert.equal(await investor.setMetaMaskAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await wizardStep2.isDisplayedFieldSupply(), true, "Field 'Supply' is not displayed");
|
|
assert.equal(await owner.setMetaMaskAccount(), true, "Can not set Metamask account");
|
|
return assert.equal(await wizardStep2.isDisplayedFieldSupply(), true, "Persistant failed if account has changed");
|
|
});
|
|
test.it.skip('Wizard step#2:Check persistant if page refreshed ',
|
|
async function () {
|
|
let investor = Investor1;
|
|
let owner = Owner;
|
|
|
|
return assert.equal(false, true, "Persistant failed if account has changed");
|
|
});
|
|
test.it('Wizard step#2: user able to fill out Name field with valid data',
|
|
async function () {
|
|
await wizardStep2.fillName("name");
|
|
let result = await wizardStep2.isDisplayedWarningName();
|
|
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user able to fill Name field with valid data ");
|
|
});
|
|
|
|
test.it('Wizard step#2: user able to fill out field Ticker with valid data',
|
|
async function () {
|
|
await wizardStep2.fillTicker("test");
|
|
let result = await wizardStep2.isDisplayedWarningTicker();
|
|
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user is not able to fill out field Ticker with valid data ");
|
|
});
|
|
|
|
test.it('Wizard step#2: user able to fill out Decimals field with valid data',
|
|
async function () {
|
|
await wizardStep2.fillDecimals("18");
|
|
let result = await wizardStep2.isDisplayedWarningDecimals();
|
|
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user is not able to fill Decimals field with valid data ");
|
|
});
|
|
|
|
test.it('Wizard step#2: user able to fill out Total supply field with valid data',
|
|
async function () {
|
|
await wizardStep2.fillSupply(crowdsaleForUItests.totalSupply);
|
|
let result = await wizardStep2.isDisplayedWarningSupply();
|
|
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user is not able to fill Total supply field with valid data ");
|
|
});
|
|
|
|
test.it('Wizard step#2: button Continue is displayed and enabled',
|
|
async function () {
|
|
let result = await wizardStep2.isDisplayedButtonContinue();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#2: button Continue disabled or not displayed ");
|
|
});
|
|
|
|
test.it('Wizard step#2: user is able to open Step3 by clicking button Continue ',
|
|
async function () {
|
|
await wizardStep2.clickButtonContinue();
|
|
await wizardStep3.waitUntilDisplayedTitle(180);
|
|
let result = await wizardStep3.getPageTitleText();
|
|
result = (result === wizardStep3.title);
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to open Step3 by clicking button Continue");
|
|
});
|
|
|
|
test.it('Wizard step#3: field Wallet address contains current metamask account address ',
|
|
async function () {
|
|
|
|
let result = await wizardStep3.getValueFromFieldWalletAddress();
|
|
result = (result === Owner.account.toString());
|
|
return await assert.equal(result, true, "Test FAILED. Wallet address does not match the metamask account address ");
|
|
});
|
|
|
|
test.it('Tier#1: Whitelist container present if checkbox "Whitelist enabled" is selected',
|
|
async function () {
|
|
let result = await tierPage.setWhitelisting()
|
|
&& await tierPage.isDisplayedWhitelistContainer();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: User is NOT able to set checkbox 'Whitelist enabled'");
|
|
});
|
|
|
|
test.it('Wizard step#3: field minCap disabled if whitelist enabled ',
|
|
async function () {
|
|
let result = await wizardStep3.isDisabledMinCap();
|
|
return await assert.equal(result, true, "Test FAILED. Field minCap enabled if whitelist enabled");
|
|
});
|
|
|
|
test.it('Wizard step#3: User is able to download CSV file with whitelisted addresses',
|
|
async function () {
|
|
|
|
let result = await tierPage.uploadWhitelistCSVFile();
|
|
await wizardStep3.clickButtonOk();
|
|
return await assert.equal(result, true, 'Test FAILED. Wizard step#3: User is NOT able to download CVS file with whitelisted addresses');
|
|
});
|
|
|
|
test.it('Wizard step#3: Number of added whitelisted addresses is correct, data is valid',
|
|
async function () {
|
|
let shouldBe = 6;
|
|
let inReality = await tierPage.amountAddedWhitelist();
|
|
return await assert.equal(shouldBe, inReality, "Test FAILED. Wizard step#3: Number of added whitelisted addresses is not correct");
|
|
|
|
});
|
|
|
|
test.it('Wizard step#3: User is able to bulk delete all whitelisted addresses ',
|
|
async function () {
|
|
let result = await tierPage.clickButtonClearAll()
|
|
&& await tierPage.waitUntilShowUpPopupConfirm(180)
|
|
&& await tierPage.clickButtonYesAlert();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: User is not able to bulk delete all whitelisted addresses");
|
|
});
|
|
|
|
test.it('Wizard step#3: All whitelisted addresses are removed after deletion ',
|
|
async function () {
|
|
let result = await tierPage.amountAddedWhitelist(10);
|
|
return await assert.equal(result, 0, "Test FAILED. Wizard step#3: User is NOT able to bulk delete all whitelisted addresses");
|
|
});
|
|
|
|
test.it('Wizard step#3: User is able to add several whitelisted addresses one by one ',
|
|
async function () {
|
|
let result = await tierPage.fillWhitelist();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: User is able to add several whitelisted addresses");
|
|
});
|
|
|
|
test.it('Wizard step#3: User is able to remove one whitelisted address',
|
|
async function () {
|
|
let beforeRemoving = await tierPage.amountAddedWhitelist();
|
|
let numberAddressForRemove = 1;
|
|
await tierPage.removeWhiteList(numberAddressForRemove - 1);
|
|
let afterRemoving = await tierPage.amountAddedWhitelist();
|
|
return await assert.equal(beforeRemoving, afterRemoving + 1, "Test FAILED. Wizard step#3: User is NOT able to remove one whitelisted address");
|
|
});
|
|
|
|
test.it("Wizard step#3: User is able to set 'Custom Gasprice' checkbox",
|
|
async function () {
|
|
|
|
let result = await wizardStep3.clickCheckboxGasPriceCustom();
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to set 'Custom Gasprice' checkbox");
|
|
|
|
});
|
|
|
|
test.it(" Wizard step#3: User is able to fill out the 'CustomGasprice' field with valid value",
|
|
async function () {
|
|
let customValue = 100;
|
|
let result = await wizardStep3.fillGasPriceCustom(customValue);
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: User is NOT able to fill 'Custom Gasprice' with valid value");
|
|
});
|
|
|
|
test.it('Wizard step#3: User is able to set SafeAndCheapGasprice checkbox ',
|
|
async function () {
|
|
let result = await wizardStep3.clickCheckboxGasPriceSafe();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: 'Safe and cheap' Gas price checkbox does not set by default");
|
|
});
|
|
test.it('Wizard step#3:Tier#1: User is able to fill out field Supply with valid data ',
|
|
async function () {
|
|
tierPage.tier.supply = crowdsaleForUItests.totalSupply - 1;
|
|
let result = await tierPage.fillSupply();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3:Tier#1: User is notable to fill out field Supply with valid data");
|
|
|
|
});
|
|
test.it("Wizard step#3:Tier#1: User is able to fill out field 'minRate' with valid data",
|
|
async function () {
|
|
tierPage.tier.minRate = 100;
|
|
let result = await tierPage.fillMinRate();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3:Tier#1: User is not able to fill out field 'minRate' with valid data");
|
|
});
|
|
test.it("Wizard step#3:Tier#1: User is able to fill out field 'maxRate' with valid data",
|
|
async function () {
|
|
tierPage.tier.maxRate = 10;
|
|
let result = await tierPage.fillMaxRate();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3:Tier#1: User is not able to fill out field 'maxRate' with valid data");
|
|
});
|
|
|
|
test.it("Wizard step#3: Button 'Continue' disabled if minRate > maxRate ",
|
|
async function () {
|
|
let result = !await wizardStep3.isEnabledButtonContinue();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: Button 'Continue' enabled if minRate > maxRate");
|
|
|
|
});
|
|
test.it('Wizard step#3: User is able to fill out field maxRate with valid data ',
|
|
async function () {
|
|
tierPage.tier.maxRate = 1000;
|
|
let result = await tierPage.fillMaxRate();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: User is not able to fill out field maxRate with valid data");
|
|
});
|
|
|
|
test.it("Wizard step#3: Button 'Continue' disabled if crowdsaleSupply>totalSupply",
|
|
async function () {
|
|
tierPage.tier.supply = crowdsaleForUItests.totalSupply + 1;
|
|
let result = await tierPage.fillSupply()
|
|
&& !await wizardStep3.isEnabledButtonContinue();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3: Button 'Continue' ensabled if crowdsaleSupply>totalSupply");
|
|
|
|
});
|
|
test.it('Wizard step#3:Tier#1: User is able to fill out field Supply with valid data ',
|
|
async function () {
|
|
tierPage.tier.supply = crowdsaleForUItests.totalSupply - 1;
|
|
let result = await tierPage.fillSupply();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#3:Tier#1: User is not able to fill out field Supply with valid data");
|
|
|
|
});
|
|
test.it('Wizard step#3: user is able to proceed to Step4 by clicking button Continue ',
|
|
async function () {
|
|
let result = await wizardStep3.clickButtonContinue()
|
|
&& await wizardStep4.waitUntilDisplayedModal(60);
|
|
return await assert.equal(result, true, "Test FAILED. User is not able to open Step4 by clicking button Continue");
|
|
});
|
|
/////////////// STEP4 //////////////
|
|
test.it('Wizard step#4: alert present if user reload the page ',
|
|
async function () {
|
|
await wizardStep4.refresh();
|
|
await driver.sleep(2000);
|
|
let result = await wizardStep4.isPresentAlert();
|
|
return await assert.equal(result, true, "Test FAILED. Alert does not present if user refresh the page");
|
|
});
|
|
|
|
test.it('Wizard step#4: user is able to accept alert after reloading the page ',
|
|
async function () {
|
|
|
|
let result = await wizardStep4.acceptAlert()
|
|
&& await wizardStep4.waitUntilDisplayedModal(80);
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#4: Modal does not present after user has accepted alert");
|
|
});
|
|
|
|
test.it('Wizard step#4: button SkipTransaction is presented if user reject a transaction ',
|
|
async function () {
|
|
let result = await metaMask.rejectTransaction()
|
|
&& await metaMask.rejectTransaction()
|
|
&& await wizardStep4.isDisplayedButtonSkipTransaction();
|
|
return await assert.equal(result, true, "Test FAILED. Wizard step#4: button'Skip transaction' does not present if user reject the transaction");
|
|
});
|
|
|
|
test.it('Wizard step#4: user is able to skip transaction ',
|
|
async function () {
|
|
|
|
let result = await wizardStep4.clickButtonSkipTransaction()
|
|
&& await wizardStep4.waitUntilShowUpPopupConfirm(80)
|
|
&& await wizardStep4.clickButtonYes();
|
|
return await assert.equal(result, true, "Test FAILED.Wizard step#4: user is not able to skip transaction");
|
|
});
|
|
|
|
test.it('Wizard step#4: alert is presented if user wants to leave the wizard ',
|
|
async function () {
|
|
|
|
let result = await welcomePage.openWithAlertConfirmation();
|
|
return await assert.equal(result, false, "Test FAILED. Wizard step#4: Alert does not present if user wants to leave the site");
|
|
});
|
|
|
|
test.it('Wizard step#4: User is able to stop deployment ',
|
|
async function () {
|
|
|
|
let result = await wizardStep4.waitUntilShowUpButtonCancelDeployment(80)
|
|
&& await wizardStep4.clickButtonCancelDeployment()
|
|
&& await wizardStep4.waitUntilShowUpPopupConfirm(80)
|
|
&& await wizardStep4.clickButtonYes();
|
|
|
|
return await assert.equal(result, true, "Test FAILED. Button 'Cancel' does not present");
|
|
});
|
|
*/
|
|
//////////////////////// Test SUITE #0 /////////////////////////////
|
|
|
|
test.it('Owner can create crowdsale: 1 whitelisted address,duration 1 min',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.createDutchAuctionCrowdsale(e2eCheckBurn);
|
|
return await assert.equal(result, true, 'Test FAILED. Crowdsale has not created ');
|
|
});
|
|
test.it('Crowdsale starts as scheduled',
|
|
async function () {
|
|
let startTime;
|
|
let counter = 180;
|
|
do {
|
|
startTime = await Utils.getDutchCrowdsaleStartTime(e2eCheckBurn);
|
|
logger.info("wait " + Date.now());
|
|
logger.info("wait " + startTime);
|
|
await driver.sleep(1000);
|
|
|
|
}
|
|
while (counter-- > 0 && (Date.now() / 1000 <= startTime));
|
|
return await assert.equal(counter > 0, true, 'Test FAILED. Tier has not start in time ');
|
|
});
|
|
test.it('Crowdsale has finished as scheduled',
|
|
async function () {
|
|
let endT;
|
|
let counter = 180;
|
|
do {
|
|
endT = await Utils.getDutchCrowdsaleEndTime(e2eCheckBurn);
|
|
logger.info("wait " + Date.now());
|
|
logger.info("wait " + endT);
|
|
await driver.sleep(1000);
|
|
}
|
|
while (counter-- > 0 && (Date.now() / 1000 <= endT));
|
|
return await assert.equal(counter > 0, true, 'Test FAILED. Crowdsale has not finished in time ');
|
|
});
|
|
|
|
test.it('Owner is able to finalize (if crowdsale time is over but not all tokens have sold)',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.finalize(e2eCheckBurn);
|
|
return await assert.equal(result, true, "Test FAILED.'Owner can NOT finalize ");
|
|
});
|
|
|
|
test.it('Check if flag `burn_exceed` works: Owner has NOT received unsold tokens after finalization',
|
|
async function () {
|
|
let investor = Owner;
|
|
let balance = await investor.getTokenBalance(e2eCheckBurn) / 1e18;
|
|
let shouldBe = 0;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
|
|
console.log("Investor should receive = " + shouldBe);
|
|
console.log("Investor has received balance = " + balance);
|
|
console.log("Difference = " + (balance - shouldBe));
|
|
|
|
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
});
|
|
//////////////////////// Test SUITE #1 /////////////////////////////
|
|
test.it('Owner can create crowdsale: 1 whitelisted address,duration 5 min',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.createDutchAuctionCrowdsale(e2eWhitelist);
|
|
return await assert.equal(result, true, 'Test FAILED. Crowdsale has not created ');
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'TO START OF TIER1 '",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCrowdsaleNotStarted();
|
|
//console.log(await investPage.getStatusTimer())
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
|
|
test.it("Invest page: Owner's balance has correct value (totalSupply-supply) ",
|
|
async function () {
|
|
balanceEthOwnerBefore = await Utils.getBalance(Owner);
|
|
let owner = Owner;
|
|
await owner.openInvestPage(e2eWhitelist);
|
|
let balance = await owner.getBalanceFromInvestPage(e2eWhitelist);
|
|
let shouldBe = e2eWhitelist.totalSupply - e2eWhitelist.tiers[0].supply;
|
|
let result = (balance.toString() === shouldBe.toString());
|
|
return await assert.equal(result, true, "Test FAILED. Owner's balance has incorrect value (totalSupply-supply)");
|
|
});
|
|
|
|
test.it('Whitelisted investor not able to buy before start of crowdsale ',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].whitelist[0].min;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, false, "Test FAILED. Whitelisted investor can buy before the crowdsale started");
|
|
});
|
|
|
|
test.it('Manage page: owner is able to add whitelisted address before start of crowdsale',
|
|
async function () {
|
|
let owner = Owner;
|
|
let investor = Investor2;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await owner.openManagePage(e2eWhitelist), true, 'Owner can not open manage page');
|
|
let tierNumber = 1;
|
|
let result = await owner.addWhitelistTier(tierNumber, investor.account, investor.minCap, investor.maxCap);
|
|
return await assert.equal(result, true, 'Test FAILED.Owner is NOT able to add whitelisted address before start of crowdsale ');
|
|
});
|
|
|
|
test.it('Crowdsale starts as scheduled',
|
|
async function () {
|
|
let startTime;
|
|
let counter = 180;
|
|
do {
|
|
startTime = await Utils.getDutchCrowdsaleStartTime(e2eWhitelist);
|
|
logger.info("wait " + Date.now());
|
|
logger.info("wait " + startTime);
|
|
//console.log("Date.now() = " + Date.now());
|
|
//console.log("startTime = " + startTime);
|
|
//console.log("counter"+counter);
|
|
await driver.sleep(1000);
|
|
|
|
}
|
|
while (counter-- > 0 && (Date.now() / 1000 <= startTime));
|
|
return await assert.equal(counter > 0, true, 'Test FAILED. Tier has not start in time ');
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'TO END OF TIER1 '",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCurrentTier1();
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
|
|
test.it("Contribution page: minContribution field is 'You are not allowed' for non-whitelisted investors",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.getMinContribution();
|
|
return await assert.equal(result, -1, 'Test FAILED. MinContribution value is incorrect');
|
|
});
|
|
test.it('Manage page: owner is able to add whitelisted address after start of crowdsale',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await owner.openManagePage(e2eWhitelist), true, 'Owner can not open manage page');
|
|
let tierNumber = 1;
|
|
owner.minCap = e2eWhitelist.tiers[0].supply / 10;
|
|
owner.maxCap = e2eWhitelist.tiers[0].supply;
|
|
let result = await owner.addWhitelistTier(tierNumber, owner.account, owner.minCap, owner.maxCap);
|
|
return await assert.equal(result, true, 'Test FAILED.Owner is NOT able to add whitelisted address after start of crowdsale ');
|
|
});
|
|
|
|
test.it("Contribution page: minContribution field contains correct minCap value for whitelisted investor",
|
|
async function () {
|
|
let investor = Investor2;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.getMinContribution();
|
|
return await assert.equal(result, investor.minCap, 'Test FAILED. MinContribution value is incorrect ');
|
|
});
|
|
|
|
test.it('Whitelisted investor which was added before start can buy amount equal mincap',
|
|
async function () {
|
|
let investor = Investor2;
|
|
//assert.equal(await investor.setMetaMaskAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = investor.minCap;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, 'Test FAILED. Whitelisted investor that was added before start can not buy');
|
|
});
|
|
|
|
test.it('Whitelisted investor which was added after start can buy amount equal mincap',
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = investor.minCap;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, 'Test FAILED. Whitelisted investor that was added after start can not buy');
|
|
});
|
|
|
|
test.it('Whitelisted investor is not able to buy less than minCap in first transaction',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].whitelist[0].min * 0.5;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, false, "Test FAILED.Investor can buy less than minCap in first transaction");
|
|
});
|
|
|
|
test.it('Whitelisted investor can buy amount equal mincap',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].whitelist[0].min;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, 'Test FAILED. Investor can not buy amount = min');
|
|
});
|
|
test.it("Contribution page: Investor's balance is properly changed after purchase ",
|
|
async function () {
|
|
let investor = Investor1;
|
|
await investor.openInvestPage(e2eWhitelist);
|
|
let newBalance = await investor.getBalanceFromInvestPage(e2eWhitelist);
|
|
logger.info("newBalance=" + newBalance);
|
|
logger.info("investor.tokenBalance=" + investor.tokenBalance);
|
|
let result = (Math.abs(parseFloat(newBalance) - parseFloat(investor.tokenBalance)) < 250);
|
|
return await assert.equal(result, true, "Test FAILED. Investor can buy but balance did not changed");
|
|
});
|
|
|
|
test.it('Whitelisted investor is able to buy less than mincap after first transaction',
|
|
async function () {
|
|
balanceEthOwnerBefore = await Utils.getBalance(Owner);
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].whitelist[0].min * 0.1;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, "Test FAILED. Investor can NOT buy less than min after first transaction");
|
|
|
|
});
|
|
test.it('Whitelisted investor is able to buy maxCap',
|
|
async function () {
|
|
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].supply;
|
|
investor.tokenBalance = Investor1.maxCap;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, "Test FAILED.Investor can buy more than assigned max");
|
|
});
|
|
|
|
test.it("Whitelisted investor's #1 balance limited by maxCap",
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let newBalance = await investor.getBalanceFromInvestPage(e2eWhitelist);
|
|
investor.tokenBalance = e2eWhitelist.tiers[0].whitelist[0].max;
|
|
let result = (Math.abs(parseFloat(newBalance) - parseFloat(investor.tokenBalance)) < 500);
|
|
return await assert.equal(result, true, "Test FAILED.Investor can buy more than assigned max");
|
|
|
|
});
|
|
|
|
test.it('Crowdsale has finished as scheduled',
|
|
async function () {
|
|
let endT;
|
|
let counter = 180;
|
|
do {
|
|
endT = await Utils.getDutchCrowdsaleEndTime(e2eWhitelist);
|
|
logger.info("wait " + Date.now());
|
|
logger.info("wait " + endT);
|
|
//console.log("Date.now() = " + Date.now());
|
|
//console.log("endTime = " + endT);
|
|
//console.log("counter"+counter);
|
|
await driver.sleep(1000);
|
|
}
|
|
while (counter-- > 0 && (Date.now() / 1000 <= endT));
|
|
return await assert.equal(counter > 0, true, 'Test FAILED. Crowdsale has not finished in time ');
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'CROWDSALE HAS ENDED'",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCrowdsaleEnded();
|
|
//console.log("result = "+result);
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
|
|
test.it('Whitelisted investor is not able to buy if crowdsale finished',
|
|
async function () {
|
|
let investor = Investor2;
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eWhitelist.tiers[0].supply;
|
|
return await assert.equal(await investor.contribute(contribution), false, 'Whitelisted investor is able to buy if crowdsale finalized');
|
|
});
|
|
test.it('Not owner is not able to finalize',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await investor.finalize(e2eWhitelist);
|
|
return await assert.equal(result, false, "Test FAILED.'Not Owner can finalize ");
|
|
});
|
|
test.it('Owner has received correct quantity of tokens ',
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
await investor.openInvestPage(e2eWhitelist);
|
|
let shouldBe = parseFloat(await investor.getBalanceFromInvestPage(e2eWhitelist));
|
|
let balance = await investor.getTokenBalance(e2eWhitelist) / 1e18;
|
|
balanceEthOwnerBefore = balance;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
});
|
|
test.it('Owner is able to finalize (if crowdsale time is over but not all tokens have sold)',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.finalize(e2eWhitelist);
|
|
return await assert.equal(result, true, "Test FAILED.'Owner can NOT finalize ");
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'HAS BEEN FINALIZED'",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eWhitelist), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCrowdsaleFinalized();
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer are not displayed ');
|
|
});
|
|
test.it('Investor#1 has received correct quantity of tokens after finalization',
|
|
async function () {
|
|
|
|
let investor = Investor1;
|
|
await investor.openInvestPage(e2eWhitelist);
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
let shouldBe = parseFloat(await investor.getBalanceFromInvestPage(e2eWhitelist));
|
|
let balance = await investor.getTokenBalance(e2eWhitelist) / 1e18;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
});
|
|
|
|
test.it('Investor#2 has received correct quantity of tokens after finalization',
|
|
async function () {
|
|
let investor = Investor2;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
await investor.openInvestPage(e2eWhitelist);
|
|
let shouldBe = parseFloat(await investor.getBalanceFromInvestPage(e2eWhitelist));
|
|
let balance = await investor.getTokenBalance(e2eWhitelist) / 1e18;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
});
|
|
|
|
test.it('Check if flag `burn_exceed` works: Owner has received unsold tokens after finalization',
|
|
async function () {
|
|
let investor = Owner;
|
|
|
|
let soldAmount = await Utils.getTokensSold(e2eWhitelist) / 1e18;
|
|
let unsoldAmount = e2eWhitelist.tiers[0].supply - soldAmount;
|
|
console.log("Owner should receive unsoldAmount = " + unsoldAmount);
|
|
console.log("soldAmount = " + soldAmount);
|
|
|
|
console.log("balanceOwnerBefore = " + balanceEthOwnerBefore);//Token balance before finalization
|
|
let balance = await investor.getTokenBalance(e2eWhitelist) / 1e18;
|
|
console.log("balanceOwnerAfter = " + balance);
|
|
let delta = Math.abs(balanceEthOwnerBefore - balance)
|
|
let result = (Math.abs(delta - unsoldAmount) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Owner has additionaly received " + balance + " tokens instead " + unsoldAmount)
|
|
});
|
|
|
|
//////////////////////// Test SUITE #2 /////////////////////////////
|
|
|
|
test.it('Owner can create DutchAuction crowdsale(scenario scenarioE2eDutchMincapLong.json), minCap,no whitelist',
|
|
async function () {
|
|
Investor1.tokenBalance = 0;
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.createDutchAuctionCrowdsale(e2eMinCap);
|
|
return await assert.equal(result, true, 'Test FAILED. Crowdsale has not created ');
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'TO START OF TIER1 '",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCrowdsaleNotStarted();
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
|
|
test.it("Contribution page: Owner's balance has correct value (totalSupply-supply) ",
|
|
async function () {
|
|
balanceEthOwnerBefore = await Utils.getBalance(Owner);
|
|
let owner = Owner;
|
|
await owner.openInvestPage(e2eMinCap);
|
|
let balance = await owner.getBalanceFromInvestPage(e2eMinCap);
|
|
let shouldBe = e2eMinCap.totalSupply - e2eMinCap.tiers[0].supply;
|
|
let result = (balance.toString() === shouldBe.toString());
|
|
return await assert.equal(result, true, "Test FAILED. Owner's balance has incorrect value (totalSupply-supply)");
|
|
});
|
|
test.it("Contribution page: minContribution field contains correct minCap value ",
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.getMinContribution();
|
|
return await assert.equal(result, e2eMinCap.tiers[0].minCap, 'Test FAILED. MinContribution value is incorrect ');
|
|
});
|
|
test.it('Manage page: owner is able to change minCap before start of crowdsale',
|
|
async function () {
|
|
let owner = Owner;
|
|
let tierNumber = 1;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await owner.openManagePage(e2eMinCap), true, 'Owner can not open manage page');
|
|
e2eMinCap.tiers[0].minCap = e2eMinCap.tiers[0].minCap / 2;
|
|
let result = await owner.changeMinCapFromManagePage(tierNumber, e2eMinCap.tiers[0].minCap);
|
|
return await assert.equal(result, true, 'Test FAILED.Owner is NOT able to add whitelisted address before start of crowdsale ');
|
|
});
|
|
|
|
test.it('Investor not able to buy before start of crowdsale ',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, false, "Test FAILED. Whitelisted investor can buy before the crowdsale started");
|
|
});
|
|
|
|
test.it('Crowdsale starts as scheduled',
|
|
async function () {
|
|
|
|
let counter = 180;
|
|
let startTime;
|
|
do {
|
|
startTime = await Utils.getDutchCrowdsaleStartTime(e2eMinCap);
|
|
logger.info("wait " + Date.now());
|
|
logger.info("wait " + startTime);
|
|
//console.log("Date.now() = " + Date.now());
|
|
//console.log("startTime = " + startTime);
|
|
//console.log("counter"+counter);
|
|
await driver.sleep(1000);
|
|
}
|
|
while (counter-- > 0 && (Date.now() / 1000 <= startTime));
|
|
return await assert.equal(counter > 0, true, 'Test FAILED. Tier has not start in time ');
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'TO END OF TIER1 '",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCurrentTier1();
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
test.it("Contribution page: minContribution field contains correct minCap value (after modifying)",
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.getMinContribution();
|
|
// console.log("minContr= "+ result );
|
|
// console.log("minCap= "+ e2eMinCap.tiers[0].minCap );
|
|
// console.log("equals= "+ result === e2eMinCap.tiers[0].minCap);
|
|
// await driver.sleep(30000);
|
|
return await assert.equal(result, e2eMinCap.tiers[0].minCap, 'Test FAILED. MinContribution value is incorrect ');
|
|
});
|
|
test.it('Investor is not able to buy less than minCap in first transaction',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap * 0.5;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, false, "Test FAILED.Investor can buy less than minCap in first transaction");
|
|
});
|
|
|
|
test.it('Investor is able to buy amount equal minCap',
|
|
async function () {
|
|
let investor = Investor1;
|
|
//assert.equal(await investor.setMetaMaskAccount(), true, "Can not set Metamask account");
|
|
let contribution = e2eMinCap.tiers[0].minCap;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.openInvestPage(e2eMinCap)
|
|
&& await investor.contribute(contribution);
|
|
return await assert.equal(result, true, 'Test FAILED. Investor can not buy ');
|
|
});
|
|
|
|
test.it('Contribution page: Investors balance is properly changed after purchase ',
|
|
async function () {
|
|
let investor = Investor1;
|
|
await investor.openInvestPage(e2eMinCap);
|
|
let newBalance = await investor.getBalanceFromInvestPage(e2eMinCap);
|
|
let result = (Math.abs(parseFloat(newBalance) - parseFloat(investor.tokenBalance)) < 10);
|
|
return await assert.equal(result, true, "Test FAILED. Investor can buy but balance did not changed");
|
|
});
|
|
|
|
test.it('Investor is able to buy less than minCap after first transaction',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap * 0.5;
|
|
investor.tokenBalance += contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, "Test FAILED. Investor can NOT buy less than min after first transaction");
|
|
|
|
});
|
|
|
|
test.it('Manage page: owner is able to update minCap after start of crowdsale',
|
|
async function () {
|
|
let owner = Owner;
|
|
let tierNumber = 1;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await owner.openManagePage(e2eMinCap), true, 'Owner can not open manage page');
|
|
e2eMinCap.tiers[0].minCap = e2eMinCap.tiers[0].minCap * 2;
|
|
let result = await owner.changeMinCapFromManagePage(tierNumber, e2eMinCap.tiers[0].minCap);
|
|
return await assert.equal(result, true, 'Test FAILED.Manage page: owner is not able to update minCap after start of crowdsale ');
|
|
});
|
|
test.it("Contribution page: minContribution field contains correct minCap value (after modifying) ",
|
|
async function () {
|
|
let investor = Investor2;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.getMinContribution();
|
|
return await assert.equal(result, e2eMinCap.tiers[0].minCap, 'Test FAILED. MinContribution value is incorrect ');
|
|
});
|
|
test.it('minCap should be updated: new investor is not able to buy less than new minCap ',
|
|
async function () {
|
|
let investor = Investor2;
|
|
//assert.equal(await investor.setMetaMaskAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap - 1;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, false, "Test FAILED. minCap wasn't updated");
|
|
|
|
});
|
|
test.it('minCap should be updated: New investor is able to buy amount equals new minCap ',
|
|
async function () {
|
|
let investor = Investor2;
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap;
|
|
investor.tokenBalance = contribution;
|
|
let result = await investor.contribute(contribution);
|
|
return await assert.equal(result, true, "Test FAILED. Updated minCap in action: New investor is not able to buy amount equals new minCap");
|
|
});
|
|
|
|
test.it('Old investor still able to buy amount less than minCap',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].minCap / 10;
|
|
investor.tokenBalance += contribution;
|
|
|
|
await investor.contribute(contribution);
|
|
let balance = await investor.getBalanceFromInvestPage(e2eMinCap);
|
|
let result = (Math.abs(parseFloat(balance) - parseFloat(investor.tokenBalance)) < 1);
|
|
return await assert.equal(result, true, "Test FAILED.Investor can not buy maxCap");
|
|
});
|
|
|
|
test.it('Investor is able to buy maxCap',
|
|
async function () {
|
|
let investor = Investor1;
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let contribution = e2eMinCap.tiers[0].supply;
|
|
investor.tokenBalance = contribution - Investor2.tokenBalance;
|
|
await investor.contribute(contribution);
|
|
let balance = await investor.getBalanceFromInvestPage(e2eMinCap);
|
|
let result = (Math.abs(parseFloat(balance) - parseFloat(investor.tokenBalance)) < 0.1);
|
|
return await assert.equal(result, true, "Test FAILED.Investor can not buy maxCap");
|
|
});
|
|
|
|
test.it("Owner's Eth balance properly changed ",
|
|
async function () {
|
|
balanceEthOwnerAfter = await Utils.getBalance(Owner);
|
|
let contribution = e2eMinCap.tiers[0].supply;
|
|
let delta = 0.1;
|
|
let result = await Utils.compareBalance(balanceEthOwnerBefore, balanceEthOwnerAfter, contribution, e2eMinCap.tiers[0].minRate, delta);
|
|
return await assert.equal(result, true, "Owner's balance incorrect");
|
|
});
|
|
|
|
test.it('Owner is able to finalize (if all tokens have been sold)',
|
|
async function () {
|
|
let owner = Owner;
|
|
assert.equal(await owner.setWalletAccount(), true, "Can not set Metamask account");
|
|
let result = await owner.finalize(e2eMinCap);
|
|
return await assert.equal(result, true, "Test FAILED.'Owner can NOT finalize ");
|
|
});
|
|
|
|
test.it("Contribution page: Countdown timer has correct status: 'HAS BEEN FINALIZED '",
|
|
async function () {
|
|
let investor = Owner;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
assert.equal(await investor.openInvestPage(e2eMinCap), true, 'Investor can not open Invest page');
|
|
assert.equal(await investPage.waitUntilLoaderGone(), true, 'Loader displayed too long time');
|
|
let result = await investPage.isCrowdsaleFinalized();
|
|
return await assert.equal(result, true, 'Test FAILED. Countdown timer has incorrect status ');
|
|
});
|
|
|
|
test.it('Investor #1 has received correct quantity of tokens after finalization',
|
|
async function () {
|
|
|
|
let investor = Investor1;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
await investor.openInvestPage(e2eMinCap);
|
|
let shouldBe = parseFloat(await investor.getBalanceFromInvestPage(e2eMinCap));
|
|
let balance = await investor.getTokenBalance(e2eMinCap) / 1e18;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
|
|
});
|
|
test.it('Investor #2 has received correct quantity of tokens after finalization',
|
|
async function () {
|
|
|
|
let investor = Investor2;
|
|
assert.equal(await investor.setWalletAccount(), true, "Can not set Metamask account");
|
|
await investor.openInvestPage(e2eMinCap);
|
|
let shouldBe = parseFloat(await investor.getBalanceFromInvestPage(e2eMinCap));
|
|
let balance = await investor.getTokenBalance(e2eMinCap) / 1e18;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
|
|
});
|
|
|
|
test.it('Owner has received correct quantity of tokens after finalization',
|
|
async function () {
|
|
|
|
let investor = Owner;
|
|
let balance = await investor.getTokenBalance(e2eMinCap) / 1e18;
|
|
let shouldBe = e2eMinCap.totalSupply - e2eMinCap.tiers[0].supply;
|
|
logger.info("Investor should receive = " + shouldBe);
|
|
logger.info("Investor has received balance = " + balance);
|
|
logger.info("Difference = " + (balance - shouldBe));
|
|
let result = (Math.abs(shouldBe - balance) < 1e-6);
|
|
return await assert.equal(result, true, "Test FAILED.'Investor has received " + balance + " tokens instead " + shouldBe)
|
|
});
|
|
|
|
});
|