From d36adb010410d5a20d3a663031b15baf86fffe7c Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Thu, 26 Mar 2026 19:29:57 +1100 Subject: [PATCH 1/6] checked login status --- src/login/login.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/login/login.ts b/src/login/login.ts index b93e07f11..e4af9578c 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) + return [] } return solidLogicSingleton.store.each( me, From d1379782bbb8089f1eee37ee9628ffa3b958993f Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Thu, 26 Mar 2026 20:22:27 +1100 Subject: [PATCH 2/6] still throw if no pref or error --- src/login/login.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/login/login.ts b/src/login/login.ts index e4af9578c..ba0c7e118 100644 --- a/src/login/login.ts +++ b/src/login/login.ts @@ -1055,7 +1055,7 @@ export async function getUserRoles (): Promise> { try { const { me, preferencesFile, preferencesFileError } = await ensureLoadedPreferences({ me: currentUser }) if (!preferencesFile || preferencesFileError) { - return [] + throw new Error(preferencesFileError) } return solidLogicSingleton.store.each( me, From 6e9b8a04153dbdbce3748d176766486f1bdd3241 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Thu, 26 Mar 2026 20:43:33 +1100 Subject: [PATCH 3/6] Update src/login/login.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/login/login.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/login/login.ts b/src/login/login.ts index ba0c7e118..183554946 100644 --- a/src/login/login.ts +++ b/src/login/login.ts @@ -1055,7 +1055,7 @@ export async function getUserRoles (): Promise> { try { 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, From 05965e010fa85012a8c92160196499be73fd1f09 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Thu, 26 Mar 2026 20:44:30 +1100 Subject: [PATCH 4/6] unit test --- test/unit/login/login.test.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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() + }) +}) From db5bcefd3cc893bc30e294395ddb9e5290cb66b7 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Sun, 29 Mar 2026 13:35:59 +1100 Subject: [PATCH 5/6] return when not logged in --- src/login/login.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/login/login.ts b/src/login/login.ts index e4af9578c..bee9ce311 100644 --- a/src/login/login.ts +++ b/src/login/login.ts @@ -1047,6 +1047,11 @@ export function newAppInstance ( * and/or a developer */ export async function getUserRoles (): Promise> { + const sessionInfo = authSession.info + if (!sessionInfo?.isLoggedIn || !sessionInfo?.webId) { + return [] + } + const currentUser = authn.currentUser() if (!currentUser) { return [] From 51d40cf20662f072f7be55ae69ae8e6e73152d91 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Sun, 29 Mar 2026 20:58:18 +1100 Subject: [PATCH 6/6] fix test --- test/unit/login/login.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/unit/login/login.test.ts b/test/unit/login/login.test.ts index ceb14bb46..dc94b1fa0 100644 --- a/test/unit/login/login.test.ts +++ b/test/unit/login/login.test.ts @@ -21,6 +21,11 @@ describe('getUserRoles', () => { it('returns [] and does not load preferences when current user is missing', async () => { const solidLogic = require('solid-logic') + solidLogic.authSession.info = { + isLoggedIn: true, + webId: 'https://alice.example.com/profile/card#me' + } + const currentUserSpy = jest .spyOn(solidLogic.authn, 'currentUser') .mockReturnValue(null)