diff --git a/src/provider-session-manager.spec.ts b/src/provider-session-manager.spec.ts index b0d609a..b380113 100644 --- a/src/provider-session-manager.spec.ts +++ b/src/provider-session-manager.spec.ts @@ -34,6 +34,7 @@ const extensionContextMock: extensionApi.ExtensionContext = { secrets: { get: vi.fn<(key: string) => Promise>(), store: vi.fn<(key: string, value: string) => Promise>(), + delete: vi.fn<(key: string) => Promise>(), }, } as unknown as extensionApi.ExtensionContext; @@ -165,3 +166,13 @@ test('saveSessions', async () => { expect(extensionContextMock.secrets.store).toHaveBeenCalledWith(AUTHENTICATION_SESSIONS_KEY, JSON.stringify([sessionsMock[0]])); }); + +test('saveSessions with no sessions', async () => { + // make sure that there are no sessions saved + const currentSessions = await sessionManager.getSessions(); + expect(currentSessions).toEqual([]); + + await sessionManager.saveSessions(); + + expect(extensionContextMock.secrets.delete).toHaveBeenCalledWith(AUTHENTICATION_SESSIONS_KEY); +}); diff --git a/src/provider-session-manager.ts b/src/provider-session-manager.ts index abcda1d..28d112e 100644 --- a/src/provider-session-manager.ts +++ b/src/provider-session-manager.ts @@ -107,6 +107,10 @@ export class ProviderSessionManager { } async saveSessions(): Promise { - await this.extensionContext.secrets.store(AUTHENTICATION_SESSIONS_KEY, JSON.stringify(this.ghSessions)); + if (this.ghSessions.length === 0) { + await this.extensionContext.secrets.delete(AUTHENTICATION_SESSIONS_KEY); + } else { + await this.extensionContext.secrets.store(AUTHENTICATION_SESSIONS_KEY, JSON.stringify(this.ghSessions)); + } } }