feat: init
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';
|
||||
import { TestBed, waitForAsync } from '@angular/core/testing';
|
||||
import { TestBed, mockImplementationWhenArgsEqual } from '@/testing';
|
||||
import { HttpErrorResponse, HttpHeaders } from '@ngify/http';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { mockProvider } from '../../../test/auto-mock';
|
||||
import { createRetriableStream } from '../../../test/create-retriable-stream.helper';
|
||||
import { vi } from 'vitest';
|
||||
import { DataService } from '../../api/data.service';
|
||||
import { LoggerService } from '../../logging/logger.service';
|
||||
import { StoragePersistenceService } from '../../storage/storage-persistence.service';
|
||||
import { createRetriableStream } from '../../testing/create-retriable-stream.helper';
|
||||
import { mockProvider } from '../../testing/mock';
|
||||
import { UrlService } from '../../utils/url/url.service';
|
||||
import { CallbackContext } from '../callback-context';
|
||||
import type { CallbackContext } from '../callback-context';
|
||||
import { RefreshTokenCallbackHandlerService } from './refresh-token-callback-handler.service';
|
||||
|
||||
describe('RefreshTokenCallbackHandlerService', () => {
|
||||
@@ -46,7 +47,7 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
url: 'https://identity-server.test/openid-connect/token',
|
||||
});
|
||||
|
||||
it('throws error if no tokenEndpoint is given', waitForAsync(() => {
|
||||
it('throws error if no tokenEndpoint is given', async () => {
|
||||
(service as any)
|
||||
.refreshTokensRequestTokens({} as CallbackContext)
|
||||
.subscribe({
|
||||
@@ -54,41 +55,45 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
expect(err).toBeTruthy();
|
||||
},
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
it('calls data service if all params are good', waitForAsync(() => {
|
||||
const postSpy = spyOn(dataService, 'post').and.returnValue(of({}));
|
||||
it('calls data service if all params are good', async () => {
|
||||
const postSpy = vi.spyOn(dataService, 'post').mockReturnValue(of({}));
|
||||
|
||||
spyOn(storagePersistenceService, 'read')
|
||||
.withArgs('authWellKnownEndPoints', { configId: 'configId1' })
|
||||
.and.returnValue({ tokenEndpoint: 'tokenEndpoint' });
|
||||
mockImplementationWhenArgsEqual(
|
||||
vi.spyOn(storagePersistenceService, 'read'),
|
||||
['authWellKnownEndPoints', { configId: 'configId1' }],
|
||||
() => ({ tokenEndpoint: 'tokenEndpoint' })
|
||||
);
|
||||
|
||||
service
|
||||
.refreshTokensRequestTokens({} as CallbackContext, {
|
||||
configId: 'configId1',
|
||||
})
|
||||
.subscribe(() => {
|
||||
expect(postSpy).toHaveBeenCalledOnceWith(
|
||||
expect(postSpy).toHaveBeenCalledExactlyOnceWith(
|
||||
'tokenEndpoint',
|
||||
undefined,
|
||||
{ configId: 'configId1' },
|
||||
jasmine.any(HttpHeaders)
|
||||
expect.any(HttpHeaders)
|
||||
);
|
||||
const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders;
|
||||
|
||||
expect(httpHeaders.has('Content-Type')).toBeTrue();
|
||||
expect(httpHeaders.has('Content-Type')).toBeTruthy();
|
||||
expect(httpHeaders.get('Content-Type')).toBe(
|
||||
'application/x-www-form-urlencoded'
|
||||
);
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
it('calls data service with correct headers if all params are good', waitForAsync(() => {
|
||||
const postSpy = spyOn(dataService, 'post').and.returnValue(of({}));
|
||||
it('calls data service with correct headers if all params are good', async () => {
|
||||
const postSpy = vi.spyOn(dataService, 'post').mockReturnValue(of({}));
|
||||
|
||||
spyOn(storagePersistenceService, 'read')
|
||||
.withArgs('authWellKnownEndPoints', { configId: 'configId1' })
|
||||
.and.returnValue({ tokenEndpoint: 'tokenEndpoint' });
|
||||
mockImplementationWhenArgsEqual(
|
||||
vi.spyOn(storagePersistenceService, 'read'),
|
||||
['authWellKnownEndPoints', { configId: 'configId1' }],
|
||||
() => ({ tokenEndpoint: 'tokenEndpoint' })
|
||||
);
|
||||
|
||||
service
|
||||
.refreshTokensRequestTokens({} as CallbackContext, {
|
||||
@@ -97,20 +102,24 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
.subscribe(() => {
|
||||
const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders;
|
||||
|
||||
expect(httpHeaders.has('Content-Type')).toBeTrue();
|
||||
expect(httpHeaders.has('Content-Type')).toBeTruthy();
|
||||
expect(httpHeaders.get('Content-Type')).toBe(
|
||||
'application/x-www-form-urlencoded'
|
||||
);
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
it('returns error in case of http error', waitForAsync(() => {
|
||||
spyOn(dataService, 'post').and.returnValue(throwError(() => HTTP_ERROR));
|
||||
it('returns error in case of http error', async () => {
|
||||
vi.spyOn(dataService, 'post').mockReturnValue(
|
||||
throwError(() => HTTP_ERROR)
|
||||
);
|
||||
const config = { configId: 'configId1', authority: 'authority' };
|
||||
|
||||
spyOn(storagePersistenceService, 'read')
|
||||
.withArgs('authWellKnownEndPoints', config)
|
||||
.and.returnValue({ tokenEndpoint: 'tokenEndpoint' });
|
||||
mockImplementationWhenArgsEqual(
|
||||
vi.spyOn(storagePersistenceService, 'read'),
|
||||
['authWellKnownEndPoints', config],
|
||||
() => ({ tokenEndpoint: 'tokenEndpoint' })
|
||||
);
|
||||
|
||||
service
|
||||
.refreshTokensRequestTokens({} as CallbackContext, config)
|
||||
@@ -119,10 +128,10 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
expect(err).toBeTruthy();
|
||||
},
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
it('retries request in case of no connection http error and succeeds', waitForAsync(() => {
|
||||
const postSpy = spyOn(dataService, 'post').and.returnValue(
|
||||
it('retries request in case of no connection http error and succeeds', async () => {
|
||||
const postSpy = vi.spyOn(dataService, 'post').mockReturnValue(
|
||||
createRetriableStream(
|
||||
throwError(() => CONNECTION_ERROR),
|
||||
of({})
|
||||
@@ -130,9 +139,11 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
);
|
||||
const config = { configId: 'configId1', authority: 'authority' };
|
||||
|
||||
spyOn(storagePersistenceService, 'read')
|
||||
.withArgs('authWellKnownEndPoints', config)
|
||||
.and.returnValue({ tokenEndpoint: 'tokenEndpoint' });
|
||||
mockImplementationWhenArgsEqual(
|
||||
vi.spyOn(storagePersistenceService, 'read'),
|
||||
['authWellKnownEndPoints', config],
|
||||
() => ({ tokenEndpoint: 'tokenEndpoint' })
|
||||
);
|
||||
|
||||
service
|
||||
.refreshTokensRequestTokens({} as CallbackContext, config)
|
||||
@@ -146,10 +157,10 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
expect(err).toBeFalsy();
|
||||
},
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
it('retries request in case of no connection http error and fails because of http error afterwards', waitForAsync(() => {
|
||||
const postSpy = spyOn(dataService, 'post').and.returnValue(
|
||||
it('retries request in case of no connection http error and fails because of http error afterwards', async () => {
|
||||
const postSpy = vi.spyOn(dataService, 'post').mockReturnValue(
|
||||
createRetriableStream(
|
||||
throwError(() => CONNECTION_ERROR),
|
||||
throwError(() => HTTP_ERROR)
|
||||
@@ -157,9 +168,11 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
);
|
||||
const config = { configId: 'configId1', authority: 'authority' };
|
||||
|
||||
spyOn(storagePersistenceService, 'read')
|
||||
.withArgs('authWellKnownEndPoints', config)
|
||||
.and.returnValue({ tokenEndpoint: 'tokenEndpoint' });
|
||||
mockImplementationWhenArgsEqual(
|
||||
vi.spyOn(storagePersistenceService, 'read'),
|
||||
['authWellKnownEndPoints', config],
|
||||
() => ({ tokenEndpoint: 'tokenEndpoint' })
|
||||
);
|
||||
|
||||
service
|
||||
.refreshTokensRequestTokens({} as CallbackContext, config)
|
||||
@@ -173,6 +186,6 @@ describe('RefreshTokenCallbackHandlerService', () => {
|
||||
expect(postSpy).toHaveBeenCalledTimes(1);
|
||||
},
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user