@labnex/cli
Version:
CLI for Labnex, an AI-Powered Testing Automation Platform
150 lines • 6.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listCommand = void 0;
const commander_1 = require("commander");
const chalk_1 = __importDefault(require("chalk"));
const ora_1 = __importDefault(require("ora"));
const cli_table3_1 = __importDefault(require("cli-table3"));
const client_1 = require("../api/client");
exports.listCommand = new commander_1.Command('list')
.description('List resources like projects and test cases.')
.addCommand(new commander_1.Command('projects')
.description('List all available projects.')
.option('--format <format>', 'Output format (table, json)', 'table')
.action(async (options) => {
try {
const spinner = (0, ora_1.default)('Fetching projects...').start();
const response = await client_1.apiClient.getProjects();
if (response.success) {
spinner.succeed(`Found ${response.data.length} projects`);
if (options.format === 'json') {
console.log(JSON.stringify(response.data, null, 2));
return;
}
// Table output
const table = new cli_table3_1.default({
head: ['Project', 'Name', 'Tests', 'Status'],
colWidths: [12, 24, 12, 12]
});
response.data.forEach((proj) => {
table.push([
proj.projectCode,
proj.name,
`${proj.testCaseCount} tests`,
proj.isActive ? chalk_1.default.green('✅ Active') : chalk_1.default.gray('Inactive')
]);
});
console.log(table.toString());
}
else {
spinner.fail(chalk_1.default.red('Failed to fetch projects'));
}
}
catch (error) {
console.error(chalk_1.default.red('Error:'), error.message);
}
}))
.addCommand(new commander_1.Command('tests')
.description('List test cases for a specific project.')
.argument('<projectCode>', 'The code of the project')
.option('--format <fmt>', 'table or json', 'table')
.action(async (projectCode, options) => {
const spinner = (0, ora_1.default)(`Fetching test cases for project ${chalk_1.default.cyan(projectCode)}...`).start();
try {
// First, get the project ID from the code
const projectsResponse = await client_1.apiClient.getProjects();
if (!projectsResponse.success) {
spinner.fail(chalk_1.default.red(`Failed to fetch projects: ${projectsResponse.error}`));
return;
}
const project = projectsResponse.data.find(p => p.projectCode === projectCode.toUpperCase());
if (!project) {
spinner.fail(chalk_1.default.red(`Project with code "${projectCode}" not found.`));
return;
}
const response = await client_1.apiClient.getTestCases(project._id);
if (response.success) {
spinner.succeed(`✅ Found ${response.data.length} test cases.`);
if (options.format === 'json') {
console.log(JSON.stringify(response.data, null, 2));
return;
}
if (response.data.length === 0) {
console.log(chalk_1.default.yellow('No test cases found for this project.'));
return;
}
const table = new cli_table3_1.default({
head: ['ID', 'Title', 'Priority', 'Status'],
colWidths: [30, 50, 10, 10],
});
response.data.forEach((test) => {
table.push([test._id, test.title, test.priority, test.status]);
});
console.log(table.toString());
}
else {
spinner.fail(chalk_1.default.red(`Failed to fetch test cases: ${response.error}`));
}
}
catch (error) {
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
console.error(chalk_1.default.red(`Error details: ${error.stack}`));
}
}))
.addCommand(new commander_1.Command('runs')
.description('List test runs for a specific project.')
.argument('<projectCode>', 'The code of the project')
.option('--format <fmt>', 'table or json', 'table')
.action(async (projectCode, options) => {
const spinner = (0, ora_1.default)(`Fetching test runs for project ${chalk_1.default.cyan(projectCode)}...`).start();
try {
const projectsResponse = await client_1.apiClient.getProjects();
if (!projectsResponse.success) {
spinner.fail(chalk_1.default.red(`Failed to fetch projects: ${projectsResponse.error}`));
return;
}
const project = projectsResponse.data.find(p => p.projectCode === projectCode.toUpperCase());
if (!project) {
spinner.fail(chalk_1.default.red(`Project with code "${projectCode}" not found.`));
return;
}
const runsResponse = await client_1.apiClient.getTestRuns(project._id);
if (runsResponse.success) {
spinner.succeed(`✅ Found ${runsResponse.data.length} runs.`);
if (options.format === 'json') {
console.log(JSON.stringify(runsResponse.data, null, 2));
return;
}
if (runsResponse.data.length === 0) {
console.log(chalk_1.default.yellow('No runs found for this project.'));
return;
}
const table = new cli_table3_1.default({
head: ['Run ID', 'Status', 'Tests', 'Passed', 'Failed', 'Duration', 'Started'],
colWidths: [26, 10, 8, 8, 8, 10, 22]
});
runsResponse.data.forEach((run) => {
table.push([
run._id,
run.status,
run.results?.total ?? '-',
run.results?.passed ?? '-',
run.results?.failed ?? '-',
((run.results?.duration || 0) / 1000).toFixed(1) + 's',
new Date(run.createdAt).toLocaleString()
]);
});
console.log(table.toString());
}
else {
spinner.fail(chalk_1.default.red(`Failed to fetch test runs: ${runsResponse.error}`));
}
}
catch (error) {
spinner.fail(chalk_1.default.red(`Error: ${error.message}`));
}
}));
//# sourceMappingURL=list.js.map