mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00

* Change - Metadata field selector add infinite scroll for data paginated * Update change on new BRANCH * Fix - LINT ERRORS * Fix - LINT ERRORS
135 lines
4.9 KiB
TypeScript
135 lines
4.9 KiB
TypeScript
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
|
import {
|
|
ComponentFixture,
|
|
TestBed,
|
|
waitForAsync,
|
|
} from '@angular/core/testing';
|
|
import { By } from '@angular/platform-browser';
|
|
import { RouterTestingModule } from '@angular/router/testing';
|
|
import { TranslateModule } from '@ngx-translate/core';
|
|
|
|
import {
|
|
SortDirection,
|
|
SortOptions,
|
|
} from '../../../core/cache/models/sort-options.model';
|
|
import { MetadataField } from '../../../core/metadata/metadata-field.model';
|
|
import { MetadataSchema } from '../../../core/metadata/metadata-schema.model';
|
|
import { RegistryService } from '../../../core/registry/registry.service';
|
|
import { NotificationsService } from '../../../shared/notifications/notifications.service';
|
|
import {
|
|
createFailedRemoteDataObject$,
|
|
createSuccessfulRemoteDataObject$,
|
|
} from '../../../shared/remote-data.utils';
|
|
import { createPaginatedList } from '../../../shared/testing/utils.test';
|
|
import { followLink } from '../../../shared/utils/follow-link-config.model';
|
|
import { VarDirective } from '../../../shared/utils/var.directive';
|
|
import { MetadataFieldSelectorComponent } from './metadata-field-selector.component';
|
|
|
|
describe('MetadataFieldSelectorComponent', () => {
|
|
let component: MetadataFieldSelectorComponent;
|
|
let fixture: ComponentFixture<MetadataFieldSelectorComponent>;
|
|
|
|
let registryService: RegistryService;
|
|
let notificationsService: NotificationsService;
|
|
|
|
let metadataSchema: MetadataSchema;
|
|
let metadataFields: MetadataField[];
|
|
|
|
beforeEach(waitForAsync(() => {
|
|
metadataSchema = Object.assign(new MetadataSchema(), {
|
|
id: 0,
|
|
prefix: 'dc',
|
|
namespace: 'https://schema.org/CreativeWork',
|
|
field: '.',
|
|
});
|
|
metadataFields = [
|
|
Object.assign(new MetadataField(), {
|
|
id: 0,
|
|
element: 'description',
|
|
qualifier: undefined,
|
|
schema: createSuccessfulRemoteDataObject$(metadataSchema),
|
|
}),
|
|
Object.assign(new MetadataField(), {
|
|
id: 1,
|
|
element: 'description',
|
|
qualifier: 'abstract',
|
|
schema: createSuccessfulRemoteDataObject$(metadataSchema),
|
|
}),
|
|
];
|
|
|
|
registryService = jasmine.createSpyObj('registryService', {
|
|
queryMetadataFields: createSuccessfulRemoteDataObject$(createPaginatedList(metadataFields)),
|
|
});
|
|
notificationsService = jasmine.createSpyObj('notificationsService', ['error', 'success']);
|
|
|
|
TestBed.configureTestingModule({
|
|
imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), MetadataFieldSelectorComponent, VarDirective],
|
|
providers: [
|
|
{ provide: RegistryService, useValue: registryService },
|
|
{ provide: NotificationsService, useValue: notificationsService },
|
|
],
|
|
schemas: [NO_ERRORS_SCHEMA],
|
|
}).compileComponents();
|
|
}));
|
|
|
|
beforeEach(() => {
|
|
fixture = TestBed.createComponent(MetadataFieldSelectorComponent);
|
|
component = fixture.componentInstance;
|
|
fixture.detectChanges();
|
|
});
|
|
|
|
describe('when a query is entered', () => {
|
|
const query = 'dc.d';
|
|
|
|
beforeEach(() => {
|
|
component.showInvalid = false;
|
|
component.query$.next(query);
|
|
});
|
|
|
|
it('should reset showInvalid', () => {
|
|
expect(component.showInvalid).toBeFalse();
|
|
});
|
|
|
|
it('should query the registry service for metadata fields and include the schema', () => {
|
|
expect(registryService.queryMetadataFields).toHaveBeenCalledWith(query, { elementsPerPage: 20, sort: new SortOptions('fieldName', SortDirection.ASC), currentPage: 1 }, true, false, followLink('schema'));
|
|
});
|
|
});
|
|
|
|
describe('validate', () => {
|
|
it('should return an observable true and show no feedback if the current mdField exists in registry', (done) => {
|
|
component.mdField = 'dc.description.abstract';
|
|
component.validate().subscribe((result) => {
|
|
expect(result).toBeTrue();
|
|
fixture.detectChanges();
|
|
expect(fixture.debugElement.query(By.css('.invalid-feedback'))).toBeNull();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should return an observable false and show invalid feedback if the current mdField is missing in registry', (done) => {
|
|
component.mdField = 'dc.fake.field';
|
|
component.validate().subscribe((result) => {
|
|
expect(result).toBeFalse();
|
|
fixture.detectChanges();
|
|
expect(fixture.debugElement.query(By.css('.invalid-feedback'))).toBeTruthy();
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('when querying the metadata fields returns an error response', () => {
|
|
beforeEach(() => {
|
|
(registryService.queryMetadataFields as jasmine.Spy).and.returnValue(createFailedRemoteDataObject$('Failed'));
|
|
});
|
|
|
|
it('should return an observable false and show a notification', (done) => {
|
|
component.mdField = 'dc.description.abstract';
|
|
component.validate().subscribe((result) => {
|
|
expect(result).toBeFalse();
|
|
expect(notificationsService.error).toHaveBeenCalled();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|