Add azdata tests (#11745)

This commit is contained in:
Charles Gagnon
2020-08-12 09:02:42 -07:00
committed by GitHub
parent 00af075fb3
commit 01ea89a461
2 changed files with 57 additions and 14 deletions

View File

@@ -48,8 +48,12 @@ describe('azdata', function () {
}); });
// TODO: Install not implemented on linux yet // TODO: Install not implemented on linux yet
describe.skip('downloadAndInstallAzdata', function (): void { describe('downloadAndInstallAzdata', function (): void {
it('successful download & install', async function (): Promise<void> { it('successful download & install', async function (): Promise<void> {
sinon.stub(childProcess, 'executeCommand').returns(Promise.resolve({ stdout: '', stderr: '' }));
if (process.platform === 'linux') {
sinon.stub(childProcess, 'executeSudoCommand').returns(Promise.resolve({ stdout: '', stderr: '' }));
}
nock(azdata.azdataHostname) nock(azdata.azdataHostname)
.get(`/${azdata.azdataUri}`) .get(`/${azdata.azdataUri}`)
.replyWithFile(200, __filename); .replyWithFile(200, __filename);

View File

@@ -6,25 +6,64 @@
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import * as should from 'should'; import * as should from 'should';
import * as TypeMoq from 'typemoq'; import * as TypeMoq from 'typemoq';
import { executeCommand } from '../../common/childProcess'; import * as sudo from 'sudo-prompt';
import * as sinon from 'sinon';
describe('ChildProcess', function () { import { executeCommand, executeSudoCommand } from '../../common/childProcess';
describe('ChildProcess', function (): void {
const outputChannelMock = TypeMoq.Mock.ofType<vscode.OutputChannel>(); const outputChannelMock = TypeMoq.Mock.ofType<vscode.OutputChannel>();
[[], ['test']].forEach(args => { afterEach(function(): void {
it(`Output channel is used with ${JSON.stringify(args)} args`, async function (): Promise<void> { sinon.restore();
await executeCommand('echo', args, outputChannelMock.object); });
outputChannelMock.verify(x => x.appendLine(TypeMoq.It.isAny()), TypeMoq.Times.atLeastOnce());
describe('executeCommand', function(): void {
[[], ['test']].forEach(args => {
it(`Output channel is used with ${JSON.stringify(args)} args`, async function (): Promise<void> {
await executeCommand('echo', args, outputChannelMock.object);
outputChannelMock.verify(x => x.appendLine(TypeMoq.It.isAny()), TypeMoq.Times.atLeastOnce());
});
});
it('Gets expected output', async function (): Promise<void> {
const echoOutput = 'test';
const output = await executeCommand('echo', [echoOutput], outputChannelMock.object);
should(output.stdout).equal(echoOutput);
});
it('Invalid command errors', async function (): Promise<void> {
await should(executeCommand('invalid_command', [], outputChannelMock.object)).be.rejected();
}); });
}); });
it('Gets expected output', async function (): Promise<void> { describe('executeSudoCommand', function(): void {
const echoOutput = 'test'; it('Gets expected stdout output', async function (): Promise<void> {
const output = await executeCommand('echo', [echoOutput], outputChannelMock.object); const stdout = 'stdout output';
should(output.stdout).equal(echoOutput); sinon.stub(sudo, 'exec').callsFake( (_cmd, _options, callback) => {
callback!(undefined, stdout);
});
const result = await executeSudoCommand('echo', outputChannelMock.object);
should(result.stdout).equal(stdout);
should(result.stderr).equal('');
});
it('Gets expected stderr output', async function (): Promise<void> {
const stderr = 'stderr output';
sinon.stub(sudo, 'exec').callsFake( (_cmd, _options, callback) => {
callback!(undefined, undefined, stderr);
});
const result = await executeSudoCommand('echo', outputChannelMock.object);
should(result.stdout).equal('');
should(result.stderr).equal(stderr);
});
it('Error rejects', async function (): Promise<void> {
sinon.stub(sudo, 'exec').callsFake( (_cmd, _options, callback) => {
callback!(new Error('error'));
});
await should(executeSudoCommand('invalid_command', outputChannelMock.object)).be.rejected();
});
}); });
it('Invalid command errors', async function (): Promise<void> {
await should(executeCommand('invalid_command', [], outputChannelMock.object)).be.rejected();
});
}); });