1+ var should = require ( 'should' ) ;
2+
3+ describe ( 'lib/restHandlers' , function ( ) {
4+
5+ var defaultRequest = {
6+ url : {
7+ href : '' ,
8+ query : ''
9+ }
10+ } ;
11+
12+ var defaultResponse = {
13+ statusCode : null
14+ } ;
15+
16+ var RestHandlers = require ( './../../lib/restHandlers' ) ;
17+ var restHandlers = new RestHandlers ( { } ) ;
18+
19+ describe ( 'genericResponse()' , function ( ) {
20+ it ( 'should pass data in callback on success' , function ( ) {
21+ var responseBody = '{"success":true, "data":[{"id":1}], "additional_data":[]}' ;
22+
23+ var called = false ;
24+ var callback = function ( responseError , responseData ) {
25+ called = true ;
26+ should ( responseData . length ) . be . equal ( 1 ) ;
27+ should ( responseData [ 0 ] . id ) . be . equal ( 1 ) ;
28+ } ;
29+
30+ restHandlers . genericResponse (
31+ 'GET' , { } , responseBody , callback , defaultRequest , defaultResponse
32+ ) ;
33+ should ( called ) . be . equal ( true ) ;
34+ } ) ;
35+
36+ it ( 'should pass error in callback on response containing error' , function ( ) {
37+ var responseBody = '{"success":false, "error":"Backend error"}' ;
38+
39+ var called = false ;
40+ var callback = function ( responseError ) {
41+ called = true ;
42+ should ( responseError . message ) . be . equal ( 'Backend error' ) ;
43+ } ;
44+
45+ restHandlers . genericResponse (
46+ 'GET' , { } , responseBody , callback , defaultRequest , defaultResponse
47+ ) ;
48+ should ( called ) . be . equal ( true ) ;
49+ } ) ;
50+
51+ describe ( 'error cases' , function ( ) {
52+ it ( 'should return undefined if callback is not present' , function ( ) {
53+ var result = restHandlers . genericResponse (
54+ 'GET' , { } , { } , null , defaultRequest
55+ ) ;
56+
57+ should ( result ) . be . equal ( undefined ) ;
58+ } ) ;
59+
60+ it ( 'should throw basic error if response body is not json (plain text)' , function ( ) {
61+ var responseBody = 'Oops something went wrong' ;
62+
63+ var called = false ;
64+ var callback = function ( responseError ) {
65+ called = true ;
66+ should ( responseError . message ) . be . equal ( 'Malformed Pipedrive API response' ) ;
67+ } ;
68+
69+ restHandlers . genericResponse (
70+ 'GET' , { } , responseBody , callback , defaultRequest , defaultResponse
71+ ) ;
72+ should ( called ) . be . equal ( true ) ;
73+ } ) ;
74+
75+
76+ describe ( 'handle 4xx/5xx http statuses' , function ( ) {
77+ it ( 'should throw error, if has .error in response' , function ( ) {
78+ var responseBody = '{"error": "Backend error"}' ;
79+
80+ var called = false ;
81+ var callback = function ( responseError ) {
82+ called = true ;
83+ should ( responseError . message ) . be . equal ( 'Pipedrive API error:Backend error' ) ;
84+ } ;
85+
86+ restHandlers . genericResponse (
87+ 'GET' , { } , responseBody , callback , defaultRequest , {
88+ statusCode : 500
89+ }
90+ ) ;
91+ should ( called ) . be . equal ( true ) ;
92+ } ) ;
93+
94+ it ( 'should throw "Malformed" error, if response is not json' , function ( ) {
95+ var responseBody = "Not valid json response" ;
96+
97+ var called = false ;
98+ var callback = function ( responseError ) {
99+ called = true ;
100+ should ( responseError . message ) . be . equal ( 'Malformed Pipedrive API response' ) ;
101+ } ;
102+
103+ restHandlers . genericResponse (
104+ 'GET' , { } , responseBody , callback , defaultRequest , {
105+ statusCode : 404 ,
106+ rawEncoded : responseBody
107+ }
108+ ) ;
109+ should ( called ) . be . equal ( true ) ;
110+ } ) ;
111+
112+ describe ( 'raw response handling' , function ( ) {
113+
114+ it ( 'should throw custom error object, if has internal raw ._error passed from rest.js' , function ( ) {
115+ var responseBody = 'Not found' ;
116+
117+ var called = false ;
118+ var callback = function ( responseError ) {
119+ called = true ;
120+ should ( responseError . message ) . be . equal ( 'Custom error' ) ;
121+ } ;
122+
123+ restHandlers . genericResponse (
124+ 'GET' , { } , responseBody , callback , defaultRequest , {
125+ statusCode : 404 ,
126+ _error : {
127+ message : "Custom error"
128+ }
129+ }
130+ ) ;
131+ should ( called ) . be . equal ( true ) ;
132+ } ) ;
133+
134+ it ( 'should throw custom error object, if body.error is missing, but rawEncoded.error is passed from rest.js' , function ( ) {
135+ var responseBody = 'Not found' ;
136+
137+ var called = false ;
138+ var callback = function ( responseError ) {
139+ called = true ;
140+ should ( responseError . message ) . be . equal ( 'Pipedrive API error:Custom backend error' ) ;
141+ } ;
142+
143+ restHandlers . genericResponse (
144+ 'GET' , { } , responseBody , callback , defaultRequest , {
145+ statusCode : 404 ,
146+ rawEncoded : '{"error":"Custom backend error"}'
147+ }
148+ ) ;
149+ should ( called ) . be . equal ( true ) ;
150+ } ) ;
151+ } ) ;
152+ } ) ;
153+ } ) ;
154+ } ) ;
155+ } ) ;
0 commit comments