token-wizard-test-automation/utils/Utils.js

325 lines
7.4 KiB
JavaScript

var nodemailer = require('nodemailer');
const Logger= require('../entity/Logger.js');
const logger=Logger.logger;
const tempOutputPath=Logger.tempOutputPath;
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const fs = require('fs');
const Web3 = require('web3');
const {spawn} = require('child_process');
const configFile='config.json';
const crowdsale=require('../entity/Crowdsale.js');
const Crowdsale=crowdsale.Crowdsale;
var browserHandles=[];
class Utils {
static runGanache(){
logger.info("Run ganache-cli");
return spawn ('ganache-cli');
}
static killProcess(process){
return process.kill();
}
static async getProviderUrl(id)
{
logger.info("getProvider "+id);
let provider="";
switch(id) {
case 8545:{ provider= "http://localhost:8545";break;}
default: {provider= "https://sokol.poa.network";break;}
}
logger.info("Got provider "+provider);
return provider;
}
static async increaseBalance(user, amount)
{
try{
let provider=await Utils.getProviderUrl(user.networkID);
logger.info("Current provider "+ provider);
let w=await new Web3(new Web3.providers.HttpProvider(provider));
//let account0 = w.eth.accounts[0];
let account0=await w.eth.getAccounts().then((accounts)=>{return accounts[2];});
//let account0=await w.eth.accounts[2];
//logger.info("Ganache balance "+w.eth.getBalance(account0));
logger.info("Send " + amount + " Eth from " + account0 + " to " + user.account);
await w.eth.sendTransaction({
from: account0,
to: user.account,
value: amount*1e18
}).then(console.log);
}
catch(err){
logger.info("Not able to sent " + amount + " Eth to " + user.account);
logger.info(err);
}
}
static setNetwork(network){
let url;
switch(network)
{
case 4:{url="https://rinkeby.infura.io/";break;}
case 77:{url="https://sokol.poa.network";break;}
case 8545:{url="http://localhost:8545"; break;}
default:{url="https://sokol.poa.network";break;}
}
return new Web3(new Web3.providers.HttpProvider(url));
}
static getTransactionCount(network,address) {
var w = Utils.setNetwork(network);
var n = w.eth.getTransactionCount(address.toString());//returns Number
return n;
}
static async getBalance(user)
{
var w = Utils.setNetwork(user.networkID);
var n =await w.eth.getBalance(user.account.toString());
return n;
}
static async wait(driver,time){
await driver.sleep(time*1000);
}
static sendEmail(path){
var transport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '[email protected]',
pass: 'javascript'
}
});
var mailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'test results '+Utils.getDateWithAdjust(0,'utc')+" "+ Utils.getTimeWithAdjust(0,'utc'),
text: 'test results '+Utils.getDateWithAdjust(0,'utc') + " " + Utils.getTimeWithAdjust(0,'utc'),
attachments: [
{path:""}
]
};
mailOptions.attachments[0].path=path;
transport.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
static compare(ss,newDate,newTime){
let arr=ss.split("T");
let aww=arr[0].split("-");
let n=newDate.split("/");
return (arr[1]==newTime)&&(aww[0]==n[2])&&(aww[1]==n[1])&&(aww[2]==n[0]);
}
static async getDateFormat(driver){
var d=await driver.executeScript("var d=new Date(1999,11,28);return d.toLocaleDateString();");
d=(""+d).substring(0,2);
if (d=='28') logger.info( "Date format=UTC");
else logger.info( "Date format=MDY");
if (d=='28') return "utc";
else return "mdy";
}
static convertDateToMdy(date){
let s=date.split("/");
return ""+s[1]+"/"+s[0]+"/"+s[2];
}
static convertTimeToMdy(date){
let s=date.split(":");
let r="am";
s[1]=s[1].substring(0,2);
if (s[0]>12) {s[0]=parseInt(s[0])-12; r="pm";}
else if ((s[0])=="12") r="pm";
else if(parseInt(s[0])==0) {s[0]="12";r="am";}
return ""+s[0]+":"+s[1]+r;
}
static convertDateToUtc(date){
let s=date.split("/");
return ""+s[1]+"/"+s[0]+"/"+s[2];
}
static convertTimeToUtc(date){
let s=date.split(":");
let r=s[1].charAt(2);
if (r=='p') {
s[0] = parseInt(s[0]) + 12;
if (s[0] > 23) s[0]=12;
}
else if (s[0]=="12") s[0]="00";
return s[0]+":"+s[1].substring(0,2);
}
static getTimeWithAdjust(adj, format){
var d=new Date(Date.now()+adj);
var r="am";
var h=d.getHours();
var min=d.getMinutes();
if (format=='mdy')
if (h>12) {h=h-12;r="pm";}
if (h==12) {r="pm";}
if (format=='utc') r="";
h=""+h;
if (h.length<2) h="0"+h;
var min=""+min;
if (min.length<2) min="0"+min;
var q=h+":"+min+r;
return q;
}
static getDateWithAdjust(adj, format){
var d=new Date(Date.now()+adj);
var q;
var day=""+d.getDate();
if (day.length<2) day="0"+day;
var month=""+(d.getMonth()+1);
if (month.length<2) month="0"+month;
if (format=='mdy') q=month+"/"+day+"/"+d.getFullYear();
else if (format=='utc') q=(day+"/"+month+"/"+d.getFullYear());
return q;
}
static getOutputPath() {
var obj = JSON.parse(fs.readFileSync(configFile, "utf8"));
return obj.outputPath;
}
static getDate() {
var d = new Date();
var date = "_" + (d.getMonth() + 1) + "_" + d.getDate() + "_"
+ d.getFullYear() + "_" + d.getHours() + "_" + d.getMinutes() + "_" + d.getSeconds();
return date;
}
static getStartURL() {
var obj = JSON.parse(fs.readFileSync(configFile, "utf8"));
return obj.startURL;
}
static async takeScreenshoot(driver,name) {
var res=await driver.takeScreenshot();
var buf = new Buffer(res, 'base64');
console.log("Take screenshot. Path "+tempOutputPath + name+'.png');
await fs.writeFileSync(tempOutputPath + name + '.png', buf);
}
static async startBrowserWithMetamask() {
var source = 'MetaMask.crx';
if (!fs.existsSync(source)) source = '.node_modules/token-wizard-test-automation/MetaMask.crx';
logger.info("Metamask source:"+source);
var options = new chrome.Options();
options.addExtensions(source);
//options.addArguments("user-data-dir=/home/d/GoogleProfile");
//options.addArguments("user-data-dir=/home/d/.config/google-chrome/");
//
// options.addArguments('headless');
//options.addArguments('--start-maximized');
options.addArguments('disable-popup-blocking');
//options.addArguments('test-type');
var driver=await new webdriver.Builder().withCapabilities(options.toCapabilities()).build();
return driver;
}
static async zoom(driver,z){
await driver.executeScript ("document.body.style.zoom = '"+z+"'");
}
static async getCrowdsaleInstance(fileName) {
try {
let crowdsale = new Crowdsale();
await crowdsale.parser(fileName);
return crowdsale;
}
catch(err) {
logger.info("Can not create crowdsale");
logger.info(err);
return null;
}
}
static async getPathToFileInPWD(fileName)
{
return process.env.PWD+"/" +fileName;
}
}
module.exports={
Utils:Utils
}
exports.browserHandles=browserHandles;