From 7a7d27c6809275942e7fca2a17f3b05117178402 Mon Sep 17 00:00:00 2001 From: courtneypattison Date: Tue, 19 Dec 2017 13:50:12 -0800 Subject: [PATCH 1/2] Replaced Http with HttpClient --- src/app/app.module.ts | 4 +- .../dspace-rest-v2.service.spec.ts | 37 +++++++++++++++++++ .../dspace-rest-v2/dspace-rest-v2.service.ts | 16 ++++---- src/app/shared/api.service.ts | 6 +-- 4 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index ef1e098f02..c2728941d0 100755 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { CommonModule, APP_BASE_HREF } from '@angular/common'; -import { HttpModule } from '@angular/http'; +import { HttpClientModule } from '@angular/common/http'; import { EffectsModule } from '@ngrx/effects'; import { StoreModule, MetaReducer, META_REDUCERS } from '@ngrx/store'; @@ -51,7 +51,7 @@ if (!ENV_CONFIG.production) { @NgModule({ imports: [ CommonModule, - HttpModule, + HttpClientModule, AppRoutingModule, CoreModule.forRoot(), NgbModule.forRoot(), diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts new file mode 100644 index 0000000000..b45b7ae526 --- /dev/null +++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts @@ -0,0 +1,37 @@ +import { TestBed, inject } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +import { DSpaceRESTv2Service } from './dspace-rest-v2.service'; + +describe('DSpaceRESTv2Service', () => { + let dSpaceRESTv2Service: DSpaceRESTv2Service; + let httpMock: HttpTestingController; + const mockDSpaceRESTV2Response = {}; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [DSpaceRESTv2Service] + }); + + dSpaceRESTv2Service = TestBed.get(DSpaceRESTv2Service); + httpMock = TestBed.get(HttpTestingController); + }); + + it('should be created', inject([DSpaceRESTv2Service], (service: DSpaceRESTv2Service) => { + expect(service).toBeTruthy(); + })); + + describe('#get', () => { + it('should return an Observable', () => { + const url = 'http://www.dspace.org/'; + dSpaceRESTv2Service.get(url).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const req = httpMock.expectOne(url); + expect(req.request.method).toBe('GET'); + req.flush(mockDSpaceRESTV2Response); + }); + }); +}); diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts index 6464268201..1c719a6831 100644 --- a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts +++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts @@ -1,8 +1,7 @@ -import { Inject, Injectable } from '@angular/core'; -import { Http, RequestOptionsArgs } from '@angular/http'; +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; -import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; import { DSpaceRESTV2Response } from './dspace-rest-v2-response.model'; import { GLOBAL_CONFIG, GlobalConfig } from '../../../config'; @@ -13,7 +12,7 @@ import { GLOBAL_CONFIG, GlobalConfig } from '../../../config'; @Injectable() export class DSpaceRESTv2Service { - constructor(private http: Http, @Inject(GLOBAL_CONFIG) private EnvConfig: GlobalConfig) { + constructor(private http: HttpClient) { } @@ -23,13 +22,12 @@ export class DSpaceRESTv2Service { * @param absoluteURL * A URL * @param options - * A RequestOptionsArgs object, with options for the http call. - * @return {Observable} - * An Observable containing the response from the server + * An object, with options for the http call. + * @return {Observable} + * An Observable containing the response from the server */ - get(absoluteURL: string, options?: RequestOptionsArgs): Observable { + get(absoluteURL: string, options?: {}): Observable { return this.http.get(absoluteURL, options) - .map((res) => ({ payload: res.json(), statusCode: res.statusText })) .catch((err) => { console.log('Error: ', err); return Observable.throw(err); diff --git a/src/app/shared/api.service.ts b/src/app/shared/api.service.ts index 64a1b538c8..90c79d132e 100644 --- a/src/app/shared/api.service.ts +++ b/src/app/shared/api.service.ts @@ -1,14 +1,13 @@ import 'rxjs/add/observable/throw'; -import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import { Injectable } from '@angular/core'; -import { Http } from '@angular/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; @Injectable() export class ApiService { - constructor(public _http: Http) { + constructor(public _http: HttpClient) { } @@ -17,7 +16,6 @@ export class ApiService { */ get(url: string, options?: any) { return this._http.get(url, options) - .map((res) => res.json()) .catch((err) => { console.log('Error: ', err); return Observable.throw(err); From d3b8bf063d891d8839e44124326dc27c08387b74 Mon Sep 17 00:00:00 2001 From: courtneypattison Date: Fri, 22 Dec 2017 12:19:47 -0800 Subject: [PATCH 2/2] DSpaceRESTv2Service gets response with payload and statusCode --- .../dspace-rest-v2.service.spec.ts | 37 +++++++++++++++++-- .../dspace-rest-v2/dspace-rest-v2.service.ts | 9 ++--- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts index b45b7ae526..4893908627 100644 --- a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts +++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.spec.ts @@ -6,7 +6,8 @@ import { DSpaceRESTv2Service } from './dspace-rest-v2.service'; describe('DSpaceRESTv2Service', () => { let dSpaceRESTv2Service: DSpaceRESTv2Service; let httpMock: HttpTestingController; - const mockDSpaceRESTV2Response = {}; + const url = 'http://www.dspace.org/'; + const mockError = new ErrorEvent('test error'); beforeEach(() => { TestBed.configureTestingModule({ @@ -18,20 +19,50 @@ describe('DSpaceRESTv2Service', () => { httpMock = TestBed.get(HttpTestingController); }); + afterEach(() => httpMock.verify()); + it('should be created', inject([DSpaceRESTv2Service], (service: DSpaceRESTv2Service) => { expect(service).toBeTruthy(); })); describe('#get', () => { it('should return an Observable', () => { - const url = 'http://www.dspace.org/'; + const mockPayload = { + page: 1 + }; + const mockStatusCode = 'GREAT'; + dSpaceRESTv2Service.get(url).subscribe((response) => { expect(response).toBeTruthy(); + expect(response.statusCode).toEqual(mockStatusCode); + expect(response.payload.page).toEqual(mockPayload.page); }); const req = httpMock.expectOne(url); expect(req.request.method).toBe('GET'); - req.flush(mockDSpaceRESTV2Response); + req.flush(mockPayload, { statusText: mockStatusCode}); }); }); + + it('should throw an error', () => { + dSpaceRESTv2Service.get(url).subscribe(() => undefined, (err) => { + expect(err.error).toBe(mockError); + }); + + const req = httpMock.expectOne(url); + expect(req.request.method).toBe('GET'); + req.error(mockError); + }); + + it('should log an error', () => { + spyOn(console, 'log'); + + dSpaceRESTv2Service.get(url).subscribe(() => undefined, (err) => { + expect(console.log).toHaveBeenCalled(); + }); + + const req = httpMock.expectOne(url); + expect(req.request.method).toBe('GET'); + req.error(mockError); + }); }); diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts index 1c719a6831..e72121c4a4 100644 --- a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts +++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts @@ -1,11 +1,9 @@ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import { DSpaceRESTV2Response } from './dspace-rest-v2-response.model'; -import { GLOBAL_CONFIG, GlobalConfig } from '../../../config'; - /** * Service to access DSpace's REST API */ @@ -26,8 +24,9 @@ export class DSpaceRESTv2Service { * @return {Observable} * An Observable containing the response from the server */ - get(absoluteURL: string, options?: {}): Observable { - return this.http.get(absoluteURL, options) + get(absoluteURL: string): Observable { + return this.http.get(absoluteURL, { observe: 'response' }) + .map((res: HttpResponse) => ({ payload: res.body, statusCode: res.statusText })) .catch((err) => { console.log('Error: ', err); return Observable.throw(err);