mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 15:33:04 +00:00
72541: user-agreement update to patch
This commit is contained in:
@@ -3,7 +3,7 @@ import { Store } from '@ngrx/store';
|
||||
import { Operation } from 'fast-json-patch';
|
||||
import { Observable } from 'rxjs';
|
||||
import { distinctUntilChanged, filter, find, first, map, mergeMap, switchMap, take } from 'rxjs/operators';
|
||||
import { hasValue, isNotEmpty, isNotEmptyOperator } from '../../shared/empty.util';
|
||||
import { hasValue, hasValueOperator, isNotEmpty, isNotEmptyOperator } from '../../shared/empty.util';
|
||||
import { NotificationOptions } from '../../shared/notifications/models/notification-options.model';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
|
||||
@@ -376,6 +376,7 @@ export abstract class DataService<T extends CacheableObject> implements UpdateDa
|
||||
).subscribe();
|
||||
|
||||
return this.requestService.getByUUID(requestId).pipe(
|
||||
hasValueOperator(),
|
||||
find((request: RequestEntry) => request.completed),
|
||||
map((request: RequestEntry) => request.response)
|
||||
);
|
||||
|
@@ -7,6 +7,7 @@ import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock';
|
||||
import { of as observableOf } from 'rxjs';
|
||||
import { EPerson } from '../eperson/models/eperson.model';
|
||||
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
||||
import { RestResponse } from '../cache/response.models';
|
||||
|
||||
describe('EndUserAgreementService', () => {
|
||||
let service: EndUserAgreementService;
|
||||
@@ -36,7 +37,8 @@ describe('EndUserAgreementService', () => {
|
||||
getAuthenticatedUserFromStore: observableOf(userWithMetadata)
|
||||
});
|
||||
ePersonService = jasmine.createSpyObj('ePersonService', {
|
||||
update: createSuccessfulRemoteDataObject$(userWithMetadata)
|
||||
update: createSuccessfulRemoteDataObject$(userWithMetadata),
|
||||
patch: observableOf(new RestResponse(true, 200, 'OK'))
|
||||
});
|
||||
|
||||
service = new EndUserAgreementService(cookie, authService, ePersonService);
|
||||
@@ -98,15 +100,7 @@ describe('EndUserAgreementService', () => {
|
||||
|
||||
it('setUserAcceptedAgreement should update the user with new metadata', (done) => {
|
||||
service.setUserAcceptedAgreement(true).subscribe(() => {
|
||||
expect(ePersonService.update).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||
metadata: jasmine.objectContaining({
|
||||
[END_USER_AGREEMENT_METADATA_FIELD]: [
|
||||
{
|
||||
value: 'true'
|
||||
}
|
||||
]
|
||||
})
|
||||
}));
|
||||
expect(ePersonService.patch).toHaveBeenCalled();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@@ -5,10 +5,7 @@ import { Observable } from 'rxjs/internal/Observable';
|
||||
import { of as observableOf } from 'rxjs';
|
||||
import { map, switchMap, take } from 'rxjs/operators';
|
||||
import { hasValue } from '../../shared/empty.util';
|
||||
import { cloneDeep } from 'lodash';
|
||||
import { Metadata } from '../shared/metadata.utils';
|
||||
import { EPersonDataService } from '../eperson/eperson-data.service';
|
||||
import { getSucceededRemoteData } from '../shared/operators';
|
||||
|
||||
export const END_USER_AGREEMENT_COOKIE = 'hasAgreedEndUser';
|
||||
export const END_USER_AGREEMENT_METADATA_FIELD = 'dspace.agreements.end-user';
|
||||
@@ -67,13 +64,18 @@ export class EndUserAgreementService {
|
||||
switchMap((authenticated) => {
|
||||
if (authenticated) {
|
||||
return this.authService.getAuthenticatedUserFromStore().pipe(
|
||||
take(1),
|
||||
switchMap((user) => {
|
||||
const updatedUser = cloneDeep(user);
|
||||
Metadata.setFirstValue(updatedUser.metadata, END_USER_AGREEMENT_METADATA_FIELD, String(accepted));
|
||||
return this.ePersonService.update(updatedUser);
|
||||
const newValue = { value: String(accepted) };
|
||||
let operation;
|
||||
if (user.hasMetadata(END_USER_AGREEMENT_METADATA_FIELD)) {
|
||||
operation = { op: 'replace', path: `/metadata/${END_USER_AGREEMENT_METADATA_FIELD}/0`, value: newValue };
|
||||
} else {
|
||||
operation = { op: 'add', path: `/metadata/${END_USER_AGREEMENT_METADATA_FIELD}`, value: [ newValue ] };
|
||||
}
|
||||
return this.ePersonService.patch(user, [operation]);
|
||||
}),
|
||||
getSucceededRemoteData(),
|
||||
map((rd) => hasValue(rd.payload))
|
||||
map((response) => response.isSuccessful)
|
||||
);
|
||||
} else {
|
||||
this.setCookieAccepted(accepted);
|
||||
|
Reference in New Issue
Block a user