oidc-client-rx/src/flows/callback-handling/refresh-session-callback-handler.service.spec.ts
2025-02-02 00:45:46 +08:00

81 lines
2.7 KiB
TypeScript

import { TestBed } from '@/testing';
import { firstValueFrom } from 'rxjs';
import { vi } from 'vitest';
import { AuthStateService } from '../../auth-state/auth-state.service';
import { LoggerService } from '../../logging/logger.service';
import { mockProvider } from '../../testing/mock';
import type { CallbackContext } from '../callback-context';
import { FlowsDataService } from '../flows-data.service';
import { RefreshSessionCallbackHandlerService } from './refresh-session-callback-handler.service';
describe('RefreshSessionCallbackHandlerService', () => {
let service: RefreshSessionCallbackHandlerService;
let flowsDataService: FlowsDataService;
let authStateService: AuthStateService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
RefreshSessionCallbackHandlerService,
mockProvider(AuthStateService),
mockProvider(LoggerService),
mockProvider(FlowsDataService),
],
});
service = TestBed.inject(RefreshSessionCallbackHandlerService);
flowsDataService = TestBed.inject(FlowsDataService);
authStateService = TestBed.inject(AuthStateService);
});
it('should create', () => {
expect(service).toBeTruthy();
});
describe('refreshSessionWithRefreshTokens', () => {
it('returns callbackContext if all params are good', async () => {
vi.spyOn(
flowsDataService,
'getExistingOrCreateAuthStateControl'
).mockReturnValue('state-data');
vi.spyOn(authStateService, 'getRefreshToken').mockReturnValue(
'henlo-furiend'
);
vi.spyOn(authStateService, 'getIdToken').mockReturnValue('henlo-legger');
const expectedCallbackContext = {
code: '',
refreshToken: 'henlo-furiend',
state: 'state-data',
sessionState: null,
authResult: null,
isRenewProcess: true,
jwtKeys: null,
validationResult: null,
existingIdToken: 'henlo-legger',
} as CallbackContext;
const callbackContext = await firstValueFrom(
service.refreshSessionWithRefreshTokens({ configId: 'configId1' })
);
expect(callbackContext).toEqual(expectedCallbackContext);
});
it('throws error if no refresh token is given', async () => {
vi.spyOn(
flowsDataService,
'getExistingOrCreateAuthStateControl'
).mockReturnValue('state-data');
vi.spyOn(authStateService, 'getRefreshToken').mockReturnValue('');
vi.spyOn(authStateService, 'getIdToken').mockReturnValue('henlo-legger');
try {
await firstValueFrom(
service.refreshSessionWithRefreshTokens({ configId: 'configId1' })
);
} catch (err: any) {
expect(err).toBeTruthy();
}
});
});
});