mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +00:00
[CST-4875] feedback created using DataService
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
import { of as observableOf } from 'rxjs';
|
||||
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
||||
import { FeedbackDataService } from './feedback-data.service';
|
||||
import { HALLink } from '../shared/hal-link.model';
|
||||
import { Item } from '../shared/item.model';
|
||||
@@ -33,8 +31,6 @@ describe('FeedbackDataService', () => {
|
||||
page: '/home'
|
||||
});
|
||||
|
||||
const linkName = 'feedbacks';
|
||||
|
||||
|
||||
function initTestService(): FeedbackDataService {
|
||||
bundleLink = '/items/0fdc0cd7-ff8c-433d-b33c-9b56108abc07/bundles';
|
||||
@@ -92,12 +88,12 @@ describe('FeedbackDataService', () => {
|
||||
|
||||
describe('createFeedback', () => {
|
||||
beforeEach(() => {
|
||||
spyOn(service, 'postToEndpoint');
|
||||
spyOn(service, 'create');
|
||||
service.createFeedback(feedbackPayload);
|
||||
});
|
||||
|
||||
it('should call postToEndpoint with the linkName and payload', () => {
|
||||
expect(service.postToEndpoint).toHaveBeenCalledWith(linkName, feedbackPayload);
|
||||
it('should call postToEndpoint with the payload', () => {
|
||||
expect(service.create).toHaveBeenCalledWith(feedbackPayload);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -1,8 +1,5 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map, filter, distinctUntilChanged} from 'rxjs/operators';
|
||||
import { isNotEmpty } from '../../shared/empty.util';
|
||||
import { DataService } from '../data/data.service';
|
||||
import { Feedback } from './models/feedback.model';
|
||||
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 { HttpClient } from '@angular/common/http';
|
||||
import { DSOChangeAnalyzer } from 'src/app/core/data/dso-change-analyzer.service';
|
||||
import { getFirstSucceededRemoteData, getRemoteDataPayload, getFirstCompletedRemoteData } from 'src/app/core/shared/operators';
|
||||
import { HttpOptions } from '../dspace-rest/dspace-rest.service';
|
||||
import { PostRequest } from 'src/app/core/data/request.models';
|
||||
import { getFirstSucceededRemoteData, getRemoteDataPayload } from 'src/app/core/shared/operators';
|
||||
import { RemoteData } from 'src/app/core/data/remote-data';
|
||||
|
||||
/**
|
||||
@@ -55,40 +50,12 @@ export class FeedbackDataService extends DataService<Feedback> {
|
||||
|
||||
/**
|
||||
* Create feedback
|
||||
* @param uuid string the id of the feedback
|
||||
* @return Observable<Feedback>
|
||||
* @param payload feedback to be sent
|
||||
* @return Observable<RemoteData<Feedback>
|
||||
* server response
|
||||
*/
|
||||
createFeedback(payoload: Feedback): Observable<RemoteData<Feedback>> {
|
||||
return this.postToEndpoint(this.linkPath, payoload);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(),
|
||||
);
|
||||
createFeedback(payload: Feedback): Observable<RemoteData<Feedback>> {
|
||||
return this.create(payload);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { EPersonMock } from './../../../shared/testing/eperson.mock';
|
||||
import { FeedbackDataService } from './../../../core/feedback/feedback-data.service';
|
||||
import { EPersonMock } from '../../../shared/testing/eperson.mock';
|
||||
import { FeedbackDataService } from '../../../core/feedback/feedback-data.service';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
import { FeedbackFormComponent } from './feedback-form.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
@@ -22,7 +22,7 @@ describe('FeedbackFormComponent', () => {
|
||||
let de: DebugElement;
|
||||
const notificationService = new NotificationsServiceStub();
|
||||
const feedbackDataServiceStub = jasmine.createSpyObj('feedbackDataService', {
|
||||
createFeedback: of(new Feedback())
|
||||
create: of(new Feedback())
|
||||
});
|
||||
const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), {
|
||||
getAuthenticatedUserFromStore: () => {
|
||||
@@ -82,7 +82,7 @@ describe('FeedbackFormComponent', () => {
|
||||
it('on submit should call createFeedback of feedbackDataServiceStub service', () => {
|
||||
component.createFeedback();
|
||||
fixture.detectChanges();
|
||||
expect(feedbackDataServiceStub.createFeedback).toHaveBeenCalled();
|
||||
expect(feedbackDataServiceStub.create).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { RemoteData } from './../../../core/data/remote-data';
|
||||
import { NoContent } from './../../../core/shared/NoContent.model';
|
||||
import { FeedbackDataService } from './../../../core/feedback/feedback-data.service';
|
||||
import { RemoteData } from '../../../core/data/remote-data';
|
||||
import { NoContent } from '../../../core/shared/NoContent.model';
|
||||
import { FeedbackDataService } from '../../../core/feedback/feedback-data.service';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { RouteService } from 'src/app/core/services/route.service';
|
||||
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 { AuthService } from 'src/app/core/auth/auth.service';
|
||||
import { EPerson } from '../../../core/eperson/models/eperson.model';
|
||||
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'ds-feedback-form',
|
||||
@@ -58,12 +59,10 @@ export class FeedbackFormComponent implements OnInit {
|
||||
* Function to create the feedback from form values
|
||||
*/
|
||||
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) {
|
||||
this.notificationsService.success(this.translate.instant('info.feedback.create.success'));
|
||||
this.feedbackForm.reset();
|
||||
} else {
|
||||
this.notificationsService.error(response.errorMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user