hana-cli
Version:
HANA Developer Command Line Interface
549 lines (449 loc) • 24.3 kB
JavaScript
// @ts-nocheck
/**
* @module Command Alias Tests - Tests for command aliases
*
* This test suite validates that command aliases work identically to main commands.
* Aliases are defined within the main command files and registered with yargs,
* so they are accessed through the main CLI entry point (bin/cli.js), not as separate files.
*
* - Short aliases (t, v, f, p, etc.)
* - Descriptive aliases (listTables, inspectable, etc.)
* - Consistency between alias and main command
*
* These tests ensure users can use any alias confidently.
*/
import * as base from './base.js'
import * as child_process from 'child_process'
describe('Command Alias Tests', function () {
describe('tables command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js tables --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "t" alias', function (done) {
child_process.exec('node bin/cli.js t --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"t" alias should work')
done()
})
})
it('should work with "listTables" alias', function (done) {
child_process.exec('node bin/cli.js listTables --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"listTables" alias should work')
done()
})
})
it('should work with "listtables" alias', function (done) {
child_process.exec('node bin/cli.js listtables --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"listtables" alias should work')
done()
})
})
})
describe('views command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js views --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "v" alias', function (done) {
child_process.exec('node bin/cli.js v --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"v" alias should work')
done()
})
})
})
describe('functions command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js functions --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "f" alias', function (done) {
child_process.exec('node bin/cli.js f --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"f" alias should work')
done()
})
})
})
describe('procedures command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js procedures --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "p" alias', function (done) {
child_process.exec('node bin/cli.js p --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"p" alias should work')
done()
})
})
it('should work with "sp" alias', function (done) {
child_process.exec('node bin/cli.js sp --limit 3 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"sp" alias should work')
done()
})
})
})
describe('schemas command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js schemas --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "s" alias', function (done) {
child_process.exec('node bin/cli.js s --limit 5 --quiet', (error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"s" alias should work')
done()
})
})
})
describe('inspectTable command aliases', function () {
this.timeout(10000)
it('should work with main command', function (done) {
child_process.exec('node bin/cli.js inspectTable --schema SYSTEM --table DUMMY --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
base.assert.ok(true, 'Main command works')
done()
})
})
it('should work with "it" alias', function (done) {
child_process.exec('node bin/cli.js it --schema SYSTEM --table DUMMY --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"it" alias should work')
done()
})
})
it('should work with "table" alias', function (done) {
child_process.exec('node bin/cli.js table --schema SYSTEM --table DUMMY --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"table" alias should work')
done()
})
})
it('should work with "insTbl" alias', function (done) {
child_process.exec('node bin/cli.js insTbl --schema SYSTEM --table DUMMY --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"insTbl" alias should work')
done()
})
})
it('should work with "inspectable" alias', function (done) {
child_process.exec('node bin/cli.js inspectable --schema SYSTEM --table DUMMY --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"inspectable" alias should work')
done()
})
})
})
describe('inspectView command aliases', function () {
this.timeout(10000)
it('should work with "iv" alias', function (done) {
child_process.exec('node bin/cli.js iv --schema SYSTEM --view SYS.USERS --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"iv" alias should work')
done()
})
})
it('should work with "view" alias', function (done) {
child_process.exec('node bin/cli.js view --schema SYSTEM --view SYS.USERS --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"view" alias should work')
done()
})
})
})
describe('inspectProcedure command aliases', function () {
this.timeout(10000)
it('should work with "ip" alias', function (done) {
child_process.exec('node bin/cli.js ip --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"ip" alias should work')
done()
})
})
it('should work with "inspectprocedure" alias', function (done) {
child_process.exec('node bin/cli.js inspectprocedure --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"inspectprocedure" alias should work')
done()
})
})
})
describe('inspectFunction command aliases', function () {
this.timeout(10000)
it('should work with "if" alias', function (done) {
child_process.exec('node bin/cli.js if --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"if" alias should work')
done()
})
})
it('should work with "function" alias', function (done) {
child_process.exec('node bin/cli.js function --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"function" alias should work')
done()
})
})
})
describe('backup and recovery command aliases', function () {
this.timeout(10000)
it('should work with backup command', function (done) {
child_process.exec('node bin/cli.js backup --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"backup" command should work')
done()
})
})
it('should work with "bkp" alias', function (done) {
child_process.exec('node bin/cli.js bkp --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"bkp" alias should work')
done()
})
})
it('should work with "createBackup" alias', function (done) {
child_process.exec('node bin/cli.js createBackup --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"createBackup" alias should work')
done()
})
})
it('should work with backupList command', function (done) {
child_process.exec('node bin/cli.js backupList --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"backupList" command should work')
done()
})
})
it('should work with "blist" alias', function (done) {
child_process.exec('node bin/cli.js blist --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"blist" alias should work')
done()
})
})
it('should work with "listBackups" alias', function (done) {
child_process.exec('node bin/cli.js listBackups --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"listBackups" alias should work')
done()
})
})
it('should work with "backups" alias', function (done) {
child_process.exec('node bin/cli.js backups --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"backups" alias should work')
done()
})
})
it('should work with backupStatus command', function (done) {
child_process.exec('node bin/cli.js backupStatus --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"backupStatus" command should work')
done()
})
})
it('should work with "bstatus" alias', function (done) {
child_process.exec('node bin/cli.js bstatus --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"bstatus" alias should work')
done()
})
})
it('should work with restore command', function (done) {
child_process.exec('node bin/cli.js restore --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"restore" command should work')
done()
})
})
it('should work with "rst" alias', function (done) {
child_process.exec('node bin/cli.js rst --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, '"rst" alias should work')
done()
})
})
})
describe('Alias consistency check', function () {
this.timeout(10000)
it('should produce similar output for command and alias', function (done) {
// Compare tables vs t command output
child_process.exec('node bin/cli.js tables --limit 3 --quiet',
(error1, stdout1, stderr1) => {
child_process.exec('node bin/cli.js t --limit 3 --quiet',
(error2, stdout2, stderr2) => {
base.addContext(this, { title: 'Tables output', value: stdout1 })
base.addContext(this, { title: 'T alias output', value: stdout2 })
// Both should have same error state (both succeed or both fail)
base.assert.strictEqual(!!error1, !!error2,
'Command and alias should have same success/failure state')
done()
})
})
})
it('should accept same flags for command and alias', function (done) {
// Test that flags work the same way
child_process.exec('node bin/cli.js tables --schema SYSTEM --limit 5 --quiet',
(error1, stdout1, stderr1) => {
child_process.exec('node bin/cli.js t --schema SYSTEM --limit 5 --quiet',
(error2, stdout2, stderr2) => {
base.addContext(this, { title: 'Tables with flags', value: stdout1 })
base.addContext(this, { title: 'T alias with flags', value: stdout2 })
base.assert.strictEqual(!!error1, !!error2,
'Flags should work identically for command and alias')
done()
})
})
})
})
describe('Help output for aliases', function () {
this.timeout(10000)
it('should show help for table alias', function (done) {
child_process.exec('node bin/cli.js t --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const hasHelp = stdout.includes('Usage') || stdout.includes('Options')
base.assert.ok(hasHelp, 'Alias should show help output')
done()
})
})
it('should show help for view alias', function (done) {
child_process.exec('node bin/cli.js v --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const hasHelp = stdout.includes('Usage') || stdout.includes('Options')
base.assert.ok(hasHelp, 'Alias should show help output')
done()
})
})
it('should show help for function alias', function (done) {
child_process.exec('node bin/cli.js f --help',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
const hasHelp = stdout.includes('Usage') || stdout.includes('Options')
base.assert.ok(hasHelp, 'Alias should show help output')
done()
})
})
})
describe('Case sensitivity of aliases', function () {
this.timeout(10000)
it('should handle lowercase aliases', function (done) {
child_process.exec('node bin/cli.js listtables --limit 3 --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, 'Lowercase alias should work')
done()
})
})
it('should handle camelCase aliases', function (done) {
child_process.exec('node bin/cli.js listTables --limit 3 --quiet',
(error, stdout, stderr) => {
base.addContext(this, { title: 'Stdout', value: stdout })
base.addContext(this, { title: 'Stderr', value: stderr })
const notRecognized = stderr.includes('Unknown command')
base.assert.ok(!notRecognized, 'CamelCase alias should work')
done()
})
})
})
})