[CST-4875] feedback created using DataService

This commit is contained in:
Corrado Lombardi
2022-01-24 21:46:32 +01:00
parent fedb2fce12
commit 78ce20ab8f
4 changed files with 17 additions and 55 deletions

View File

@@ -1,5 +1,3 @@
import { of as observableOf } from 'rxjs';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { FeedbackDataService } from './feedback-data.service'; import { FeedbackDataService } from './feedback-data.service';
import { HALLink } from '../shared/hal-link.model'; import { HALLink } from '../shared/hal-link.model';
import { Item } from '../shared/item.model'; import { Item } from '../shared/item.model';
@@ -33,8 +31,6 @@ describe('FeedbackDataService', () => {
page: '/home' page: '/home'
}); });
const linkName = 'feedbacks';
function initTestService(): FeedbackDataService { function initTestService(): FeedbackDataService {
bundleLink = '/items/0fdc0cd7-ff8c-433d-b33c-9b56108abc07/bundles'; bundleLink = '/items/0fdc0cd7-ff8c-433d-b33c-9b56108abc07/bundles';
@@ -92,12 +88,12 @@ describe('FeedbackDataService', () => {
describe('createFeedback', () => { describe('createFeedback', () => {
beforeEach(() => { beforeEach(() => {
spyOn(service, 'postToEndpoint'); spyOn(service, 'create');
service.createFeedback(feedbackPayload); service.createFeedback(feedbackPayload);
}); });
it('should call postToEndpoint with the linkName and payload', () => { it('should call postToEndpoint with the payload', () => {
expect(service.postToEndpoint).toHaveBeenCalledWith(linkName, feedbackPayload); expect(service.create).toHaveBeenCalledWith(feedbackPayload);
}); });
}); });

View File

@@ -1,8 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { AuthService } from '../auth/auth.service';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { map, filter, distinctUntilChanged} from 'rxjs/operators';
import { isNotEmpty } from '../../shared/empty.util';
import { DataService } from '../data/data.service'; import { DataService } from '../data/data.service';
import { Feedback } from './models/feedback.model'; import { Feedback } from './models/feedback.model';
import { FEEDBACK } from './models/feedback.resource-type'; import { FEEDBACK } from './models/feedback.resource-type';
@@ -15,9 +12,7 @@ import { HALEndpointService } from 'src/app/core/shared/hal-endpoint.service';
import { NotificationsService } from 'src/app/shared/notifications/notifications.service'; import { NotificationsService } from 'src/app/shared/notifications/notifications.service';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { DSOChangeAnalyzer } from 'src/app/core/data/dso-change-analyzer.service'; import { DSOChangeAnalyzer } from 'src/app/core/data/dso-change-analyzer.service';
import { getFirstSucceededRemoteData, getRemoteDataPayload, getFirstCompletedRemoteData } from 'src/app/core/shared/operators'; import { getFirstSucceededRemoteData, getRemoteDataPayload } from 'src/app/core/shared/operators';
import { HttpOptions } from '../dspace-rest/dspace-rest.service';
import { PostRequest } from 'src/app/core/data/request.models';
import { RemoteData } from 'src/app/core/data/remote-data'; import { RemoteData } from 'src/app/core/data/remote-data';
/** /**
@@ -55,40 +50,12 @@ export class FeedbackDataService extends DataService<Feedback> {
/** /**
* Create feedback * Create feedback
* @param uuid string the id of the feedback * @param payload feedback to be sent
* @return Observable<Feedback> * @return Observable<RemoteData<Feedback>
* server response * server response
*/ */
createFeedback(payoload: Feedback): Observable<RemoteData<Feedback>> { createFeedback(payload: Feedback): Observable<RemoteData<Feedback>> {
return this.postToEndpoint(this.linkPath, payoload); return this.create(payload);
}
/**
* Make a new post request
*
* @param linkName
* The endpoint link name
* @param body
* The post request body
* @param options
* The [HttpOptions] object
* @return Observable<Feedback>
* server response
*/
public postToEndpoint(linkName: string, body: any, options?: HttpOptions): Observable<RemoteData<Feedback>> {
const requestId = this.requestService.generateRequestId();
this.halService.getEndpoint(linkName).pipe(
filter((href: string) => isNotEmpty(href)),
distinctUntilChanged(),
map((endpointURL: string) => {
const request = new PostRequest(requestId, endpointURL, body, options);
return this.requestService.send(request);
}),
).subscribe();
return this.rdbService.buildFromRequestUUID<Feedback>(requestId).pipe(
getFirstCompletedRemoteData(),
);
} }
} }

View File

@@ -1,5 +1,5 @@
import { EPersonMock } from './../../../shared/testing/eperson.mock'; import { EPersonMock } from '../../../shared/testing/eperson.mock';
import { FeedbackDataService } from './../../../core/feedback/feedback-data.service'; import { FeedbackDataService } from '../../../core/feedback/feedback-data.service';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { FeedbackFormComponent } from './feedback-form.component'; import { FeedbackFormComponent } from './feedback-form.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
@@ -22,7 +22,7 @@ describe('FeedbackFormComponent', () => {
let de: DebugElement; let de: DebugElement;
const notificationService = new NotificationsServiceStub(); const notificationService = new NotificationsServiceStub();
const feedbackDataServiceStub = jasmine.createSpyObj('feedbackDataService', { const feedbackDataServiceStub = jasmine.createSpyObj('feedbackDataService', {
createFeedback: of(new Feedback()) create: of(new Feedback())
}); });
const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), {
getAuthenticatedUserFromStore: () => { getAuthenticatedUserFromStore: () => {
@@ -82,7 +82,7 @@ describe('FeedbackFormComponent', () => {
it('on submit should call createFeedback of feedbackDataServiceStub service', () => { it('on submit should call createFeedback of feedbackDataServiceStub service', () => {
component.createFeedback(); component.createFeedback();
fixture.detectChanges(); fixture.detectChanges();
expect(feedbackDataServiceStub.createFeedback).toHaveBeenCalled(); expect(feedbackDataServiceStub.create).toHaveBeenCalled();
}); });
}); });

View File

@@ -1,6 +1,6 @@
import { RemoteData } from './../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { NoContent } from './../../../core/shared/NoContent.model'; import { NoContent } from '../../../core/shared/NoContent.model';
import { FeedbackDataService } from './../../../core/feedback/feedback-data.service'; import { FeedbackDataService } from '../../../core/feedback/feedback-data.service';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { RouteService } from 'src/app/core/services/route.service'; import { RouteService } from 'src/app/core/services/route.service';
import { FormBuilder, Validators } from '@angular/forms'; import { FormBuilder, Validators } from '@angular/forms';
@@ -8,6 +8,7 @@ import { NotificationsService } from 'src/app/shared/notifications/notifications
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { AuthService } from 'src/app/core/auth/auth.service'; import { AuthService } from 'src/app/core/auth/auth.service';
import { EPerson } from '../../../core/eperson/models/eperson.model'; import { EPerson } from '../../../core/eperson/models/eperson.model';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
@Component({ @Component({
selector: 'ds-feedback-form', selector: 'ds-feedback-form',
@@ -58,12 +59,10 @@ export class FeedbackFormComponent implements OnInit {
* Function to create the feedback from form values * Function to create the feedback from form values
*/ */
createFeedback(): void { createFeedback(): void {
this.feedbackDataService.createFeedback(this.feedbackForm.value).subscribe((response: RemoteData<NoContent>) => { this.feedbackDataService.create(this.feedbackForm.value).pipe(getFirstCompletedRemoteData()).subscribe((response: RemoteData<NoContent>) => {
if (response.isSuccess) { if (response.isSuccess) {
this.notificationsService.success(this.translate.instant('info.feedback.create.success')); this.notificationsService.success(this.translate.instant('info.feedback.create.success'));
this.feedbackForm.reset(); this.feedbackForm.reset();
} else {
this.notificationsService.error(response.errorMessage);
} }
}); });
} }