import { TestBed } from '@angular/core/testing';
import { ConfigurationDataService } from '../core/data/configuration-data.service';
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
import {
CANONICAL_PREFIX_KEY,
HandleService,
} from './handle.service';
import { createSuccessfulRemoteDataObject$ } from './remote-data.utils';
import { ConfigurationDataServiceStub } from './testing/configuration-data.service.stub';
describe('HandleService', () => {
let service: HandleService;
let configurationService: ConfigurationDataServiceStub;
beforeEach(() => {
configurationService = new ConfigurationDataServiceStub();
TestBed.configureTestingModule({
providers: [
{ provide: ConfigurationDataService, useValue: configurationService },
],
});
service = TestBed.inject(HandleService);
});
describe(`normalizeHandle`, () => {
it('should normalize a handle url with custom conical prefix with trailing slash', (done: DoneFn) => {
spyOn(configurationService, 'findByPropertyName').and.returnValue(createSuccessfulRemoteDataObject$({
... new ConfigurationProperty(),
name: CANONICAL_PREFIX_KEY,
values: ['https://hdl.handle.net/'],
}));
service.normalizeHandle('https://hdl.handle.net/123456789/123456').subscribe((handle: string | null) => {
expect(handle).toBe('123456789/123456');
done();
});
});
it('should normalize a handle url with custom conical prefix without trailing slash', (done: DoneFn) => {
spyOn(configurationService, 'findByPropertyName').and.returnValue(createSuccessfulRemoteDataObject$({
... new ConfigurationProperty(),
name: CANONICAL_PREFIX_KEY,
values: ['https://hdl.handle.net/'],
}));
service.normalizeHandle('https://hdl.handle.net/123456789/123456').subscribe((handle: string | null) => {
expect(handle).toBe('123456789/123456');
done();
});
});
describe('should simply return an already normalized handle', () => {
it('123456789/123456', (done: DoneFn) => {
service.normalizeHandle('123456789/123456').subscribe((handle: string | null) => {
expect(handle).toBe('123456789/123456');
done();
});
});
it('12.3456.789/123456', (done: DoneFn) => {
service.normalizeHandle('12.3456.789/123456').subscribe((handle: string | null) => {
expect(handle).toBe('12.3456.789/123456');
done();
});
});
});
it('should normalize handle urls starting with handle', (done: DoneFn) => {
service.normalizeHandle('https://rest.api/server/handle/123456789/123456').subscribe((handle: string | null) => {
expect(handle).toBe('123456789/123456');
done();
});
});
it('should return null if the input doesn\'t contain a valid handle', (done: DoneFn) => {
service.normalizeHandle('https://hdl.handle.net/123456789').subscribe((handle: string | null) => {
expect(handle).toBeNull();
done();
});
});
it('should return null if the input doesn\'t contain a handle', (done: DoneFn) => {
service.normalizeHandle('something completely different').subscribe((handle: string | null) => {
expect(handle).toBeNull();
done();
});
});
});
});