@lxdhub/api
Version:
Display, search and copy LXD-images using a web interface.
67 lines (60 loc) • 1.76 kB
text/typescript
import { ImageListItemDto } from '@lxdhub/interfaces';
import { ImageListItemInterceptor } from './image-list-item.interceptor';
import { Observable, of } from 'rxjs';
import { ImageListItemResponse } from '@lxdhub/api/src/image/dtos';
describe('ImageListItemInterceptor', () => {
let stream$: Observable<ImageListItemResponse>;
let req;
let contextMock;
beforeEach(async () => {
const results: ImageListItemDto[] = [
{
fingerprint: 'fingerprint1',
description: 'desc1',
uploadedAt: new Date(),
id: 1
} as ImageListItemDto,
{
fingerprint: 'fingerprint2',
description: 'desc2',
uploadedAt: new Date(),
id: 2
} as ImageListItemDto
];
req = {
_parsedUrl: {
pathname: '/api/v1/image'
},
protocol: 'http',
get: param => (param === 'host' ? 'localhost:3000' : 'not-valid')
};
contextMock = {
switchToHttp() {
return {
getRequest() {
return req;
}
};
}
};
const pagination = { results } as ImageListItemResponse;
stream$ = of<ImageListItemResponse>(pagination);
});
describe('intercept', () => {
it('should generate the correct detail url', async done => {
const streamOutput$ = new ImageListItemInterceptor().intercept(
contextMock,
{ handle: () => stream$ }
);
streamOutput$.subscribe(response => {
expect(response.results[0]._links.detail).toBe(
'http://localhost:3000/api/v1/image/fingerprint1'
);
expect(response.results[1]._links.detail).toBe(
'http://localhost:3000/api/v1/image/fingerprint2'
);
done();
});
});
});
});