@testlio/cli
Version:
Official Testlio platform command-line interface
95 lines (71 loc) • 2.64 kB
JavaScript
const axios = require('axios');
const Joi = require('joi');
const fs = require('fs');
const FAILURE = 1;
const SUCCESS = 0;
const printHelp = () => {
console.log(`Retrieve results
Usage:
testlio get-results
Options:
--projectConfig [path] path to project config (default: project-config.json)
`);
};
const setAuthorizationToken = (token) => {
axios.defaults.headers.common.Authorization = `Bearer ${token}`;
};
const setBaseUri = (baseURI) => {
axios.defaults.baseURL = baseURI;
};
const projectConfigSchema = Joi.object({
baseURI: Joi.string().required(),
resultCollectionGuid: Joi.string().required()
});
const parseRunResultsSchema = Joi.object({
projectConfig: Joi.string().default('project-config.json')
});
const getResults = async (resultCollectionGuid, resultId) => {
const { data, status } = await axios.get(`/result/v1/collections/${resultCollectionGuid}/results/${resultId}`);
if (status !== 200) throw new Error(`Failed to retrieve result with id ${resultId}`);
return data;
};
module.exports = async (params) => {
if (params.h || params.help) {
printHelp();
return SUCCESS;
}
const { projectConfig: projectConfigFilePath } = Joi.attempt(params, parseRunResultsSchema);
if (!fs.existsSync(projectConfigFilePath)) {
console.log(`File "${projectConfigFilePath}" not found!`);
return FAILURE;
}
try {
const projectConfig = JSON.parse(fs.readFileSync(projectConfigFilePath).toString());
const { baseURI, resultCollectionGuid } = Joi.attempt(projectConfig, projectConfigSchema.unknown());
if (!process.env.RUN_API_TOKEN) {
console.log('Please provide RUN API TOKEN');
return FAILURE;
}
if (!process.env.RESULT_ID) {
console.log('For retrieving results, RESULT_ID must be provided');
return FAILURE;
}
setBaseUri(baseURI);
setAuthorizationToken(process.env.RUN_API_TOKEN);
const result = await getResults(resultCollectionGuid, process.env.RESULT_ID);
if (result?.status === 'in_progress') {
console.log(`Results are still in progress. Please, try again later`);
return SUCCESS;
}
if (result?.status === 'finished') {
console.log(JSON.stringify(result, null, 2));
return SUCCESS;
}
console.log(`Unknown result status: ${result?.status}`);
return FAILURE;
} catch (e) {
console.log('Something went wrong while retrieving results', e);
return FAILURE;
}
};