Add arc tree data provider tests (#12758)

* Add arc tree data provider tests

* Generic ResourceModel

* no message

* undo

* Fix compile error
This commit is contained in:
Charles Gagnon
2020-10-06 11:26:56 -07:00
committed by GitHub
parent 1dea5f8f7b
commit 288288df03
7 changed files with 151 additions and 16 deletions

View File

@@ -135,10 +135,14 @@ export class AzureArcTreeDataProvider implements vscode.TreeDataProvider<TreeNod
if (resourceNode) {
await resourceNode.openDashboard();
} else {
console.log(`Couldn't find resource node for ${name} (${resourceType})`);
const errMsg = `Couldn't find resource node for ${name} (${resourceType})`;
console.log(errMsg);
throw new Error(errMsg);
}
} else {
console.log('Couldn\'t find controller node for opening dashboard');
const errMsg = 'Couldn\'t find controller node for opening dashboard';
console.log(errMsg);
throw new Error(errMsg);
}
}
}

View File

@@ -10,6 +10,7 @@ import * as loc from '../../localizedConstants';
import { ControllerModel, Registration } from '../../models/controllerModel';
import { MiaaModel } from '../../models/miaaModel';
import { PostgresModel } from '../../models/postgresModel';
import { ResourceModel } from '../../models/resourceModel';
import { ControllerDashboard } from '../dashboards/controller/controllerDashboard';
import { AzureArcTreeDataProvider } from './azureArcTreeDataProvider';
import { MiaaTreeNode } from './miaaTreeNode';
@@ -24,7 +25,7 @@ import { TreeNode } from './treeNode';
*/
export class ControllerTreeNode extends TreeNode {
private _children: ResourceTreeNode[] = [];
private _children: ResourceTreeNode<ResourceModel>[] = [];
constructor(public model: ControllerModel, private _context: vscode.ExtensionContext, private _treeDataProvider: AzureArcTreeDataProvider) {
super(model.label, vscode.TreeItemCollapsibleState.Collapsed, ResourceType.dataControllers);
@@ -69,14 +70,14 @@ export class ControllerTreeNode extends TreeNode {
* @param resourceType The resourceType of the node
* @param name The name of the node
*/
public getResourceNode(resourceType: string, name: string): ResourceTreeNode | undefined {
public getResourceNode(resourceType: string, name: string): ResourceTreeNode<ResourceModel> | undefined {
return this._children.find(c =>
c.model?.info.resourceType === resourceType &&
c.model.info.name === name);
}
private updateChildren(registrations: Registration[]): void {
const newChildren: ResourceTreeNode[] = [];
const newChildren: ResourceTreeNode<ResourceModel>[] = [];
registrations.forEach(registration => {
if (!registration.instanceName) {
console.warn('Registration is missing required name value, skipping');

View File

@@ -8,15 +8,15 @@ import * as vscode from 'vscode';
import { ControllerModel } from '../../models/controllerModel';
import { MiaaModel } from '../../models/miaaModel';
import { MiaaDashboard } from '../dashboards/miaa/miaaDashboard';
import { TreeNode } from './treeNode';
import { ResourceTreeNode } from './resourceTreeNode';
/**
* The TreeNode for displaying a SQL Managed Instance on Azure Arc
*/
export class MiaaTreeNode extends TreeNode {
export class MiaaTreeNode extends ResourceTreeNode<MiaaModel> {
constructor(public model: MiaaModel, private _controllerModel: ControllerModel) {
super(model.info.name, vscode.TreeItemCollapsibleState.None, ResourceType.sqlManagedInstances);
constructor(model: MiaaModel, private _controllerModel: ControllerModel) {
super(model.info.name, vscode.TreeItemCollapsibleState.None, ResourceType.sqlManagedInstances, model);
}
public async openDashboard(): Promise<void> {

View File

@@ -13,14 +13,14 @@ import { ResourceTreeNode } from './resourceTreeNode';
/**
* The TreeNode for displaying an Postgres Server group
*/
export class PostgresTreeNode extends ResourceTreeNode {
export class PostgresTreeNode extends ResourceTreeNode<PostgresModel> {
constructor(private _model: PostgresModel, private _controllerModel: ControllerModel, private _context: vscode.ExtensionContext) {
super(_model.info.name, vscode.TreeItemCollapsibleState.None, ResourceType.postgresInstances, _model);
constructor(model: PostgresModel, private _controllerModel: ControllerModel, private _context: vscode.ExtensionContext) {
super(model.info.name, vscode.TreeItemCollapsibleState.None, ResourceType.postgresInstances, model);
}
public async openDashboard(): Promise<void> {
const postgresDashboard = new PostgresDashboard(this._context, this._controllerModel, this._model);
const postgresDashboard = new PostgresDashboard(this._context, this._controllerModel, this.model);
await postgresDashboard.showDashboard();
}
}

View File

@@ -10,8 +10,8 @@ import { TreeNode } from './treeNode';
/**
* A TreeNode belonging to a child of a Controller
*/
export abstract class ResourceTreeNode extends TreeNode {
constructor(label: string, collapsibleState: vscode.TreeItemCollapsibleState, resourceType?: string, public model?: ResourceModel) {
export abstract class ResourceTreeNode<M extends ResourceModel> extends TreeNode {
constructor(label: string, collapsibleState: vscode.TreeItemCollapsibleState, resourceType: string, public model: M) {
super(label, collapsibleState, resourceType);
}
}