valence-test
Version:
Test applications running in Valence and 5250 screens with Fusion5250
1 lines • 5.53 kB
JavaScript
;const inquirer=require("inquirer"),urlParse=require("url-parse"),shell=require("shelljs"),fs=require("fs"),path=require("path"),jsonfile=require("jsonfile"),emailValidator=require("email-validator"),projectDir=process.env.INIT_CWD||path.resolve("../../../",__dirname),packageJsonPath=`${projectDir}/package.json`,checkPackage=()=>{return new Promise((e,a)=>{fs.existsSync(packageJsonPath)?e():(console.error("Unable to find package.json, `npm init` is required before installing valence-test."),a())})},updatePackage=()=>{return new Promise((e,a)=>{jsonfile.readFile(packageJsonPath,(s,t)=>{if(s)console.error("Unable to access package.json : ",s),a();else{if(t.dependencies)return console.error("valence-test: Since this is not a clean install please refer to the package Readme for setup instructions."),void a();t.main&&delete t.main,t.scripts={codeceptjs:"codeceptjs run --steps --reporter mochawesome",start:"node app.js"},t.dependencies={codeceptjs:"latest",ip:"latest",mocha:"latest",mochawesome:"latest","node-schedule":"latest",nodemailer:"latest",puppeteer:"latest",shelljs:"latest","short-unique-id":"latest","fs-extra":"latest"},jsonfile.writeFile(packageJsonPath,t,{replace:!0,spaces:2},function(s){s?(console.error("Unable update package.json : ",s),a()):e()})}})})},copyTemplate=()=>{return new Promise((e,a)=>{shell.cp("-R",`${__dirname}/template/*`,`${projectDir}`),shell.error()?a():e()})},questions=()=>{return new Promise((e,a)=>{const s=[{type:"input",name:"valenceUrl",message:"What is the url to your Valence instance?",validate:function(e){return!!urlParse(e).host||"Invalid Url"}},{type:"input",name:"valenceUserId",message:"Valence User ID to run the test as",validate:function(e){return!!e||"Invalid User ID"}},{type:"input",name:"valenceUserPwd",message:"Valence User Password to run the test as",validate:function(e){return!!e||"Invalid User Password"}},{type:"input",name:"port",message:"Port number for this new node server",validate:function(e){return!e||!(isNaN(e)||e<0)||"Invalid port number"}},{type:"checkbox",message:"Schedule - Day Of Week",name:"schDayOfWeek",choices:[{name:"Everyday",checked:!0},{name:"Sunday"},{name:"Monday"},{name:"Tuesday"},{name:"Wednesday"},{name:"Thursday"},{name:"Friday"},{name:"Saturday"}]},{type:"input",name:"schHour",message:"Schedule - Hour (0-23)",default:0,validate:function(e){return!e||!(isNaN(e)||e<0||e>23)||"Valid Hours are 0-23"}},{type:"input",name:"schMin",message:"Schedule - Minute (0-59)",default:0,validate:function(e){return!e||!(isNaN(e)||e<0||e>59)||"Valid Minutes are 0-59"}},{type:"confirm",message:"Email Results",name:"emailResults",default:"Y"},{type:"input",name:"emailHost",message:"SMTP Host Name",validate:function(e){return!!e||"Host must be populated"},when:function(e){return e.emailResults}},{type:"number",name:"emailPort",message:"SMTP Port Number",validate:function(e){return!!e||"Port must be populated"},when:function(e){return e.emailResults}},{type:"input",name:"emailUser",message:"SMTP User ID",validate:function(e){return!!e||"SMTP User ID must be populated"},when:function(e){return e.emailResults}},{type:"input",name:"emailPassword",message:"SMTP User Password",validate:function(e){return!!e||"SMTP User password must be populated"},when:function(e){return e.emailResults}},{type:"input",name:"emailTo",message:"To Email Address",validate:function(e){return!!emailValidator.validate(e)||"Invalid To User email"},when:function(e){return e.emailResults}},{type:"input",name:"emailCc",message:"CC Email Address",validate:function(e){if(e){return!!emailValidator.validate(e)||"Invalid email address"}return!0},when:function(e){return e.emailResults}},{type:"input",name:"emailBc",message:"BC Email Address",validate:function(e){if(e){return!!emailValidator.validate(e)||"Invalid email address"}return!0},when:function(e){return e.emailResults}},{type:"input",name:"emailSubject",message:"Email Subject",default:"Valence Test Results",when:function(e){return e.emailResults}}];inquirer.prompt(s).then(a=>{e(a)})})},createConfig=e=>{return new Promise((a,s)=>{let t={purgeResultsDays:5},n={hour:0,minute:0};if(Object.assign(t,{port:parseInt(e.port),valenceUrl:e.valenceUrl,valenceUserId:e.valenceUserId,valenceUserPwd:e.valenceUserPwd}),e.emailResults){let a={host:e.emailHost,port:parseInt(e.emailPort),pwd:e.emailPassword,rejectUnauthorized:!1,secure:!1,secureConnection:!1,subject:e.emailSubject,to:e.emailTo,user:e.emailUser,logger:!1};e.emailCc&&Object.assign(a,{cc:e.emailCc}),e.emailBc&&Object.assign(a,{bc:e.emailBc}),Object.assign(t,{email:a})}if(e.schHour&&Object.assign(n,{hour:parseInt(e.schHour)}),e.schMin&&Object.assign(n,{minute:parseInt(e.schMin)}),e.schDayOfWeek){if(-1===e.schDayOfWeek.indexOf("Everyday")){let a,s=[];for(a=0;a<e.schDayOfWeek.length;a++)switch(e.schDayOfWeek[a]){case"Sunday":s.push(0);break;case"Monday":s.push(1);break;case"Tuesday":s.push(2);break;case"Wednesday":s.push(3);break;case"Thursday":s.push(4);break;case"Friday":s.push(5);break;case"Saturday":s.push(6)}s.length>0&&Object.assign(n,{dayOfWeek:s})}}Object.assign(t,{schedule:n}),jsonfile.writeFile(`${projectDir}/config.json`,t,{replace:!0,spaces:2},function(e){e?(console.error("Unable update package.json : ",e),s()):a()}),console.log("answers : ",e)})};new Promise((e,a)=>{fs.existsSync(packageJsonPath)?e():(console.error("Unable to find package.json, `npm init` is required before installing valence-test."),a())}).then(updatePackage).then(copyTemplate).then(questions).then(createConfig).catch(()=>{});