UNPKG

@labnex/cli

Version:

CLI for Labnex, an AI-Powered Testing Automation Platform

150 lines 6.57 kB
"use strict"; 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