mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Fix bug where failed OE expands could not be retried (#2780)
This commit is contained in:
@@ -350,7 +350,9 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public resolveTreeNodeChildren(session: sqlops.ObjectExplorerSession, parentTree: TreeNode): Thenable<TreeNode[]> {
|
public resolveTreeNodeChildren(session: sqlops.ObjectExplorerSession, parentTree: TreeNode): Thenable<TreeNode[]> {
|
||||||
return this.expandOrRefreshTreeNode(session, parentTree);
|
// Always refresh the node if it has an error, otherwise expand it normally
|
||||||
|
let needsRefresh = !!parentTree.errorStateMessage;
|
||||||
|
return this.expandOrRefreshTreeNode(session, parentTree, needsRefresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
public refreshTreeNode(session: sqlops.ObjectExplorerSession, parentTree: TreeNode): Thenable<TreeNode[]> {
|
public refreshTreeNode(session: sqlops.ObjectExplorerSession, parentTree: TreeNode): Thenable<TreeNode[]> {
|
||||||
|
|||||||
@@ -753,4 +753,21 @@ suite('SQL Object Explorer Service tests', () => {
|
|||||||
assert.equal(childNode.nodePath, objectExplorerExpandInfoRefresh.nodes[index].nodePath);
|
assert.equal(childNode.nodePath, objectExplorerExpandInfoRefresh.nodes[index].nodePath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('resolveTreeNodeChildren refreshes a node if it currently has an error', async () => {
|
||||||
|
await objectExplorerService.createNewSession('MSSQL', connection);
|
||||||
|
objectExplorerService.onSessionCreated(1, objectExplorerSession);
|
||||||
|
|
||||||
|
// If I call resolveTreeNodeChildren once, set an error on the node, and then call it again
|
||||||
|
let tablesNodePath = 'testServerName/tables';
|
||||||
|
let tablesNode = new TreeNode(NodeType.Folder, 'Tables', false, tablesNodePath, '', '', null, null, undefined, undefined);
|
||||||
|
tablesNode.connection = connection;
|
||||||
|
await objectExplorerService.resolveTreeNodeChildren(objectExplorerSession, tablesNode);
|
||||||
|
sqlOEProvider.verify(x => x.refreshNode(TypeMoq.It.is(x => x.nodePath === tablesNodePath)), TypeMoq.Times.never());
|
||||||
|
tablesNode.errorStateMessage = 'test error message';
|
||||||
|
await objectExplorerService.resolveTreeNodeChildren(objectExplorerSession, tablesNode);
|
||||||
|
|
||||||
|
// Then refresh gets called on the node
|
||||||
|
sqlOEProvider.verify(x => x.refreshNode(TypeMoq.It.is(x => x.nodePath === tablesNodePath)), TypeMoq.Times.once());
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -361,12 +361,6 @@ export class Item {
|
|||||||
return WinJS.TPromise.as(false);
|
return WinJS.TPromise.as(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}} - Original code does not handle the need to refresh children in case previous refreshchildren errored out.
|
|
||||||
// resetting the errorStateMessage before we refresh children so we can track if there has been error in processing.
|
|
||||||
if (this.element instanceof TreeNode) {
|
|
||||||
this.element.errorStateMessage = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = this.lock.run(this, () => {
|
var result = this.lock.run(this, () => {
|
||||||
var eventData: IItemExpandEvent = { item: this };
|
var eventData: IItemExpandEvent = { item: this };
|
||||||
var result: WinJS.Promise;
|
var result: WinJS.Promise;
|
||||||
|
|||||||
Reference in New Issue
Block a user