mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
55693: CollectionItemMapperComponent tests
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h2>{{'collection.item-mapper.head' | translate}}</h2>
|
<h2>{{'collection.item-mapper.head' | translate}}</h2>
|
||||||
<p [innerHTML]="'collection.item-mapper.collection' | translate:{ name: (collectionRD$ | async)?.payload?.name }"></p>
|
<p [innerHTML]="'collection.item-mapper.collection' | translate:{ name: (collectionRD$ | async)?.payload?.name }" id="collection-name"></p>
|
||||||
<p>{{'collection.item-mapper.description' | translate}}</p>
|
<p>{{'collection.item-mapper.description' | translate}}</p>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { CollectionItemMapperComponent } from './collection-item-mapper.component';
|
import { CollectionItemMapperComponent } from './collection-item-mapper.component';
|
||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||||
import { RouterTestingModule } from '@angular/router/testing';
|
import { RouterTestingModule } from '@angular/router/testing';
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
@@ -20,6 +20,18 @@ import { ItemDataService } from '../../core/data/item-data.service';
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { SharedModule } from '../../shared/shared.module';
|
import { SharedModule } from '../../shared/shared.module';
|
||||||
import { Collection } from '../../core/shared/collection.model';
|
import { Collection } from '../../core/shared/collection.model';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import { PaginatedSearchOptions } from '../../+search-page/paginated-search-options.model';
|
||||||
|
import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
|
||||||
|
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
|
||||||
|
import { EventEmitter } from '@angular/core';
|
||||||
|
import { HostWindowService } from '../../shared/host-window.service';
|
||||||
|
import { HostWindowServiceStub } from '../../shared/testing/host-window-service-stub';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
import { RestResponse } from '../../core/cache/response-cache.models';
|
||||||
|
import { PaginatedList } from '../../core/data/paginated-list';
|
||||||
|
import { PageInfo } from '../../core/shared/page-info.model';
|
||||||
|
|
||||||
fdescribe('CollectionItemMapperComponent', () => {
|
fdescribe('CollectionItemMapperComponent', () => {
|
||||||
let comp: CollectionItemMapperComponent;
|
let comp: CollectionItemMapperComponent;
|
||||||
@@ -32,21 +44,39 @@ fdescribe('CollectionItemMapperComponent', () => {
|
|||||||
let notificationsService: NotificationsService;
|
let notificationsService: NotificationsService;
|
||||||
let itemDataService: ItemDataService;
|
let itemDataService: ItemDataService;
|
||||||
|
|
||||||
|
const mockCollection: Collection = Object.assign(new Collection(), {
|
||||||
|
id: 'ce41d451-97ed-4a9c-94a1-7de34f16a9f4',
|
||||||
|
name: 'test-collection'
|
||||||
|
});
|
||||||
|
const mockCollectionRD: RemoteData<Collection> = new RemoteData<Collection>(false, false, true, null, mockCollection);
|
||||||
|
const mockSearchOptions = Observable.of(new PaginatedSearchOptions({
|
||||||
|
pagination: Object.assign(new PaginationComponentOptions(), {
|
||||||
|
id: 'search-page-configuration',
|
||||||
|
pageSize: 10,
|
||||||
|
currentPage: 1
|
||||||
|
}),
|
||||||
|
sort: new SortOptions('dc.title', SortDirection.ASC),
|
||||||
|
scope: mockCollection.id
|
||||||
|
}));
|
||||||
|
const routerStub = Object.assign(new RouterStub(), {
|
||||||
|
url: 'http://test.url'
|
||||||
|
});
|
||||||
const searchConfigServiceStub = {
|
const searchConfigServiceStub = {
|
||||||
|
paginatedSearchOptions: mockSearchOptions
|
||||||
};
|
};
|
||||||
const itemDataServiceStub = {
|
const itemDataServiceStub = {
|
||||||
|
mapToCollection: () => Observable.of(new RestResponse(true, '200'))
|
||||||
};
|
};
|
||||||
const mockCollection: Collection = Object.assign(new Collection(), {
|
const activatedRouteStub = new ActivatedRouteStub({}, { collection: mockCollectionRD });
|
||||||
metadata: [
|
const translateServiceStub = {
|
||||||
{
|
get: () => Observable.of('test-message of collection ' + mockCollection.name),
|
||||||
key: 'dc.title',
|
onLangChange: new EventEmitter(),
|
||||||
language: 'en_US',
|
onTranslationChange: new EventEmitter(),
|
||||||
value: 'Test title'
|
onDefaultLangChange: new EventEmitter()
|
||||||
}]
|
};
|
||||||
|
const searchServiceStub = Object.assign(new SearchServiceStub(), {
|
||||||
|
search: () => Observable.of(new RemoteData(false, false, true, null, new PaginatedList(new PageInfo(), [])))
|
||||||
});
|
});
|
||||||
const activatedRouteStub = new ActivatedRouteStub({}, { collection: mockCollection });
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
@@ -54,12 +84,13 @@ fdescribe('CollectionItemMapperComponent', () => {
|
|||||||
declarations: [CollectionItemMapperComponent],
|
declarations: [CollectionItemMapperComponent],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: ActivatedRoute, useValue: activatedRouteStub },
|
{ provide: ActivatedRoute, useValue: activatedRouteStub },
|
||||||
{ provide: Router, useValue: new RouterStub() },
|
{ provide: Router, useValue: routerStub },
|
||||||
{ provide: SearchConfigurationService, useValue: searchConfigServiceStub },
|
{ provide: SearchConfigurationService, useValue: searchConfigServiceStub },
|
||||||
{ provide: SearchService, useValue: new SearchServiceStub() },
|
{ provide: SearchService, useValue: searchServiceStub },
|
||||||
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
|
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
|
||||||
{ provide: ItemDataService, useValue: itemDataServiceStub },
|
{ provide: ItemDataService, useValue: itemDataServiceStub },
|
||||||
{ provide: TranslateService, useValue: {} }
|
{ provide: TranslateService, useValue: translateServiceStub },
|
||||||
|
{ provide: HostWindowService, useValue: new HostWindowServiceStub(0) }
|
||||||
]
|
]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
}));
|
}));
|
||||||
@@ -76,8 +107,31 @@ fdescribe('CollectionItemMapperComponent', () => {
|
|||||||
itemDataService = (comp as any).itemDataService;
|
itemDataService = (comp as any).itemDataService;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should test', () => {
|
it('should display the correct collection name', () => {
|
||||||
|
const name: HTMLElement = fixture.debugElement.query(By.css('#collection-name')).nativeElement;
|
||||||
|
expect(name.innerHTML).toContain(mockCollection.name);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('mapItems', () => {
|
||||||
|
const ids = ['id1', 'id2', 'id3', 'id4'];
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
spyOn(notificationsService, 'success').and.callThrough();
|
||||||
|
spyOn(notificationsService, 'error').and.callThrough();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display a success message if at least one mapping was successful', () => {
|
||||||
|
comp.mapItems(ids);
|
||||||
|
expect(notificationsService.success).toHaveBeenCalled();
|
||||||
|
expect(notificationsService.error).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display an error message if at least one mapping was unsuccessful', () => {
|
||||||
|
spyOn(itemDataService, 'mapToCollection').and.returnValue(Observable.of(new RestResponse(false, '404')));
|
||||||
|
comp.mapItems(ids);
|
||||||
|
expect(notificationsService.success).not.toHaveBeenCalled();
|
||||||
|
expect(notificationsService.error).toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@@ -115,16 +115,14 @@ export class CollectionItemMapperComponent implements OnInit {
|
|||||||
tabChange(event) {
|
tabChange(event) {
|
||||||
// TODO: Fix tabs to maintain their own pagination options (once the current pagination system is improved)
|
// TODO: Fix tabs to maintain their own pagination options (once the current pagination system is improved)
|
||||||
// Temporary solution: Clear url params when changing tabs
|
// Temporary solution: Clear url params when changing tabs
|
||||||
if (this.router.url.indexOf('?') > -1) {
|
this.router.navigateByUrl(this.getCurrentUrl());
|
||||||
const url: string = this.router.url.substring(0, this.router.url.indexOf('?'));
|
|
||||||
this.router.navigateByUrl(url);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentUrl(): string {
|
getCurrentUrl(): string {
|
||||||
const urlTree = this.router.parseUrl(this.router.url);
|
if (this.router.url.indexOf('?') > -1) {
|
||||||
const g: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];
|
return this.router.url.substring(0, this.router.url.indexOf('?'));
|
||||||
return '/' + g.toString();
|
}
|
||||||
|
return this.router.url;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user