Hide installation options in Configure Python wizard if python is already setup. (#10635)

This commit is contained in:
Cory Rivera
2020-05-29 17:28:02 -07:00
committed by GitHub
parent d1b1550ce5
commit 98ce3c74e6
9 changed files with 393 additions and 162 deletions
+79 -1
View File
@@ -337,6 +337,45 @@ class TestFormContainer extends TestComponentBase implements azdata.FormContaine
}
}
class TestDivContainer extends TestComponentBase implements azdata.DivContainer {
onDidClick: vscode.Event<any>;
items: azdata.Component[] = [];
clearItems(): void {
}
addItems(itemConfigs: azdata.Component[], itemLayout?: azdata.DivItemLayout): void {
}
addItem(component: azdata.Component, itemLayout?: azdata.DivItemLayout): void {
}
insertItem(component: azdata.Component, index: number, itemLayout?: azdata.DivItemLayout): void {
}
removeItem(component: azdata.Component): boolean {
return true;
}
setLayout(layout: azdata.DivLayout): void {
}
setItemLayout(component: azdata.Component, layout: azdata.DivItemLayout): void {
}
}
class TestFlexContainer extends TestComponentBase implements azdata.FlexContainer {
items: azdata.Component[] = [];
clearItems(): void {
}
addItems(itemConfigs: azdata.Component[], itemLayout?: azdata.FlexItemLayout): void {
}
addItem(component: azdata.Component, itemLayout?: azdata.FlexItemLayout): void {
}
insertItem(component: azdata.Component, index: number, itemLayout?: azdata.FlexItemLayout): void {
}
removeItem(component: azdata.Component): boolean {
return true;
}
setLayout(layout: azdata.FlexLayout): void {
}
setItemLayout(component: azdata.Component, layout: azdata.FlexItemLayout): void {
}
}
class TestComponentBuilder<T extends azdata.Component> implements azdata.ComponentBuilder<T> {
constructor(private _component: T) {
}
@@ -383,6 +422,34 @@ export function createViewContext(): TestContext {
withLayout: () => formBuilder
});
let div: azdata.DivContainer = new TestDivContainer();
let divBuilder: azdata.DivBuilder = Object.assign({}, {
component: () => div,
addFormItem: () => { },
insertFormItem: () => { },
removeFormItem: () => true,
addFormItems: () => { },
withFormItems: () => divBuilder,
withProperties: () => divBuilder,
withValidation: () => divBuilder,
withItems: () => divBuilder,
withLayout: () => divBuilder
});
let flex: azdata.FlexContainer = new TestFlexContainer();
let flexBuilder: azdata.FlexBuilder = Object.assign({}, {
component: () => flex,
addFormItem: () => { },
insertFormItem: () => { },
removeFormItem: () => true,
addFormItems: () => { },
withFormItems: () => flexBuilder,
withProperties: () => flexBuilder,
withValidation: () => flexBuilder,
withItems: () => flexBuilder,
withLayout: () => flexBuilder
});
let view: azdata.ModelView = {
onClosed: undefined!,
connection: undefined!,
@@ -398,7 +465,9 @@ export function createViewContext(): TestContext {
dropDown: () => dropdownBuilder,
declarativeTable: () => declarativeTableBuilder,
formContainer: () => formBuilder,
loadingComponent: () => loadingBuilder
loadingComponent: () => loadingBuilder,
divContainer: () => divBuilder,
flexContainer: () => flexBuilder
}
};
@@ -412,4 +481,13 @@ export interface TestContext {
view: azdata.ModelView;
onClick: vscode.EventEmitter<any>;
}
export class TestButton implements azdata.window.Button {
label: string;
enabled: boolean;
hidden: boolean;
constructor(private onClickEmitter: vscode.EventEmitter<void>) {
}
onClick: vscode.Event<void> = this.onClickEmitter.event;
}
//#endregion
@@ -12,7 +12,8 @@ import { ConfigurePathPage } from '../dialog/configurePython/configurePathPage';
import * as should from 'should';
import { PickPackagesPage } from '../dialog/configurePython/pickPackagesPage';
import { python3DisplayName, allKernelsName } from '../common/constants';
import { TestContext, createViewContext } from './common';
import { TestContext, createViewContext, TestButton } from './common';
import { EventEmitter } from 'vscode';
describe('Configure Python Wizard', function () {
let apiWrapper: ApiWrapper = new ApiWrapper();
@@ -23,11 +24,20 @@ describe('Configure Python Wizard', function () {
beforeEach(() => {
let mockInstall = TypeMoq.Mock.ofType(JupyterServerInstallation);
mockInstall.setup(i => i.getInstalledPipPackages(TypeMoq.It.isAnyString())).returns(() => Promise.resolve([]));
mockInstall.setup(i => i.getRequiredPackagesForKernel(TypeMoq.It.isAnyString())).returns(() => [{ name: 'TestPkg', version: '1.0.0'}]);
testInstallation = mockInstall.object;
let mockWizard = TypeMoq.Mock.ofType(ConfigurePythonWizard);
mockWizard.setup(w => w.showErrorMessage(TypeMoq.It.isAnyString()));
testWizard = mockWizard.object;
let mockDoneButton = new TestButton(new EventEmitter<void>());
let mockNextButton = new TestButton(new EventEmitter<void>());
let mockWizard = TypeMoq.Mock.ofType<azdata.window.Wizard>();
mockWizard.setup(w => w.doneButton).returns(() => mockDoneButton);
mockWizard.setup(w => w.nextButton).returns(() => mockNextButton);
let mockPythonWizard = TypeMoq.Mock.ofType(ConfigurePythonWizard);
mockPythonWizard.setup(w => w.showErrorMessage(TypeMoq.It.isAnyString()));
mockPythonWizard.setup(w => w.wizard).returns(() => mockWizard.object);
testWizard = mockPythonWizard.object;
viewContext = createViewContext();
});
@@ -82,6 +92,7 @@ describe('Configure Python Wizard', function () {
// First page, so onPageEnter should do nothing
await should(configurePathPage.onPageEnter()).be.resolved();
should(testWizard.wizard.nextButton.enabled).be.true();
should(await configurePathPage.onPageLeave()).be.true();
should(model.useExistingPython).be.true();
@@ -108,7 +119,8 @@ describe('Configure Python Wizard', function () {
should(await pickPackagesPage.onPageLeave()).be.true();
await should(pickPackagesPage.onPageEnter()).be.resolved();
should(model.packagesToInstall).be.deepEqual(JupyterServerInstallation.getRequiredPackagesForKernel(allKernelsName));
should(testWizard.wizard.doneButton.enabled).be.true();
should(model.packagesToInstall).be.deepEqual(testInstallation.getRequiredPackagesForKernel(allKernelsName));
});
it('Undefined kernel test', async () => {
@@ -128,6 +140,6 @@ describe('Configure Python Wizard', function () {
should((<any>pickPackagesPage).kernelDropdown).not.be.undefined();
await should(pickPackagesPage.onPageEnter()).be.resolved();
should(model.packagesToInstall).be.deepEqual(JupyterServerInstallation.getRequiredPackagesForKernel(python3DisplayName));
should(model.packagesToInstall).be.deepEqual(testInstallation.getRequiredPackagesForKernel(python3DisplayName));
});
});