diff --git a/workspace-loader/src/index.ts b/workspace-loader/src/index.ts index cec37cc47a..9a62b8d3c5 100644 --- a/workspace-loader/src/index.ts +++ b/workspace-loader/src/index.ts @@ -315,13 +315,13 @@ export class WorkspaceLoader { for (let serverId in servers) { let attributes = servers[serverId].attributes; if (attributes['type'] === 'ide') { - this.openURL(servers[serverId].url); + this.openURL(servers[serverId].url + this.getQueryString()); return; } } } - this.openURL(workspace.links.ide); + this.openURL(workspace.links.ide + this.getQueryString()); }); } diff --git a/workspace-loader/test/test.spec.ts b/workspace-loader/test/test.spec.ts index fbfa3b50e0..2d49eeace0 100644 --- a/workspace-loader/test/test.spec.ts +++ b/workspace-loader/test/test.spec.ts @@ -171,6 +171,36 @@ describe('Workspace Loader', () => { }); }); + describe('must open preconfigured IDE with query parameters', () => { + let ideURL = "ide URL" + let workspaceLoader; + + beforeEach((done) => { + let loader = new Loader(); + workspaceLoader = new WorkspaceLoader(loader); + + spyOn(workspaceLoader, 'getWorkspaceKey').and.returnValue("foo/bar"); + spyOn(workspaceLoader, 'getQueryString').and.returnValue("?param=value"); + + spyOn(workspaceLoader, 'getWorkspace').and.callFake(() => { + return new Promise((resolve) => { + fakeWorkspaceConfig.status = 'RUNNING'; + fakeWorkspaceConfig.runtime = {machines: {ide: {servers: {server1: {attributes: {type: "ide"}, url: ideURL}}}}} + resolve(fakeWorkspaceConfig); + done(); + }); + }); + + spyOn(workspaceLoader, "openIDE").and.callThrough(); + spyOn(workspaceLoader, "openURL"); + workspaceLoader.load(); + }); + + it('must be called', () => { + expect(workspaceLoader.openURL).toHaveBeenCalledWith(ideURL + "?param=value"); + }); + }); + describe('must handle workspace when it has IDE server', () => { let workspaceLoader;