mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Simplify IAzureResourceTreeDataProvider (#20591)
This commit is contained in:
@@ -60,21 +60,16 @@ export class AzureMonitorTreeDataProvider extends ResourceTreeDataProviderBase<a
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: AzureMonitorTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: AzureMonitorTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: AzureMonitorTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: AzureMonitorTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,21 +59,16 @@ export class CosmosDbMongoTreeDataProvider extends ResourceTreeDataProviderBase<
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<azdata.TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: CosmosDbMongoTreeDataProvider.CONTAINER_ID,
|
||||||
subscription: undefined,
|
label: CosmosDbMongoTreeDataProvider.CONTAINER_LABEL,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: CosmosDbMongoTreeDataProvider.CONTAINER_ID,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: CosmosDbMongoTreeDataProvider.CONTAINER_LABEL,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,21 +59,16 @@ export class AzureResourceDatabaseTreeDataProvider extends ResourceTreeDataProvi
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: AzureResourceDatabaseTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: AzureResourceDatabaseTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: AzureResourceDatabaseTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: AzureResourceDatabaseTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,21 +60,16 @@ export class AzureResourceDatabaseServerTreeDataProvider extends ResourceTreeDat
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: AzureResourceDatabaseServerTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: AzureResourceDatabaseServerTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: AzureResourceDatabaseServerTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: AzureResourceDatabaseServerTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,21 +60,16 @@ export class KustoTreeDataProvider extends ResourceTreeDataProviderBase<azureRes
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: KustoTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: KustoTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: KustoTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: KustoTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,21 +61,16 @@ export class MysqlFlexibleServerTreeDataProvider extends ResourceTreeDataProvide
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: MysqlFlexibleServerTreeDataProvider.CONTAINER_ID,
|
||||||
subscription: undefined,
|
label: MysqlFlexibleServerTreeDataProvider.CONTAINER_LABEL,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: MysqlFlexibleServerTreeDataProvider.CONTAINER_ID,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: MysqlFlexibleServerTreeDataProvider.CONTAINER_LABEL,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,21 +63,16 @@ export class PostgresServerArcTreeDataProvider extends ResourceTreeDataProviderB
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: PostgresServerArcTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: PostgresServerArcTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: PostgresServerArcTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: PostgresServerArcTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,21 +63,16 @@ export class PostgresServerTreeDataProvider extends ResourceTreeDataProviderBase
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: PostgresServerTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: PostgresServerTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: PostgresServerTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: PostgresServerTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,16 +17,12 @@ export abstract class ResourceTreeDataProviderBase<T extends azureResource.Azure
|
|||||||
public constructor(protected _resourceService: IAzureResourceService<T>) {
|
public constructor(protected _resourceService: IAzureResourceService<T>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public getTreeItem(element: azureResource.IAzureResourceNode): azdata.TreeItem | Thenable<azdata.TreeItem> {
|
public async getResourceTreeItem(element: azureResource.IAzureResourceNode): Promise<azdata.TreeItem> {
|
||||||
return element.treeItem;
|
return element.treeItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getChildren(element?: azureResource.IAzureResourceNode): Promise<azureResource.IAzureResourceNode[]> {
|
public async getChildren(element: azureResource.IAzureResourceNode): Promise<azureResource.IAzureResourceNode[]> {
|
||||||
try {
|
try {
|
||||||
if (!element) {
|
|
||||||
return [this.createContainerNode()];
|
|
||||||
}
|
|
||||||
|
|
||||||
let resources: T[] = await this.getResources(element);
|
let resources: T[] = await this.getResources(element);
|
||||||
|
|
||||||
return resources.map((resource) => <azureResource.IAzureResourceNode>{
|
return resources.map((resource) => <azureResource.IAzureResourceNode>{
|
||||||
@@ -51,7 +47,7 @@ export abstract class ResourceTreeDataProviderBase<T extends azureResource.Azure
|
|||||||
|
|
||||||
protected abstract getTreeItemForResource(resource: T, account: AzureAccount): azdata.TreeItem;
|
protected abstract getTreeItemForResource(resource: T, account: AzureAccount): azdata.TreeItem;
|
||||||
|
|
||||||
protected abstract createContainerNode(): azureResource.IAzureResourceNode;
|
public abstract getRootChildren(): Promise<azdata.TreeItem[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GraphData {
|
export interface GraphData {
|
||||||
|
|||||||
@@ -60,21 +60,16 @@ export class SqlInstanceTreeDataProvider extends ResourceTreeDataProviderBase<az
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: SqlInstanceTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: SqlInstanceTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: SqlInstanceTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: SqlInstanceTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,21 +60,16 @@ export class SqlInstanceArcTreeDataProvider extends ResourceTreeDataProviderBase
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createContainerNode(): azureResource.IAzureResourceNode {
|
public async getRootChildren(): Promise<TreeItem[]> {
|
||||||
return {
|
return [{
|
||||||
account: undefined,
|
id: SqlInstanceArcTreeDataProvider.containerId,
|
||||||
subscription: undefined,
|
label: SqlInstanceArcTreeDataProvider.containerLabel,
|
||||||
tenantId: undefined,
|
iconPath: {
|
||||||
treeItem: {
|
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||||
id: SqlInstanceArcTreeDataProvider.containerId,
|
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||||
label: SqlInstanceArcTreeDataProvider.containerLabel,
|
},
|
||||||
iconPath: {
|
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
contextValue: AzureResourceItemType.databaseServerContainer
|
||||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
}];
|
||||||
},
|
|
||||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
|
||||||
contextValue: AzureResourceItemType.databaseServerContainer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export class AzureResourceService {
|
|||||||
this._areResourceProvidersLoaded = false;
|
this._areResourceProvidersLoaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getRootChildren(resourceProviderId: string, account: AzureAccount, subscription: azureResource.AzureResourceSubscription, tenatId: string): Promise<IAzureResourceNodeWithProviderId[]> {
|
public async getRootChildren(resourceProviderId: string, account: AzureAccount, subscription: azureResource.AzureResourceSubscription, tenantId: string): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||||
await this.ensureResourceProvidersRegistered();
|
await this.ensureResourceProvidersRegistered();
|
||||||
|
|
||||||
if (!(resourceProviderId in this._resourceProviders)) {
|
if (!(resourceProviderId in this._resourceProviders)) {
|
||||||
@@ -40,16 +40,18 @@ export class AzureResourceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||||
const children = await treeDataProvider.getChildren();
|
const rootChildren = await treeDataProvider.getRootChildren();
|
||||||
|
|
||||||
return children.map((child) => <IAzureResourceNodeWithProviderId>{
|
return rootChildren.map(rootChild => {
|
||||||
resourceProviderId: resourceProviderId,
|
return {
|
||||||
resourceNode: <azureResource.IAzureResourceNode>{
|
resourceProviderId,
|
||||||
account: account,
|
resourceNode: {
|
||||||
subscription: subscription,
|
account,
|
||||||
tenantId: tenatId,
|
subscription,
|
||||||
treeItem: child.treeItem
|
tenantId,
|
||||||
}
|
treeItem: rootChild
|
||||||
|
}
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +72,7 @@ export class AzureResourceService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getTreeItem(resourceProviderId: string, element?: azureResource.IAzureResourceNode): Promise<TreeItem> {
|
public async getTreeItem(resourceProviderId: string, element: azureResource.IAzureResourceNode): Promise<TreeItem> {
|
||||||
await this.ensureResourceProvidersRegistered();
|
await this.ensureResourceProvidersRegistered();
|
||||||
|
|
||||||
if (!(resourceProviderId in this._resourceProviders)) {
|
if (!(resourceProviderId in this._resourceProviders)) {
|
||||||
@@ -78,7 +80,7 @@ export class AzureResourceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||||
return treeDataProvider.getTreeItem(element);
|
return treeDataProvider.getResourceTreeItem(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
public get areResourceProvidersLoaded(): boolean {
|
public get areResourceProvidersLoaded(): boolean {
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ export class AzureResourceSubscriptionTreeNode extends AzureResourceContainerTre
|
|||||||
public constructor(
|
public constructor(
|
||||||
public readonly account: AzureAccount,
|
public readonly account: AzureAccount,
|
||||||
public readonly subscription: azureResource.AzureResourceSubscription,
|
public readonly subscription: azureResource.AzureResourceSubscription,
|
||||||
public readonly tenatId: string,
|
public readonly tenantId: string,
|
||||||
appContext: AppContext,
|
appContext: AppContext,
|
||||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||||
parent: TreeNode
|
parent: TreeNode
|
||||||
) {
|
) {
|
||||||
super(appContext, treeChangeHandler, parent);
|
super(appContext, treeChangeHandler, parent);
|
||||||
|
|
||||||
this._id = `account_${this.account.key.accountId}.subscription_${this.subscription.id}.tenant_${this.tenatId}`;
|
this._id = `account_${this.account.key.accountId}.subscription_${this.subscription.id}.tenant_${this.tenantId}`;
|
||||||
this.setCacheKey(`${this._id}.resources`);
|
this.setCacheKey(`${this._id}.resources`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ export class AzureResourceSubscriptionTreeNode extends AzureResourceContainerTre
|
|||||||
const children: IAzureResourceNodeWithProviderId[] = [];
|
const children: IAzureResourceNodeWithProviderId[] = [];
|
||||||
|
|
||||||
for (const resourceProviderId of await resourceService.listResourceProviderIds()) {
|
for (const resourceProviderId of await resourceService.listResourceProviderIds()) {
|
||||||
children.push(...await resourceService.getRootChildren(resourceProviderId, this.account, this.subscription, this.tenatId));
|
children.push(...await resourceService.getRootChildren(resourceProviderId, this.account, this.subscription, this.tenantId));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (children.length === 0) {
|
if (children.length === 0) {
|
||||||
|
|||||||
17
extensions/azurecore/src/azurecore.d.ts
vendored
17
extensions/azurecore/src/azurecore.d.ts
vendored
@@ -355,7 +355,22 @@ declare module 'azurecore' {
|
|||||||
getTreeDataProvider(): IAzureResourceTreeDataProvider;
|
getTreeDataProvider(): IAzureResourceTreeDataProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IAzureResourceTreeDataProvider extends TreeDataProvider<IAzureResourceNode> {
|
export interface IAzureResourceTreeDataProvider {
|
||||||
|
/**
|
||||||
|
* Gets the root tree item nodes for this provider - these will be used as
|
||||||
|
* direct children of the Account node in the Azure tree view.
|
||||||
|
*/
|
||||||
|
getRootChildren(): Promise<azdata.TreeItem[]>;
|
||||||
|
/**
|
||||||
|
* Gets the children for a given {@link IAzureResourceNode}
|
||||||
|
* @param element The parent node to get the children for
|
||||||
|
*/
|
||||||
|
getChildren(element: IAzureResourceNode): Promise<IAzureResourceNode[]>;
|
||||||
|
/**
|
||||||
|
* Gets the tree item to display for a given {@link IAzureResourceNode}
|
||||||
|
* @param element The resource node to get the TreeItem for
|
||||||
|
*/
|
||||||
|
getResourceTreeItem(element: IAzureResourceNode): Promise<azdata.TreeItem>;
|
||||||
browseConnectionMode: boolean;
|
browseConnectionMode: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ describe('AzureResourceDatabaseTreeDataProvider.info', function (): void {
|
|||||||
it('Should be correct when created.', async function (): Promise<void> {
|
it('Should be correct when created.', async function (): Promise<void> {
|
||||||
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockExtensionContext.object);
|
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockExtensionContext.object);
|
||||||
|
|
||||||
const treeItem = await treeDataProvider.getTreeItem(mockResourceRootNode);
|
const treeItem = await treeDataProvider.getResourceTreeItem(mockResourceRootNode);
|
||||||
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
||||||
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
||||||
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
||||||
@@ -129,19 +129,16 @@ describe('AzureResourceDatabaseTreeDataProvider.getChildren', function (): void
|
|||||||
it('Should return container node when element is undefined.', async function (): Promise<void> {
|
it('Should return container node when element is undefined.', async function (): Promise<void> {
|
||||||
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockExtensionContext.object);
|
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockExtensionContext.object);
|
||||||
|
|
||||||
const children = await treeDataProvider.getChildren();
|
const children = await treeDataProvider.getRootChildren();
|
||||||
|
|
||||||
should(children).Array();
|
should(children).Array();
|
||||||
should(children.length).equal(1);
|
should(children.length).equal(1);
|
||||||
|
|
||||||
const child = children[0];
|
const child = children[0];
|
||||||
should(child.account).undefined();
|
should(child.id).equal('azure.resource.providers.database.treeDataProvider.databaseContainer');
|
||||||
should(child.subscription).undefined();
|
should(child.label).equal('SQL database');
|
||||||
should(child.tenantId).undefined();
|
should(child.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||||
should(child.treeItem.id).equal('azure.resource.providers.database.treeDataProvider.databaseContainer');
|
should(child.contextValue).equal('azure.resource.itemType.databaseContainer');
|
||||||
should(child.treeItem.label).equal('SQL database');
|
|
||||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
|
||||||
should(child.treeItem.contextValue).equal('azure.resource.itemType.databaseContainer');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should return resource nodes when it is container node.', async function (): Promise<void> {
|
it('Should return resource nodes when it is container node.', async function (): Promise<void> {
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ describe('AzureResourceDatabaseServerTreeDataProvider.info', function (): void {
|
|||||||
it('Should be correct when created.', async function (): Promise<void> {
|
it('Should be correct when created.', async function (): Promise<void> {
|
||||||
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockExtensionContext.object);
|
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockExtensionContext.object);
|
||||||
|
|
||||||
const treeItem = await treeDataProvider.getTreeItem(mockResourceRootNode);
|
const treeItem = await treeDataProvider.getResourceTreeItem(mockResourceRootNode);
|
||||||
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
||||||
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
||||||
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
||||||
@@ -128,19 +128,16 @@ describe('AzureResourceDatabaseServerTreeDataProvider.getChildren', function ():
|
|||||||
it('Should return container node when element is undefined.', async function (): Promise<void> {
|
it('Should return container node when element is undefined.', async function (): Promise<void> {
|
||||||
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockExtensionContext.object);
|
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockExtensionContext.object);
|
||||||
|
|
||||||
const children = await treeDataProvider.getChildren();
|
const children = await treeDataProvider.getRootChildren();
|
||||||
|
|
||||||
should(children).Array();
|
should(children).Array();
|
||||||
should(children.length).equal(1);
|
should(children.length).equal(1);
|
||||||
|
|
||||||
const child = children[0];
|
const child = children[0];
|
||||||
should(child.account).undefined();
|
should(child.id).equal('azure.resource.providers.databaseServer.treeDataProvider.databaseServerContainer');
|
||||||
should(child.subscription).undefined();
|
should(child.label).equal('SQL server');
|
||||||
should(child.tenantId).undefined();
|
should(child.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||||
should(child.treeItem.id).equal('azure.resource.providers.databaseServer.treeDataProvider.databaseServerContainer');
|
should(child.contextValue).equal('azure.resource.itemType.databaseServerContainer');
|
||||||
should(child.treeItem.label).equal('SQL server');
|
|
||||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
|
||||||
should(child.treeItem.contextValue).equal('azure.resource.itemType.databaseServerContainer');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should return resource nodes when it is container node.', async function (): Promise<void> {
|
it('Should return resource nodes when it is container node.', async function (): Promise<void> {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import * as should from 'should';
|
|||||||
import * as TypeMoq from 'typemoq';
|
import * as TypeMoq from 'typemoq';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import { fail } from 'assert';
|
import { fail } from 'assert';
|
||||||
|
import * as azdata from 'azdata';
|
||||||
|
|
||||||
import { AzureResourceService } from '../../azureResource/resourceService';
|
import { AzureResourceService } from '../../azureResource/resourceService';
|
||||||
import { AzureAccount, azureResource } from 'azurecore';
|
import { AzureAccount, azureResource } from 'azurecore';
|
||||||
@@ -52,15 +53,15 @@ let resourceService: AzureResourceService;
|
|||||||
describe('AzureResourceService.listResourceProviderIds', function(): void {
|
describe('AzureResourceService.listResourceProviderIds', function(): void {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
|
|
||||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider2.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider2.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||||
@@ -89,8 +90,8 @@ describe('AzureResourceService.listResourceProviderIds', function(): void {
|
|||||||
describe('AzureResourceService.getRootChildren', function(): void {
|
describe('AzureResourceService.getRootChildren', function(): void {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
@@ -122,9 +123,9 @@ describe('AzureResourceService.getRootChildren', function(): void {
|
|||||||
describe('AzureResourceService.getChildren', function(): void {
|
describe('AzureResourceService.getChildren', function(): void {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
@@ -155,9 +156,9 @@ describe('AzureResourceService.getChildren', function(): void {
|
|||||||
describe('AzureResourceService.getTreeItem', function(): void {
|
describe('AzureResourceService.getTreeItem', function(): void {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ let appContext: AppContext;
|
|||||||
describe('AzureResourceResourceTreeNode.info', function (): void {
|
describe('AzureResourceResourceTreeNode.info', function (): void {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockResourceTreeDataProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider.setup((o) => o.getTreeItem(mockResourceRootNode)).returns(() => mockResourceRootNode.treeItem);
|
mockResourceTreeDataProvider.setup((o) => o.getResourceTreeItem(mockResourceRootNode)).returns(() => Promise.resolve(mockResourceRootNode.treeItem));
|
||||||
mockResourceTreeDataProvider.setup((o) => o.getChildren(mockResourceRootNode)).returns(() => Promise.resolve(mockResourceNodes));
|
mockResourceTreeDataProvider.setup((o) => o.getChildren(mockResourceRootNode)).returns(() => Promise.resolve(mockResourceNodes));
|
||||||
|
|
||||||
mockResourceProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
@@ -190,7 +190,7 @@ describe('AzureResourceResourceTreeNode.getChildren', function (): void {
|
|||||||
|
|
||||||
const children = await resourceTreeNode.getChildren();
|
const children = await resourceTreeNode.getChildren();
|
||||||
|
|
||||||
mockResourceTreeDataProvider.verify((o) => o.getChildren(), TypeMoq.Times.exactly(0));
|
mockResourceTreeDataProvider.verify((o) => o.getRootChildren(), TypeMoq.Times.exactly(0));
|
||||||
|
|
||||||
should(children).Array();
|
should(children).Array();
|
||||||
should(children.length).equal(0);
|
should(children.length).equal(0);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
import * as should from 'should';
|
import * as should from 'should';
|
||||||
import * as TypeMoq from 'typemoq';
|
import * as TypeMoq from 'typemoq';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
import * as azdata from 'azdata';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import { AppContext } from '../../../appContext';
|
import { AppContext } from '../../../appContext';
|
||||||
|
|
||||||
@@ -69,15 +70,15 @@ describe('AzureResourceSubscriptionTreeNode.info', function(): void {
|
|||||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||||
|
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((x: any) => x.then).returns(() => undefined);
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
|
|
||||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider2.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azdata.TreeItem>().object]));
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider2.setup((x: any) => x.then).returns(() => undefined);
|
||||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||||
@@ -121,15 +122,16 @@ describe('AzureResourceSubscriptionTreeNode.getChildren', function(): void {
|
|||||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||||
|
|
||||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider1.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([{ label: 'Item1'}] as azdata.TreeItem[]));
|
||||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider1.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
|
|
||||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||||
|
|
||||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
mockResourceTreeDataProvider2.setup((o) => o.getRootChildren()).returns(() => Promise.resolve([{ label: 'Item2' }] as azdata.TreeItem[]));
|
||||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
mockResourceTreeDataProvider2.setup((o) => o.getResourceTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||||
@@ -149,14 +151,14 @@ describe('AzureResourceSubscriptionTreeNode.getChildren', function(): void {
|
|||||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, appContext, mockTreeChangeHandler.object, undefined);
|
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, appContext, mockTreeChangeHandler.object, undefined);
|
||||||
const children = await subscriptionTreeNode.getChildren();
|
const children = await subscriptionTreeNode.getChildren();
|
||||||
|
|
||||||
mockResourceTreeDataProvider1.verify((o) => o.getChildren(), TypeMoq.Times.once());
|
mockResourceTreeDataProvider1.verify((o) => o.getRootChildren(), TypeMoq.Times.once());
|
||||||
|
|
||||||
mockResourceTreeDataProvider2.verify((o) => o.getChildren(), TypeMoq.Times.once());
|
mockResourceTreeDataProvider2.verify((o) => o.getRootChildren(), TypeMoq.Times.once());
|
||||||
|
|
||||||
const expectedChildren = await resourceService.listResourceProviderIds();
|
const expectedResourceProviderIds = await resourceService.listResourceProviderIds();
|
||||||
|
|
||||||
should(children).Array();
|
should(children).Array();
|
||||||
should(children.length).equal(expectedChildren.length);
|
should(children.length).equal(expectedResourceProviderIds.length, 'There should be one child for each resource provider');
|
||||||
for (const child of children) {
|
for (const child of children) {
|
||||||
should(child).instanceOf(AzureResourceResourceTreeNode);
|
should(child).instanceOf(AzureResourceResourceTreeNode);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user