mcp-memory-libsql

by spences10
Verified
import { TokenManager } from '../../../modules/accounts/token.js'; import { GoogleOAuthClient } from '../../../modules/accounts/oauth.js'; jest.mock('../../../modules/accounts/oauth.js'); jest.mock('../../../utils/logger.js'); describe('TokenManager', () => { let tokenManager: TokenManager; let mockOAuthClient: jest.Mocked<GoogleOAuthClient>; beforeEach(() => { mockOAuthClient = new GoogleOAuthClient() as jest.Mocked<GoogleOAuthClient>; tokenManager = new TokenManager(mockOAuthClient); // Mock filesystem operations jest.spyOn(tokenManager as any, 'loadToken').mockImplementation(async () => null); jest.spyOn(tokenManager as any, 'saveToken').mockImplementation(async () => {}); }); describe('autoRenewToken', () => { it('should return valid status for non-expired token', async () => { const validToken = { access_token: 'valid_token', refresh_token: 'refresh_token', expiry_date: Date.now() + 3600000 // 1 hour from now }; (tokenManager as any).loadToken.mockResolvedValue(validToken); const result = await tokenManager.autoRenewToken('test@example.com'); expect(result.success).toBe(true); expect(result.status).toBe('VALID'); expect(result.token).toBe(validToken); }); it('should attempt refresh for expired token', async () => { const expiredToken = { access_token: 'expired_token', refresh_token: 'refresh_token', expiry_date: Date.now() - 3600000 // 1 hour ago }; const newToken = { access_token: 'new_token', refresh_token: 'refresh_token', expiry_date: Date.now() + 3600000 }; (tokenManager as any).loadToken.mockResolvedValue(expiredToken); mockOAuthClient.refreshToken.mockResolvedValue(newToken); const result = await tokenManager.autoRenewToken('test@example.com'); expect(result.success).toBe(true); expect(result.status).toBe('REFRESHED'); expect(result.token).toBe(newToken); }); it('should handle invalid refresh token', async () => { const expiredToken = { access_token: 'expired_token', refresh_token: 'invalid_refresh_token', expiry_date: Date.now() - 3600000 }; (tokenManager as any).loadToken.mockResolvedValue(expiredToken); mockOAuthClient.refreshToken.mockRejectedValue(new Error('invalid_grant')); const result = await tokenManager.autoRenewToken('test@example.com'); expect(result.success).toBe(false); expect(result.status).toBe('REFRESH_FAILED'); expect(result.canRetry).toBe(false); }); it('should handle temporary refresh failures', async () => { const expiredToken = { access_token: 'expired_token', refresh_token: 'refresh_token', expiry_date: Date.now() - 3600000 }; (tokenManager as any).loadToken.mockResolvedValue(expiredToken); mockOAuthClient.refreshToken.mockRejectedValue(new Error('network_error')); const result = await tokenManager.autoRenewToken('test@example.com'); expect(result.success).toBe(false); expect(result.status).toBe('REFRESH_FAILED'); expect(result.canRetry).toBe(true); }); it('should handle missing token', async () => { (tokenManager as any).loadToken.mockResolvedValue(null); const result = await tokenManager.autoRenewToken('test@example.com'); expect(result.success).toBe(false); expect(result.status).toBe('NO_TOKEN'); }); }); });