mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 07:23:03 +00:00
Merge branch 'master' into community-and-collection-forms
Conflicts: src/app/core/data/item-data.service.spec.ts src/app/core/data/item-data.service.ts src/app/core/shared/operators.spec.ts src/app/core/shared/operators.ts src/app/shared/shared.module.ts
This commit is contained in:
@@ -7,21 +7,35 @@ import { CoreState } from '../core.reducers';
|
||||
import { ItemDataService } from './item-data.service';
|
||||
import { RequestService } from './request.service';
|
||||
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||
import { FindAllOptions, RestRequest } from './request.models';
|
||||
import { ObjectCacheService } from '../cache/object-cache.service';
|
||||
import { FindAllOptions } from './request.models';
|
||||
import { Observable } from 'rxjs';
|
||||
import { RestResponse } from '../cache/response.models';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
|
||||
describe('ItemDataService', () => {
|
||||
let scheduler: TestScheduler;
|
||||
let service: ItemDataService;
|
||||
let bs: BrowseService;
|
||||
const requestService = {} as RequestService;
|
||||
const requestService = {
|
||||
generateRequestId(): string {
|
||||
return scopeID;
|
||||
},
|
||||
configure(request: RestRequest) {
|
||||
// Do nothing
|
||||
}
|
||||
} as RequestService;
|
||||
const rdbService = {} as RemoteDataBuildService;
|
||||
const objectCache = {} as ObjectCacheService;
|
||||
|
||||
const store = {} as Store<CoreState>;
|
||||
const halEndpointService = {} as HALEndpointService;
|
||||
const objectCache = {} as ObjectCacheService;
|
||||
const halEndpointService = {
|
||||
getEndpoint(linkPath: string): Observable<string> {
|
||||
return cold('a', {a: itemEndpoint});
|
||||
}
|
||||
} as HALEndpointService;
|
||||
|
||||
const scopeID = '4af28e99-6a9c-4036-a199-e1b587046d39';
|
||||
const options = Object.assign(new FindAllOptions(), {
|
||||
@@ -41,6 +55,8 @@ describe('ItemDataService', () => {
|
||||
const http = {} as HttpClient;
|
||||
const comparator = {} as any;
|
||||
const dataBuildService = {} as NormalizedObjectBuildService;
|
||||
const itemEndpoint = 'https://rest.api/core/items';
|
||||
const ScopedItemEndpoint = `https://rest.api/core/items/${scopeID}`;
|
||||
|
||||
function initMockBrowseService(isSuccessful: boolean) {
|
||||
const obs = isSuccessful ?
|
||||
@@ -94,4 +110,70 @@ describe('ItemDataService', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('getItemWithdrawEndpoint', () => {
|
||||
beforeEach(() => {
|
||||
scheduler = getTestScheduler();
|
||||
service = initTestService();
|
||||
|
||||
});
|
||||
|
||||
it('should return the endpoint to withdraw and reinstate items', () => {
|
||||
const result = service.getItemWithdrawEndpoint(scopeID);
|
||||
const expected = cold('a', {a: ScopedItemEndpoint});
|
||||
|
||||
expect(result).toBeObservable(expected);
|
||||
});
|
||||
|
||||
it('should setWithDrawn', () => {
|
||||
const expected = new RestResponse(true, '200');
|
||||
const result = service.setWithDrawn(scopeID, true);
|
||||
result.subscribe((v) => expect(v).toEqual(expected));
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('getItemDiscoverableEndpoint', () => {
|
||||
beforeEach(() => {
|
||||
scheduler = getTestScheduler();
|
||||
service = initTestService();
|
||||
|
||||
});
|
||||
|
||||
it('should return the endpoint to make an item private or public', () => {
|
||||
const result = service.getItemDiscoverableEndpoint(scopeID);
|
||||
const expected = cold('a', {a: ScopedItemEndpoint});
|
||||
|
||||
expect(result).toBeObservable(expected);
|
||||
});
|
||||
|
||||
it('should setDiscoverable', () => {
|
||||
const expected = new RestResponse(true, '200');
|
||||
const result = service.setDiscoverable(scopeID, false);
|
||||
result.subscribe((v) => expect(v).toEqual(expected));
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('getItemDeleteEndpoint', () => {
|
||||
beforeEach(() => {
|
||||
scheduler = getTestScheduler();
|
||||
service = initTestService();
|
||||
});
|
||||
|
||||
it('should return the endpoint to make an item private or public', () => {
|
||||
const result = service.getItemDeleteEndpoint(scopeID);
|
||||
const expected = cold('a', {a: ScopedItemEndpoint});
|
||||
|
||||
expect(result).toBeObservable(expected);
|
||||
});
|
||||
|
||||
it('should delete the item', () => {
|
||||
const expected = new RestResponse(true, '200');
|
||||
const result = service.delete(scopeID);
|
||||
result.subscribe((v) => expect(v).toEqual(expected));
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -14,12 +14,14 @@ import { URLCombiner } from '../url-combiner/url-combiner';
|
||||
import { DataService } from './data.service';
|
||||
import { RequestService } from './request.service';
|
||||
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||
import { FindAllOptions } from './request.models';
|
||||
import { DeleteRequest, FindAllOptions, PatchRequest, RestRequest } from './request.models';
|
||||
import { ObjectCacheService } from '../cache/object-cache.service';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
|
||||
import { DSOChangeAnalyzer } from './dso-change-analyzer.service';
|
||||
import { configureRequest, getRequestFromRequestHref } from '../shared/operators';
|
||||
import { RequestEntry } from './request.reducer';
|
||||
|
||||
@Injectable()
|
||||
export class ItemDataService extends DataService<NormalizedItem, Item> {
|
||||
@@ -56,4 +58,93 @@ export class ItemDataService extends DataService<NormalizedItem, Item> {
|
||||
distinctUntilChanged(),);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the endpoint for item withdrawal and reinstatement
|
||||
* @param itemId
|
||||
*/
|
||||
public getItemWithdrawEndpoint(itemId: string): Observable<string> {
|
||||
return this.halService.getEndpoint(this.linkPath).pipe(
|
||||
map((endpoint: string) => this.getFindByIDHref(endpoint, itemId))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the endpoint to make item private and public
|
||||
* @param itemId
|
||||
*/
|
||||
public getItemDiscoverableEndpoint(itemId: string): Observable<string> {
|
||||
return this.halService.getEndpoint(this.linkPath).pipe(
|
||||
map((endpoint: string) => this.getFindByIDHref(endpoint, itemId))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the endpoint to delete the item
|
||||
* @param itemId
|
||||
*/
|
||||
public getItemDeleteEndpoint(itemId: string): Observable<string> {
|
||||
return this.halService.getEndpoint(this.linkPath).pipe(
|
||||
map((endpoint: string) => this.getFindByIDHref(endpoint, itemId))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the isWithdrawn state of an item to a specified state
|
||||
* @param itemId
|
||||
* @param withdrawn
|
||||
*/
|
||||
public setWithDrawn(itemId: string, withdrawn: boolean) {
|
||||
const patchOperation = [{
|
||||
op: 'replace', path: '/withdrawn', value: withdrawn
|
||||
}];
|
||||
return this.getItemWithdrawEndpoint(itemId).pipe(
|
||||
distinctUntilChanged(),
|
||||
map((endpointURL: string) =>
|
||||
new PatchRequest(this.requestService.generateRequestId(), endpointURL, patchOperation)
|
||||
),
|
||||
configureRequest(this.requestService),
|
||||
map((request: RestRequest) => request.href),
|
||||
getRequestFromRequestHref(this.requestService),
|
||||
map((requestEntry: RequestEntry) => requestEntry.response)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the isDiscoverable state of an item to a specified state
|
||||
* @param itemId
|
||||
* @param discoverable
|
||||
*/
|
||||
public setDiscoverable(itemId: string, discoverable: boolean) {
|
||||
const patchOperation = [{
|
||||
op: 'replace', path: '/discoverable', value: discoverable
|
||||
}];
|
||||
return this.getItemDiscoverableEndpoint(itemId).pipe(
|
||||
distinctUntilChanged(),
|
||||
map((endpointURL: string) =>
|
||||
new PatchRequest(this.requestService.generateRequestId(), endpointURL, patchOperation)
|
||||
),
|
||||
configureRequest(this.requestService),
|
||||
map((request: RestRequest) => request.href),
|
||||
getRequestFromRequestHref(this.requestService),
|
||||
map((requestEntry: RequestEntry) => requestEntry.response)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the item
|
||||
* @param itemId
|
||||
*/
|
||||
public delete(itemId: string) {
|
||||
return this.getItemDeleteEndpoint(itemId).pipe(
|
||||
distinctUntilChanged(),
|
||||
map((endpointURL: string) =>
|
||||
new DeleteRequest(this.requestService.generateRequestId(), endpointURL)
|
||||
),
|
||||
configureRequest(this.requestService),
|
||||
map((request: RestRequest) => request.href),
|
||||
getRequestFromRequestHref(this.requestService),
|
||||
map((requestEntry: RequestEntry) => requestEntry.response)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user