Files
dspace-angular/src/app/core/data/external-source-data.service.spec.ts
Yury Bondarenko 147c7180d0 93219: Add (more) reusable functions to test DataService composition
Data services that implement *Data interfaces should include the appropriate test functions in their specs.
These go over all methods in the interface & check that they're "wired up" correctly.

See e.g. the change in ExternalSourceDataService for an issue that is easy to miss but was highlighted by these new tests
2022-09-12 17:37:54 +02:00

84 lines
2.4 KiB
TypeScript

import { ExternalSourceDataService } from './external-source-data.service';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { createPaginatedList } from '../../shared/testing/utils.test';
import { ExternalSourceEntry } from '../shared/external-source-entry.model';
import { of as observableOf } from 'rxjs';
import { GetRequest } from './request.models';
import { testSearchDataImplementation } from './base/search-data.spec';
describe('ExternalSourceService', () => {
let service: ExternalSourceDataService;
let requestService;
let rdbService;
let halService;
const entries = [
Object.assign(new ExternalSourceEntry(), {
id: '0001-0001-0001-0001',
display: 'John Doe',
value: 'John, Doe',
metadata: {
'dc.identifier.uri': [
{
value: 'https://orcid.org/0001-0001-0001-0001'
}
]
}
}),
Object.assign(new ExternalSourceEntry(), {
id: '0001-0001-0001-0002',
display: 'Sampson Megan',
value: 'Sampson, Megan',
metadata: {
'dc.identifier.uri': [
{
value: 'https://orcid.org/0001-0001-0001-0002'
}
]
}
})
];
function init() {
requestService = jasmine.createSpyObj('requestService', {
generateRequestId: 'request-uuid',
send: {}
});
rdbService = jasmine.createSpyObj('rdbService', {
buildList: createSuccessfulRemoteDataObject$(createPaginatedList(entries))
});
halService = jasmine.createSpyObj('halService', {
getEndpoint: observableOf('external-sources-REST-endpoint'),
});
service = new ExternalSourceDataService(requestService, rdbService, undefined, halService);
}
beforeEach(() => {
init();
});
describe('composition', () => {
const initService = () => new ExternalSourceDataService(null, null, null, null);
testSearchDataImplementation(initService);
});
describe('getExternalSourceEntries', () => {
let result;
beforeEach(() => {
result = service.getExternalSourceEntries('test');
});
it('should send a GetRequest', () => {
expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest), true);
});
it('should return the entries', () => {
result.subscribe((resultRD) => {
expect(resultRD.payload.page).toBe(entries);
});
});
});
});