Even more robust handling of extension tree loading (#9007)

* Even more robust handling of extension tree loading

* Fix initial loading and add new test for CMS

* Fix compile errors

* Fix logic

* Remove debug log statements
This commit is contained in:
Charles Gagnon
2020-02-04 08:03:34 -08:00
committed by GitHub
parent 5a2bbc0375
commit 62df5359e2
4 changed files with 89 additions and 48 deletions

View File

@@ -13,6 +13,7 @@ import { CmsResourceTreeProvider } from '../../../cmsResource/tree/treeProvider'
import { CmsResourceMessageTreeNode } from '../../../cmsResource/messageTreeNode';
import { CmsResourceEmptyTreeNode } from '../../../cmsResource/tree/cmsResourceEmptyTreeNode';
import { CmsUtils } from '../../../cmsUtils';
import { sleep } from '../../utils';
// Mock services
let mockAppContext: AppContext;
@@ -29,22 +30,42 @@ describe('CmsResourceTreeProvider.getChildren', function (): void {
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object, mockCmsUtils.object);
});
it('Should not be initialized.', async function (): Promise<void> {
it('Should be loading while waiting for saved servers to load', async function (): Promise<void> {
const treeProvider = new CmsResourceTreeProvider(mockAppContext);
should.notEqual(treeProvider.isSystemInitialized, true);
// We need to return at least one node so the async loading part is hit
mockCmsUtils.setup(x => x.getSavedServers).returns(() => {
return () => [{name: 'name',
description: 'desc',
ownerUri: 'uri',
connection: undefined}];
});
// Set up so loading the servers doesn't return immediately - thus we'll still have the Loading node
mockCmsUtils.setup(x => x.cacheRegisteredCmsServer).returns(() => {
return async () => { await sleep(600000); return undefined; };
});
should.notEqual(treeProvider.isSystemInitialized, true, 'Expected isSystemInitialized not to be true');
const children = await treeProvider.getChildren(undefined);
should.equal(children.length, 1);
should.equal(children[0].parent, undefined);
should.equal(children[0] instanceof CmsResourceMessageTreeNode, true);
should.equal(children.length, 1, 'Expected exactly one child node');
should.equal(children[0].parent, undefined, 'Expected node to not have a parent');
should.equal(children[0] instanceof CmsResourceMessageTreeNode, true, 'Expected node to be a CmsResourceMessageTreeNode');
});
it('Should be empty resource node when no servers to load', async function (): Promise<void> {
const treeProvider = new CmsResourceTreeProvider(mockAppContext);
should.notEqual(treeProvider.isSystemInitialized, true, 'Expected isSystemInitialized not to be true');
const children = await treeProvider.getChildren(undefined);
should.equal(children.length, 1, 'Expected exactly one child node');
should.equal(children[0].parent, undefined, 'Expected node to not have a parent');
should.equal(children[0] instanceof CmsResourceEmptyTreeNode, true, 'Expected node to be a CmsResourceEmptyTreeNode');
});
it('Should not be loading after initialized.', async function (): Promise<void> {
const treeProvider = new CmsResourceTreeProvider(mockAppContext);
treeProvider.isSystemInitialized = true;
should.equal(true, treeProvider.isSystemInitialized);
should.equal(true, treeProvider.isSystemInitialized, 'Expected isSystemInitialized to be true');
mockCmsUtils.setup(x => x.registeredCmsServers).returns(() => []);
const children = await treeProvider.getChildren(undefined);
should.equal(children[0] instanceof CmsResourceEmptyTreeNode, true);
should.equal(children[0] instanceof CmsResourceEmptyTreeNode, true, 'Expected child node to be CmsResourceEmptyTreeNode');
});
it('Should show CMS nodes if there are cached servers', async function (): Promise<void> {
@@ -59,6 +80,6 @@ describe('CmsResourceTreeProvider.getChildren', function (): void {
}];
});
const children = await treeProvider.getChildren(undefined);
should.equal(children[0] !== null, true);
should.exist(children[0], 'Child node did not exist');
});
});