mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 13:03:04 +00:00
79768: Update & add MetadataService unit tests
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import { fakeAsync, tick } from '@angular/core/testing';
|
import { fakeAsync, tick } from '@angular/core/testing';
|
||||||
import { Meta, Title } from '@angular/platform-browser';
|
import { Meta, Title } from '@angular/platform-browser';
|
||||||
import { Router, NavigationEnd } from '@angular/router';
|
import { NavigationEnd, Router } from '@angular/router';
|
||||||
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { Observable, of } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
@@ -8,11 +8,8 @@ import { Observable, of } from 'rxjs';
|
|||||||
import { RemoteData } from '../data/remote-data';
|
import { RemoteData } from '../data/remote-data';
|
||||||
import { Item } from '../shared/item.model';
|
import { Item } from '../shared/item.model';
|
||||||
|
|
||||||
import { ItemMock, MockBitstream1, MockBitstream3, } from '../../shared/mocks/item.mock';
|
import { ItemMock, MockBitstream1, MockBitstream3 } from '../../shared/mocks/item.mock';
|
||||||
import {
|
import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
||||||
createSuccessfulRemoteDataObject$,
|
|
||||||
createSuccessfulRemoteDataObject
|
|
||||||
} from '../../shared/remote-data.utils';
|
|
||||||
import { PaginatedList } from '../data/paginated-list.model';
|
import { PaginatedList } from '../data/paginated-list.model';
|
||||||
import { Bitstream } from '../shared/bitstream.model';
|
import { Bitstream } from '../shared/bitstream.model';
|
||||||
import { MetadataValue } from '../shared/metadata.models';
|
import { MetadataValue } from '../shared/metadata.models';
|
||||||
@@ -24,6 +21,11 @@ import { createPaginatedList } from '../../shared/testing/utils.test';
|
|||||||
import { getMockTranslateService } from '../../shared/mocks/translate.service.mock';
|
import { getMockTranslateService } from '../../shared/mocks/translate.service.mock';
|
||||||
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
||||||
import { HardRedirectService } from '../services/hard-redirect.service';
|
import { HardRedirectService } from '../services/hard-redirect.service';
|
||||||
|
import { getMockStore, MockStore } from '@ngrx/store/testing';
|
||||||
|
import { CoreState } from '../core.reducers';
|
||||||
|
import { MetaTagState } from './meta-tag.reducer';
|
||||||
|
import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions';
|
||||||
|
import { Community } from '../shared/community.model';
|
||||||
|
|
||||||
describe('MetadataService', () => {
|
describe('MetadataService', () => {
|
||||||
let metadataService: MetadataService;
|
let metadataService: MetadataService;
|
||||||
@@ -41,6 +43,10 @@ describe('MetadataService', () => {
|
|||||||
let hardRedirectService: HardRedirectService;
|
let hardRedirectService: HardRedirectService;
|
||||||
|
|
||||||
let router: Router;
|
let router: Router;
|
||||||
|
let store;
|
||||||
|
|
||||||
|
const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}};
|
||||||
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
rootService = jasmine.createSpyObj({
|
rootService = jasmine.createSpyObj({
|
||||||
@@ -53,7 +59,7 @@ describe('MetadataService', () => {
|
|||||||
findByItemAndName: mockBundleRD$([MockBitstream3])
|
findByItemAndName: mockBundleRD$([MockBitstream3])
|
||||||
});
|
});
|
||||||
translateService = getMockTranslateService();
|
translateService = getMockTranslateService();
|
||||||
meta = jasmine.createSpyObj({
|
meta = jasmine.createSpyObj('meta', {
|
||||||
addTag: {},
|
addTag: {},
|
||||||
removeTag: {}
|
removeTag: {}
|
||||||
});
|
});
|
||||||
@@ -73,6 +79,11 @@ describe('MetadataService', () => {
|
|||||||
hardRedirectService = jasmine.createSpyObj( {
|
hardRedirectService = jasmine.createSpyObj( {
|
||||||
getRequestOrigin: 'https://request.org',
|
getRequestOrigin: 'https://request.org',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//@ts-ignore
|
||||||
|
store = getMockStore({ initialState });
|
||||||
|
spyOn(store, 'dispatch');
|
||||||
|
|
||||||
metadataService = new MetadataService(
|
metadataService = new MetadataService(
|
||||||
router,
|
router,
|
||||||
translateService,
|
translateService,
|
||||||
@@ -83,6 +94,7 @@ describe('MetadataService', () => {
|
|||||||
bitstreamDataService,
|
bitstreamDataService,
|
||||||
undefined,
|
undefined,
|
||||||
rootService,
|
rootService,
|
||||||
|
store,
|
||||||
hardRedirectService
|
hardRedirectService
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -332,6 +344,30 @@ describe('MetadataService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('tagstore', () => {
|
||||||
|
beforeEach(fakeAsync(() => {
|
||||||
|
(metadataService as any).processRouteChange({
|
||||||
|
data: {
|
||||||
|
value: {
|
||||||
|
dso: createSuccessfulRemoteDataObject(ItemMock),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tick();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should remove previous tags on route change', fakeAsync(() => {
|
||||||
|
expect(meta.removeTag).toHaveBeenCalledWith('property=\'title\'');
|
||||||
|
expect(meta.removeTag).toHaveBeenCalledWith('property=\'description\'');
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should clear all tags and add new ones on route change', () => {
|
||||||
|
expect(store.dispatch.calls.argsFor(0)).toEqual([new ClearMetaTagAction()]);
|
||||||
|
expect(store.dispatch.calls.argsFor(1)).toEqual([new AddMetaTagAction('title')]);
|
||||||
|
expect(store.dispatch.calls.argsFor(2)).toEqual([new AddMetaTagAction('description')]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
const mockType = (mockItem: Item, type: string): Item => {
|
const mockType = (mockItem: Item, type: string): Item => {
|
||||||
const typedMockItem = Object.assign(new Item(), mockItem) as Item;
|
const typedMockItem = Object.assign(new Item(), mockItem) as Item;
|
||||||
typedMockItem.metadata['dc.type'] = [{ value: type }] as MetadataValue[];
|
typedMockItem.metadata['dc.type'] = [{ value: type }] as MetadataValue[];
|
||||||
|
@@ -5,10 +5,10 @@ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|||||||
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
import { BehaviorSubject, combineLatest, Observable, of as observableOf, EMPTY } from 'rxjs';
|
import { BehaviorSubject, combineLatest, EMPTY, Observable, of as observableOf } from 'rxjs';
|
||||||
import { filter, map, take, switchMap, expand } from 'rxjs/operators';
|
import { expand, filter, map, switchMap, take } from 'rxjs/operators';
|
||||||
|
|
||||||
import { hasValue, hasNoValue } from '../../shared/empty.util';
|
import { hasNoValue, hasValue } from '../../shared/empty.util';
|
||||||
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
||||||
import { BitstreamDataService } from '../data/bitstream-data.service';
|
import { BitstreamDataService } from '../data/bitstream-data.service';
|
||||||
import { BitstreamFormatDataService } from '../data/bitstream-format-data.service';
|
import { BitstreamFormatDataService } from '../data/bitstream-format-data.service';
|
||||||
@@ -18,10 +18,7 @@ import { BitstreamFormat } from '../shared/bitstream-format.model';
|
|||||||
import { Bitstream } from '../shared/bitstream.model';
|
import { Bitstream } from '../shared/bitstream.model';
|
||||||
import { DSpaceObject } from '../shared/dspace-object.model';
|
import { DSpaceObject } from '../shared/dspace-object.model';
|
||||||
import { Item } from '../shared/item.model';
|
import { Item } from '../shared/item.model';
|
||||||
import {
|
import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../shared/operators';
|
||||||
getFirstSucceededRemoteDataPayload,
|
|
||||||
getFirstCompletedRemoteData
|
|
||||||
} from '../shared/operators';
|
|
||||||
import { RootDataService } from '../data/root-data.service';
|
import { RootDataService } from '../data/root-data.service';
|
||||||
import { getBitstreamDownloadRoute } from '../../app-routing-paths';
|
import { getBitstreamDownloadRoute } from '../../app-routing-paths';
|
||||||
import { BundleDataService } from '../data/bundle-data.service';
|
import { BundleDataService } from '../data/bundle-data.service';
|
||||||
@@ -31,11 +28,10 @@ import { PaginatedList } from '../data/paginated-list.model';
|
|||||||
import { URLCombiner } from '../url-combiner/url-combiner';
|
import { URLCombiner } from '../url-combiner/url-combiner';
|
||||||
import { HardRedirectService } from '../services/hard-redirect.service';
|
import { HardRedirectService } from '../services/hard-redirect.service';
|
||||||
import { MetaTagState } from './meta-tag.reducer';
|
import { MetaTagState } from './meta-tag.reducer';
|
||||||
import { Store, createSelector, select, MemoizedSelector } from '@ngrx/store';
|
import { createSelector, select, Store } from '@ngrx/store';
|
||||||
import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions';
|
import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions';
|
||||||
import { coreSelector } from '../core.selectors';
|
import { coreSelector } from '../core.selectors';
|
||||||
import { CoreState } from '../core.reducers';
|
import { CoreState } from '../core.reducers';
|
||||||
import { ObjectCacheEntry, ObjectCacheState } from '../cache/object-cache.reducer';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base selector function to select the metaTag section in the store
|
* The base selector function to select the metaTag section in the store
|
||||||
@@ -84,7 +80,7 @@ export class MetadataService {
|
|||||||
private bitstreamDataService: BitstreamDataService,
|
private bitstreamDataService: BitstreamDataService,
|
||||||
private bitstreamFormatDataService: BitstreamFormatDataService,
|
private bitstreamFormatDataService: BitstreamFormatDataService,
|
||||||
private rootService: RootDataService,
|
private rootService: RootDataService,
|
||||||
private store: Store<MetaTagState>,
|
private store: Store<CoreState>,
|
||||||
private hardRedirectService: HardRedirectService,
|
private hardRedirectService: HardRedirectService,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user