diff --git a/public/app/core/components/org_switcher.ts b/public/app/core/components/org_switcher.ts index 41992f0b94f..68e91bb8dcb 100644 --- a/public/app/core/components/org_switcher.ts +++ b/public/app/core/components/org_switcher.ts @@ -61,10 +61,19 @@ export class OrgSwitchCtrl { } setUsingOrg(org) { - this.backendSrv.post('/api/user/using/' + org.orgId).then(() => { - window.location.href = window.location.href; + return this.backendSrv.post('/api/user/using/' + org.orgId).then(() => { + const re = /orgId=\d+/gi; + this.setWindowLocationHref(this.getWindowLocationHref().replace(re, 'orgId=' + org.orgId)); }); } + + getWindowLocationHref() { + return window.location.href; + } + + setWindowLocationHref(href: string) { + window.location.href = href; + } } export function orgSwitcher() { diff --git a/public/app/core/specs/org_switcher.jest.ts b/public/app/core/specs/org_switcher.jest.ts new file mode 100644 index 00000000000..eaa9031b15b --- /dev/null +++ b/public/app/core/specs/org_switcher.jest.ts @@ -0,0 +1,38 @@ +import {OrgSwitchCtrl} from '../components/org_switcher'; +import q from 'q'; + +jest.mock('app/core/services/context_srv', () => ({ + contextSrv: { + user: {orgId: 1} + } +})); + +describe('OrgSwitcher', () => { + describe('when switching org', () => { + let expectedHref; + let expectedUsingUrl; + + beforeEach(() => { + + const backendSrvStub: any = { + get: (url) => { return q.resolve([]); }, + post: (url) => { expectedUsingUrl = url; return q.resolve({}); } + }; + + const orgSwitcherCtrl = new OrgSwitchCtrl(backendSrvStub); + + orgSwitcherCtrl.getWindowLocationHref = () => 'http://localhost:3000?orgId=1'; + orgSwitcherCtrl.setWindowLocationHref = (href) => expectedHref = href; + + return orgSwitcherCtrl.setUsingOrg({orgId: 2}); + }); + + it('should switch orgId in call to backend', () => { + expect(expectedUsingUrl).toBe('/api/user/using/2'); + }); + + it('should switch orgId in url', () => { + expect(expectedHref).toBe('http://localhost:3000?orgId=2'); + }); + }); +});