@saxolab/ispec
v0.0.2
Published
Create acceptance reports for new cloud services.
Downloads
1
Readme
Todo
[ ] Create typescript library
@saxolab/ispec
[ ] Create diff library
[ ] Change return type to
{ path : 'Snapshots.Rows[3].Display.Currency', cloud: undefined, legacy: 'GB' }
[ ] Create diff of arrays, and nested objects
[ ] How to handle when arrays have a mismatch of elements
[ ] Move config to env variables and cli params
This is a tool for creating acceptance reports for new cloud services.
Features
- Auto generate tokens
- Publish reports to wiki
- Generate markdown by running on local
- use as cli tool or library
How to use
- Declarative Style :
- Create a simple javascript file, set env variables and run using cli
- Library Style :
- Create purly custom logic by using individual components like
- SaxoApiClient
- SaxoTokenGenerator
- Report API
- WikiPublisher
- Diff Calculator
- Create purly custom logic by using individual components like
Declarative Style
Install project globally
npm i -g saxolab/ispec
Create script exchange-rate.ispec.js
const currencyPairsToTest = [
"USDINR",
"INRDKK",
"XYZABC",
"usdInR",
"usdinr"
];
module.exports = async({client, wiki, reports, diff, config, files}) => {
await Promise.all(currencyPairsToTest.map(async (currencyPair) => {
const report = reports.create();
report.AddHeading(currencyPair);
const cloudResponse = client.get(`cloud-url/prices/v1/exchangerates?pair=${currencyPair}`);
const onPremResponse = client.get(`on-prem-url/prices/v1/exchangerates?pair=${currencyPair}`);
const diff = diff.compare({legacy : onPremResponse.data, cloud: cloudResponse.data});
// Create heading for table in report
const table = diff.map(d => {
return {
'Field Name': d.fieldName,
'Value on cloud': d.cloudValue,
'Value on premises': d.legacyValue,
};
});
report.addTable(table);
// Publish report on wiki
wiki.publish(currencyPair, config.exchnageRatePage, report.getHtml());
files.save(`${currencyPair-cloud.json}`, cloudResponse.data);
files.save(`${currencyPair-onprem.json}`, onPremResponse.data);
// Save markdown to view on local
files.save(`${currencyPair-report.md}`, report.getMarkdDown());
}));
}
Running spec
// Set WIKI_TOKEN env variable
ispec exchange-rate.ispec.js env=tst211 publish=true
Library Style
import ispec from 'saxolab/ispec';
const {client, wiki, reports, diff, config, files} = ispec.initialize();
const currencyPairsToTest = [
"USDINR",
"INRDKK",
"XYZABC",
"usdInR",
"usdinr"
];
(async() => {
await Promise.all(currencyPairsToTest.map(async (currencyPair) => {
const report = reports.create();
report.AddHeading(currencyPair);
const cloudResponse = client.get(`cloud-url/prices/v1/exchangerates?pair=${currencyPair}`);
const onPremResponse = client.get(`on-prem-url/prices/v1/exchangerates?pair=${currencyPair}`);
const diff = diff.compare({legacy : onPremResponse.data, cloud: cloudResponse.data});
// Create heading for table in report
const table = diff.map(d => {
return {
'Field Name': d.fieldName,
'Value on cloud': d.cloudValue,
'Value on premises': d.legacyValue,
};
});
report.addTable(table);
// Publish report on wiki
wiki.publish(currencyPair, config.exchnageRatePage, report.getHtml());
files.save(`${currencyPair-cloud.json}`, cloudResponse.data);
files.save(`${currencyPair-onprem.json}`, onPremResponse.data);
// Save markdown to view on local
files.save(`${currencyPair-report.md}`, report.getMarkdDown());
}));
}
)();
CLI options
| Parameter | Required/Optional | |
| --------- | ----------------------------------------------- | ------------------------------------------------------------ |
| env
| required if API_TOKEN
env variable is not set | Used to get token. Valide values can be env=red
, env=blue
, env=tst231
, or any DTE instance supported by assumption service |
| publish
| optional (default is false) | If not set to true, wiki will not be updated |
| wikiUrl
| optional (defaults to https://wiki) | |
Environment variables
| Env name | Required/Optional | |
| ------------ | ----------------------------------- | ---- |
| WIKI_TOKEN
| required if cli parampublish=true
| |
| API_TOKEN
| required if env
not provided | |
| WIKI_URL
| | |
WIKI_TOKEN