UNPKG

hana-cli

Version:
199 lines (174 loc) 6.37 kB
// @ts-check import * as base from '../base.js' import { expect } from 'chai' describe('version command - E2E Tests', function () { this.timeout(15000) describe('Basic execution', () => { it('displays version information', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.include('hana-cli:') expect(stdout).to.match(/Node\.js(?:\s+version)?\s*:/i) expect(stdout).to.include('CHANGELOG.md') base.addContext(this, { title: 'Output', value: stdout }) done() }) }) it('works with alias "ver"', function (done) { base.exec('node bin/cli.js ver', (error, stdout) => { expect(stdout).to.include('hana-cli:') done() }) }) it('runs without errors', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(error).to.be.null done() }) }) }) describe('Help outputs', () => { it('shows help with --help flag', function (done) { base.exec('node bin/cli.js version --help', (error, stdout) => { expect(stdout).to.include('version') expect(stdout).to.include('Options:') done() }) }) it('displays command examples', function (done) { base.exec('node bin/cli.js version --help', (error, stdout) => { expect(stdout).to.include('hana-cli version') base.addContext(this, { title: 'Help', value: stdout }) done() }) }) }) describe('Version components', () => { it('shows hana-cli version in semver format', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { const versionMatch = stdout.match(/hana-cli:\s+(\d+\.\d+\.\d+)/) expect(versionMatch).to.exist base.addContext(this, { title: 'CLI Version', value: versionMatch ? versionMatch[1] : 'not found' }) done() }) }) it('displays Node.js version', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/Node\.js(?:\s+version)?\s*:\s*v\d+\.\d+\.\d+/i) done() }) }) it('includes changelog URL', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/https:\/\/github\.com\/SAP-samples\/hana-developer-cli-tool-example\/blob\s*\/\s*main\/CHANGELOG\.md/i) done() }) }) }) describe('Version checking', () => { it('checks latest available version', function (done) { this.timeout(20000) base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/Latest\s+hana-cli\s+version\s+available\s+on\s+npmjs\.com:\s*(\d+\.\d+\.\d+|Unable\s+to\s+fetch)/i) done() }) }) it('returns version information regardless of network', function (done) { this.timeout(20000) base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout.length).to.be.greaterThan(100) done() }) }) }) describe('Dependencies', () => { it('shows cf-cli version or missing status', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/cf-cli/i) done() }) }) it('shows btp-cli version or missing status', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/btp-cli/i) done() }) }) it('displays SAP package versions', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/@sap\//i) done() }) }) it('includes database driver info', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.match(/hdb|database/i) done() }) }) }) describe('Output format', () => { it('outputs multiple lines', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { const lines = stdout.split('\n').filter(l => l.trim()) expect(lines.length).to.be.greaterThan(3) base.addContext(this, { title: 'Line count', value: `${lines.length} lines` }) done() }) }) it('uses consistent name: value format', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { const lines = stdout.split('\n').filter(l => l.includes(':')) expect(lines.length).to.be.greaterThan(1) const allFormatted = lines.every(line => /:\s+/.test(line)) expect(allFormatted).to.be.true done() }) }) }) describe('Integration', () => { it('works in command sequence', function (done) { base.exec('node bin/cli.js version', (error1, stdout1) => { base.exec('node bin/cli.js version', (error2, stdout2) => { expect(stdout1).to.include('hana-cli:') expect(stdout2).to.include('hana-cli:') done(error1 || error2) }) }) }) it('returns consistent version on repeated calls', function (done) { base.exec('node bin/cli.js version', (error1, stdout1) => { base.exec('node bin/cli.js version', (error2, stdout2) => { const v1 = stdout1.match(/hana-cli:\s+(\d+\.\d+\.\d+)/)?.[1] const v2 = stdout2.match(/hana-cli:\s+(\d+\.\d+\.\d+)/)?.[1] expect(v1).to.equal(v2) done() }) }) }) it('does not require database connection', function (done) { base.exec('node bin/cli.js version', (error, stdout) => { expect(stdout).to.include('hana-cli:') expect(error).to.be.null done() }) }) }) describe('Error handling', () => { it('completes without errors', function (done) { const localTest = base.myTest.bind(this) localTest('node bin/cli.js version', done) }) it('handles global flags gracefully', function (done) { base.exec('node bin/cli.js version --debug', (error, stdout) => { expect(stdout).to.include('hana-cli:') done() }) }) it('alias works with options', function (done) { base.exec('node bin/cli.js ver --help', (error, stdout) => { expect(stdout.length).to.be.greaterThan(0) done() }) }) }) })