diff --git a/src/login/login.ts b/src/login/login.ts index b93e07f11..183554946 100644 --- a/src/login/login.ts +++ b/src/login/login.ts @@ -1047,10 +1047,15 @@ export function newAppInstance ( * and/or a developer */ export async function getUserRoles (): Promise> { + const currentUser = authn.currentUser() + if (!currentUser) { + return [] + } + try { - const { me, preferencesFile, preferencesFileError } = await ensureLoadedPreferences({}) + const { me, preferencesFile, preferencesFileError } = await ensureLoadedPreferences({ me: currentUser }) if (!preferencesFile || preferencesFileError) { - throw new Error(preferencesFileError) + throw new Error(preferencesFileError || 'Unable to load user preferences file.') } return solidLogicSingleton.store.each( me, diff --git a/test/unit/login/login.test.ts b/test/unit/login/login.test.ts index 455c99de2..ceb14bb46 100644 --- a/test/unit/login/login.test.ts +++ b/test/unit/login/login.test.ts @@ -11,3 +11,29 @@ describe('ensureLoggedIn', () => { expect(testLogin.ensureLoggedIn({})).toBeInstanceOf(Object) }) }) + +describe('getUserRoles', () => { + afterEach(() => { + jest.restoreAllMocks() + jest.resetModules() + }) + + it('returns [] and does not load preferences when current user is missing', async () => { + const solidLogic = require('solid-logic') + + const currentUserSpy = jest + .spyOn(solidLogic.authn, 'currentUser') + .mockReturnValue(null) + const loadPreferencesSpy = jest.spyOn( + solidLogic.solidLogicSingleton.profile, + 'loadPreferences' + ) + + const loginModule = require('../../../src/login/login') + const roles = await loginModule.getUserRoles() + + expect(currentUserSpy).toHaveBeenCalled() + expect(roles).toEqual([]) + expect(loadPreferencesSpy).not.toHaveBeenCalled() + }) +})