Notebooks: Only have One Connection in Attach To Dropdown (#8582)

* Have only one connection in attach to dropdown

* LGTM fixes

* Test fixes not unnecessarily changing context 2x

* PR Feedback
This commit is contained in:
Chris LaFreniere
2019-12-08 11:03:51 -08:00
committed by GitHub
parent de177c0335
commit 62565e0577
11 changed files with 94 additions and 321 deletions

View File

@@ -5,14 +5,12 @@
import * as TypeMoq from 'typemoq';
import * as assert from 'assert';
import { nb } from 'azdata';
import { NotebookContexts } from 'sql/workbench/contrib/notebook/browser/models/notebookContexts';
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
import { TestConnectionManagementService } from 'sql/platform/connection/test/common/testConnectionManagementService';
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
import { TestCapabilitiesService } from 'sql/platform/capabilities/test/common/testCapabilitiesService';
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
import { IDefaultConnection } from 'sql/workbench/contrib/notebook/browser/models/modelInterfaces';
suite('Notebook Contexts', function (): void {
const defaultContext = NotebookContexts.DefaultContext;
@@ -40,90 +38,28 @@ suite('Notebook Contexts', function (): void {
const connService: TypeMoq.Mock<IConnectionManagementService>
= TypeMoq.Mock.ofType<IConnectionManagementService>(TestConnectionManagementService, TypeMoq.MockBehavior.Strict);
// No kernel or profile info provided
let conns = NotebookContexts.getContextsForKernel(connService.object, [mssqlProviderName]);
assert.deepStrictEqual(conns, defaultContext);
// No profile info provided
let conns = NotebookContexts.getContextForKernel(undefined, [mssqlProviderName]);
assert.deepStrictEqual(conns, defaultContext, 'Contexts not the same when no profile info passed in');
// No Profile, Kernels are the same
let kernelChangeArgs = <nb.IKernelChangedArgs>{
oldValue: <nb.IKernel>{
id: '1',
name: 'TestKernel'
},
newValue: <nb.IKernel>{
id: '1',
name: 'TestKernel'
}
};
conns = NotebookContexts.getContextsForKernel(connService.object, [mssqlProviderName], kernelChangeArgs);
assert.deepStrictEqual(conns, defaultContext);
// Kernel Info and Profile, but no provider IDs
// Profile, but no provider IDs
let testConn = createTestConnProfile();
conns = NotebookContexts.getContextsForKernel(connService.object, [], kernelChangeArgs, testConn);
assert.deepStrictEqual(conns, defaultContext);
conns = NotebookContexts.getContextForKernel(testConn, []);
assert.deepStrictEqual(conns, localContext, 'Contexts not the same when no provider ids passed in');
// Normal use case
connService.setup(c => c.getActiveConnections()).returns(() => [testConn]);
conns = NotebookContexts.getContextsForKernel(connService.object, [mssqlProviderName], kernelChangeArgs, testConn);
assert.deepStrictEqual(conns, <IDefaultConnection>{
otherConnections: [testConn],
defaultConnection: testConn
});
});
conns = NotebookContexts.getContextForKernel(testConn, [mssqlProviderName]);
assert.deepStrictEqual(conns, testConn, 'Contexts not the same when testing mssql provider connections');
test('Get Active Contexts', async function (): Promise<void> {
const connService: TypeMoq.Mock<IConnectionManagementService>
= TypeMoq.Mock.ofType<IConnectionManagementService>(TestConnectionManagementService, TypeMoq.MockBehavior.Strict);
let testConn = createTestConnProfile();
// No provider IDs
// Multiple provider IDs including mssql
connService.setup(c => c.getActiveConnections()).returns(() => [testConn]);
let conns = NotebookContexts.getActiveContexts(connService.object, [], testConn);
assert.deepStrictEqual(conns, localContext);
conns = NotebookContexts.getContextForKernel(testConn, [mssqlProviderName, 'fakeProvider']);
assert.deepStrictEqual(conns, testConn, 'Contexts not the same when multiple providers passed in');
// No connections
connService.setup(c => c.getActiveConnections()).returns(() => []);
conns = NotebookContexts.getActiveContexts(connService.object, [mssqlProviderName], testConn);
assert.deepStrictEqual(conns, defaultContext);
// No valid connection IDs
testConn.id = '-1';
// Connection provider IDs do not match
connService.setup(c => c.getActiveConnections()).returns(() => [testConn]);
conns = NotebookContexts.getActiveContexts(connService.object, [mssqlProviderName], testConn);
assert.deepStrictEqual(conns, defaultContext);
// No matching provider IDs
testConn.id = 'testId';
connService.setup(c => c.getActiveConnections()).returns(() => [testConn]);
conns = NotebookContexts.getActiveContexts(connService.object, ['notARealProvider'], testConn);
assert.deepStrictEqual(conns, defaultContext);
// Normal behavior, valid connection present
connService.setup(c => c.getActiveConnections()).returns(() => [testConn]);
conns = NotebookContexts.getActiveContexts(connService.object, [mssqlProviderName], testConn);
assert.deepStrictEqual(conns, <IDefaultConnection>{
otherConnections: [testConn],
defaultConnection: testConn
});
// Multiple active connections
let newTestConn = createTestConnProfile();
newTestConn.serverName = 'otherTestServerName';
connService.setup(c => c.getActiveConnections()).returns(() => [newTestConn, testConn]);
conns = NotebookContexts.getActiveContexts(connService.object, [mssqlProviderName], testConn);
assert.deepStrictEqual(conns, <IDefaultConnection>{
otherConnections: [newTestConn, testConn],
defaultConnection: testConn
});
// Multiple connections, no profile provided
connService.setup(c => c.getActiveConnections()).returns(() => [newTestConn, testConn]);
conns = NotebookContexts.getActiveContexts(connService.object, [mssqlProviderName], undefined);
assert.deepStrictEqual(conns, <IDefaultConnection>{
otherConnections: [newTestConn, testConn],
defaultConnection: newTestConn
});
conns = NotebookContexts.getContextForKernel(testConn, ['fakeProvider']);
assert.deepStrictEqual(conns, defaultContext, 'Contexts not the same when provider ids do not match');
});
});

View File

@@ -6,13 +6,14 @@
import { nb, IConnectionProfile } from 'azdata';
import { Event, Emitter } from 'vs/base/common/event';
import { INotebookModel, ICellModel, IClientSession, IDefaultConnection, NotebookContentChange, IKernelPreference } from 'sql/workbench/contrib/notebook/browser/models/modelInterfaces';
import { INotebookModel, ICellModel, IClientSession, NotebookContentChange, IKernelPreference } from 'sql/workbench/contrib/notebook/browser/models/modelInterfaces';
import { NotebookChangeType, CellType } from 'sql/workbench/contrib/notebook/common/models/contracts';
import { INotebookManager, INotebookService, INotebookEditor, ILanguageMagic, INotebookProvider, INavigationProvider } from 'sql/workbench/services/notebook/browser/notebookService';
import { ISingleNotebookEditOperation } from 'sql/workbench/api/common/sqlExtHostTypes';
import { IStandardKernelWithProvider } from 'sql/workbench/contrib/notebook/browser/models/notebookUtils';
import { URI } from 'vs/workbench/workbench.web.api';
import { RenderMimeRegistry } from 'sql/workbench/contrib/notebook/browser/outputs/registry';
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
export class NotebookModelStub implements INotebookModel {
constructor(private _languageInfo?: nb.ILanguageInfo) {
@@ -63,7 +64,7 @@ export class NotebookModelStub implements INotebookModel {
get specs(): nb.IAllKernels {
throw new Error('method not implemented.');
}
get contexts(): IDefaultConnection {
get context(): ConnectionProfile {
throw new Error('method not implemented.');
}
get providerId(): string {