From af48726dbdf6c09dbe49a8516bfd5eaa4d4576ad Mon Sep 17 00:00:00 2001 From: Sebastian Carmona <83849194+Kaevan89@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:07:11 -0500 Subject: [PATCH] Use backend message instead of custom error (#14) * Use backend-message instead of custom class. * Update error tests. * Update new coverage badge. * Update version and bundle * Use double quote instead of single quote. * Remove not needed whitespaces. * Handle empty response. * If empty body, return raise error without message. * Add errors for requests. --- Gemfile.lock | 66 +++++++++++++++++------------------- coverage/coverage-badge.png | Bin 9632 -> 9437 bytes lib/veryfi/error.rb | 36 +++++++++++++++----- lib/veryfi/request.rb | 9 ++--- lib/veryfi/version.rb | 2 +- spec/veryfi/request_spec.rb | 59 ++++++++++++++++++++++++++------ 6 files changed, 114 insertions(+), 58 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index cc37ab6..054efed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - veryfi (1.0.0) + veryfi (1.0.1) base64 (~> 0.1) faraday (~> 1.7) openssl (>= 2.2, < 3.1) @@ -13,15 +13,15 @@ GEM public_suffix (>= 2.0.2, < 5.0) ast (2.4.2) base64 (0.1.1) - bundler-audit (0.9.0) + bundler-audit (0.9.1) bundler (>= 1.2.0, < 3) thor (~> 1.0) coderay (1.1.3) crack (0.4.5) rexml - diff-lcs (1.4.4) + diff-lcs (1.5.0) docile (1.4.0) - faraday (1.10.0) + faraday (1.10.1) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -37,46 +37,44 @@ GEM faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.3) - multipart-post (>= 1.2, < 3) + faraday-multipart (1.0.4) + multipart-post (~> 2) faraday-net_http (1.0.1) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) hashdiff (1.0.1) - ipaddr (1.2.4) method_source (1.0.0) - multipart-post (2.1.1) - openssl (2.2.1) - ipaddr - parallel (1.20.1) - parser (3.0.2.0) + multipart-post (2.2.3) + openssl (3.0.0) + parallel (1.22.1) + parser (3.1.2.1) ast (~> 2.4.1) pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (4.0.6) - rainbow (3.0.0) + public_suffix (4.0.7) + rainbow (3.1.1) rake (13.0.6) - regexp_parser (2.1.1) + regexp_parser (2.5.0) rexml (3.2.5) - rspec (3.10.0) - rspec-core (~> 3.10.0) - rspec-expectations (~> 3.10.0) - rspec-mocks (~> 3.10.0) - rspec-core (3.10.1) - rspec-support (~> 3.10.0) - rspec-expectations (3.10.1) + rspec (3.11.0) + rspec-core (~> 3.11.0) + rspec-expectations (~> 3.11.0) + rspec-mocks (~> 3.11.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) + rspec-support (~> 3.11.0) rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.10.2) + rspec-mocks (3.11.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-support (3.10.2) + rspec-support (~> 3.11.0) + rspec-support (3.11.0) rubocop (0.93.1) parallel (~> 1.10) parser (>= 2.7.1.5) @@ -86,8 +84,8 @@ GEM rubocop-ast (>= 0.6.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (1.11.0) - parser (>= 3.0.1.1) + rubocop-ast (1.21.0) + parser (>= 3.1.1.0) rubocop-rspec (1.44.1) rubocop (~> 0.87) rubocop-ast (>= 0.7.1) @@ -99,11 +97,11 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-badge (2.0.2) simplecov-html (0.12.3) - simplecov_json_formatter (0.1.3) - thor (1.1.0) - unicode-display_width (1.7.0) - vcr (6.0.0) - webmock (3.14.0) + simplecov_json_formatter (0.1.4) + thor (1.2.1) + unicode-display_width (1.8.0) + vcr (6.1.0) + webmock (3.17.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -129,4 +127,4 @@ DEPENDENCIES webmock (~> 3.14) BUNDLED WITH - 2.2.26 + 2.2.33 diff --git a/coverage/coverage-badge.png b/coverage/coverage-badge.png index 2a87bd7b6717b5fbc2811c9e6db63162bb407598..16ffe0b964e6f7538d986c05ee552c29ab824899 100644 GIT binary patch literal 9437 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 X|2Iz~vt`}~4}^?_qIi|4QSko(Uo)E> delta 9543 zcmZ{KRa9I}&@BX)0Kpv+Gz1Hp;7$l0Tn2Zy!QmhQ0tph_86ZG#XK)Sf9^7?s_xZ{9 z->19ot+jfchdvM8UAwDm*RCZwhG9^rr}pI(VL`yd@^~c0btE0} z)&IwSUSl^Dv3Ppl-FkVYP{mV9yCptoOq3jk!rL}>cJ>;8HvN#NxC<>E9eb#xAj}@)EI$?Ck{xSzKXyK)U<+w|};&p$Z(mxup=k$wG~Z z=z}*wDne@?HU4)}>Zuq#GbKVj8-kuXGFW|Z&OVrg+7XD<;&Z%!W-(ZspIqzf^^t7@ zMpnCvwc>H;G;vLSuzNe6ZNITbGRcmcIcye?Wb(|@bC12{o7D( znMIXke43Sk#ySynbxuBF4Tsd}-8QNprKpzd$=B{{!ad)KavGN1Ht0C625ZG_K+51X zdoOMn3nF_;UPEqD9zJ)=R=IHVyhqAsckGWB&35Ae^yINtJL|q0Bhs`9H^|8Hdh?K@ z<>K-j3Kt3Lt0`yV*CPeq#jZIbLLMEDn|;~Nvjg)fmqzKWE*0;mhPrJmv*6zF~*RalL>0Y zFIwQ{?*teRa`yXVy>i~cZ}>I5@dYZ3SLv~y-FLS6Q89~vbH{VRq1p$@-?Iuny%i;7 zwE~-55qmGOEb|`y4L(;SwP#o77-ai9jE~|2{63qY3wg_jF=dY9ee`Z?yNl ztb4QH+GEOsR!3RzT8jq_LW8PZJOvJ0D>rcBJXE^*pg$&@Gov<(rZgIr1@vrzeWd^S zVAD_XF(xN$-iEZk!(u96#XO4!M9%&AmswkdpYyt)5N}0*iP`^Wi7#Fq_5*GxLR($X z#1_^@9tbBmw>(h!T;D+N{kVoY+e{0_c7rbY_MmxIc^i#QTQ+jpkX*V)H@QCuAmKWK zs^~Oy*wx;mjuL7B7!)ui>B((~w`e&f^49Wm7qE6t|*RF za!+6uP}7^uTXjx;HTic^g$RfzemkU+3R+mn+4i(28QrdG!ffM5;FS-tny!S1$XK^{ z^OHV;CsA_mTAGD&Pr+Ig(?}2wF>98)yg58>2AIjv%l1(8bXwlq6yqWkGiwqv3ovS_ z0+D^`xskBkju!08H>#u-zALuA;T6M!1OVkm&ZUG?%|E--OhqAS7SQ++Gwq|P%L*S- z`GD|FP2F^ej1Yu~Y~%Wu2xIztalw}uDZeev$@OaxbC)_Y$I zkDtRwNuS=A#nMpV4TjLQ-qoJp*7O#;Gu$ICuY0RM za4#z>FGZcI)oRt#QoW+=6*Ncd<_MA(mn-D}PAM&Ltae06QE;7Pm>>Y@VOaGmKxe19!K0oJ;C{qn>Pkjr{_$GLsiUuT*mKG##F zYOc5ZaDH8xWq&MwZ)}vphE(+4lr2@Y@wb)8uOWc%zF)fjcdUx%Dd~az8SMdwDRb4^ zNM@HJ|0V(8CGY%x6+!-`ZNm;0k>{HP!K(!|(I}5Vu2HTwuJR;!s|7Cau)$1o2Di8$&n1it zO5DaIw(5u>9@>|5AR6nnKz-s615kEipqJWxG>cPSYBBo^}a0lM!aH1XCqRI$& zQ89tNGwk>P3cIK*Ts2w#H0Q-m`Gy?sr?G<8n}!+{1F%5w*QUhUf=9n7`-713Wb zFj~B~bL>?&w;cUqaMyUDZ>3UW4 zT|KR=pD`4~1~D_98;ULOFshrE2<{)dD9a4?BmF9(xHVF;KS)4~r0|sA{V+Nrmg)FY zIa5G?7jEU)j_v7kS~wW@9pbD}n9<{ICGZI-c=RKk?O%J)rrPCc82?P7mkc!R4*WQ_ z&{}!%kbl4B$Kd^G`)b#87|d6gH4pkvUfC>(BAczx@Lp z^Jl|>U+6WLs61~GhwrKE-~&*YhDbUHa?(EzSZYXranm!{5^^Wj7DMk0-F z7yZ_D2tjmbX;@(*6yTTGK6zkE88n;SE3uAWvPSS+fjTUD&@A#O$<;UD5;LGG>Mder z$`I*^rXkcjz4Dp!($iYZs(QK0-yzW1#EbpX(Z%}{rGhGWDC$8cYczgk_X@5 zx&8B(>DhC*cPk&_JL*D=4IQt8#QFGgQ3V2RfemIYUi6lj!KvQKI1iH8etI6bN0CGt&C|E$&^f(axt_VNMJ4$);Qi ziBY6&OOc3RB&l_+$os2jz_#^3xa5BHLyYV6P}xz8u*AHb15ISGZnhp?UTJybr>39`e6I{C^ z?*Z_i&X%~>H#Zwc{6cw&0nPJId=* zDPI7eMC*dEqHlVlLffG73Bt8d71-yyBnrjB)NLls^d_Y7){OjEWE74$e#1esXj zKCbsn+q3Q*8d(!lT#plW=x~uGCRW@{jzMsYD4TP(RbbPv zov@wgJ@J_NjR(j|cCcC(p%qO}xCLf|la_nFbX+wsf@P z_^R%z=qhzcQ4{CVmkA)k7x9C`2Ty#p>=vP`Sw3+tC|^@NjU1|aE{WQ4LRVSXn$hO< z)Wd86#0<&EL&0}lJWyB5{3PyfzzeXh?XwlxwC5m?Ex^gm9npyv#$I`vznZi2A~mvf zEeD9xUuRzTcmJN2Th~=PQ#sKp>Iq=NZkJH#K9_pgKTqw4Ln*WC=&p^M3*(<2q_TqS4(;ONssgz3+k z0)nXfee@7jTJqw@Zgp^eznR8qgx{9PL6X?Z&-^=g5h6$#{-aW4A9u8s)!@vdWJ=zt zQQYoq&&n!JEo&yAi?$_0@mMn5@2aKV<*>E(vq^-KUYcXFJB2z*o9~ zje!0(VhZ^3@VNymeU9W9@Z%${mn+_{DbCMoo0W#AdQ${LoU_xQZce zZFgtdVcK~MrO}sEJOEv;+DKHL)@sHy0`@j9PVk6{Mn-6HhuM!-~D zN_02DzHH8wlUZ0LIhzpsrUO=z=&kp_cM)7#?5^JCA8$I-ZiSodf84y3#L<^sJ<0vB znq>glg80gE6D<~`ID%I&S}b%~4=zbvNC<}qmXKaykjcCPmYr63gxL@H>qSmZk01)) zQeta`wq@*B5(dU;iW@b{$!Muc;zG9^6z4H`USn^}{(Mlz2Eo#~SrH%i?7}>-1=&%OYz_U8G$mqWesLJgh8dX!8%DV-68( zXLVQ|qaypu;(0D*+n=rYbbvg`H&eDnS1IC1+AYV4qc$C9{0b)G7*ABs*)dEQgk475 z!_-Lm)s^1q2^w+sl@xVr=4>|pkhap*!PNzcub~;S!u}VoBj??|d_WBP~H$U*c#qVXuorm0Ol*mfrF9#j0!yi2;)(vT*^-|xHd5m4VuNLzjvoqNXB(e3>cu}MuCIpUSU-g;UZi=zU-4_2iZ*3r2FSoK(RG0w9=N@q8i_1?PI6=xnN7N-q>{-0Jdk^RrJ;h~{ zmp>a~P>``A0v;G{qcAN4vH(wGEBh0SaQUg7kpztuP?`2}Q_@!U@<#T@yLWJDzzg5tsv2{v(UCZ0ep0xCF{(Ogmi;1h4$Sk?BhUpDZgO_*_xWv6me$U6 zIlSz2ImtR0xVmnbYB-E2gVw771>w zjwiOd2%Z3&C&@3-T8fW%rniVWLX_>VHK!L1Zq3dPWnwJ#<72cUr^#>D&vT+t)Sxj& z$`zg%mH6V%U_`G1{3u^7lHbHdBTnTKmQHJSp*!CD(G6uU80PDV`l5^b&|KrP1YptQ zo#4D>-a?H>WDP+DO)(_m3?`|5H!rqF9$Y#sum($5_Unrl%EhLnh;@~MLwWJI7!3Vx z-P4e#?d^pm-5;RgIw2AU6_h;2;E}Ii3BT#5dc8TLt+#UkejQZdxf6_J-i__gddKMw z1kZC|W)(AbJ%dKhk|=7}dfU)h_cVwZ8^L z{n-};LqW@Hs0=#h0t|?bh7KVV?=lKKv8xv+Y~Pl6Q<~hQF*pSsd1{sb=Q5uMV~kft zmVD)+BgaN3?;svRHPm+XEtfj=y!7DS!%&qgzm#aV9-!i`)C*p?10lAF!L%)H;sfQP z=>gzlj(H0tAWvj$<(i`y0U5<&bn6?A&xjbm!Yv*rMiI=6D|bE#ur+%~IL>&56pgz5 zmZ?z^))6|X7ma*r@!4alNiL~3>$k2FT0!XS0vsD@b}owA3Ad1?X>R+Sxnfn|hL;#`ewca+)5iZ0^W^W@$=(z^;YjcKemD(Nd z{xrAi`P~&}tRNZoXFRFBCS@Bpe`a+tdz@j1Hzp5sBBx3EmAT+1)Cz&BULRb%Ol|yn zFUpwav%WsOE`sUAp{fgvQ~{p-Xi-g^O2hTdmYsgyJFxq+c6Z*C+*5Nb4(r>-Y@m4v zbmgnwBh|g#z2O*Si?+c$`@SL??Vz0F9f?2gIGDa;ayV+giQg6}byj2EhP}96sF_Q> zh48w#4yj2(Sh`7Ul`*Pzi3E=F4-?PD&@Gwp@T9h{IML*M2V;nLp9#FLx@~@voHVDl z+PeMeS)!wTbn)-K;4XJs^N9BV9EhUZ4{_C$Lr^<|xC0%q6klIhr`~1g#I&{jc?V~q ze>u32dcpLd>7wVXi1opXzHX=R*hcy2yk3`77EJbXZYBiRMd%l!_UHiYn4GH8`WhYm zRPI(p3aR;cf#)hJY?C9C-NzSsMkh?B?E3fB7TopMR}ojw99(PL^WMBAAThahiPfyE zvItM1;6=Zo(BszW+WeDd!p07fS9`gz)zBAR$T*FRp~Jkx)KwAG1uwA>cg8mTu9ET3 za2)fSPFD`v`nsnGPosM+yj_YSMwoQhpVr|gaz~c$!$lEKR3#jj_XrAU(=GP+m}rl= zLO7*`{+t^jPtjMXzr~%k0iBI?WNQiN-k7)6BcjrLm65V>?c)7NuCUi5K30*xLla{f zsXK4j--VCE>y)$*pmQ04xBlF6ztsh~a*^N?~OkEs&^(_*%)L@CnlFjWh085|UdCF(%nNxbNlF z6mh3RItqzA2-6Vgd;tbr<_CPj@lvu1$uA3st{eGQ-H#gGZUh=@=Y}pTI{Pp0&R|Yg zUwp${3)U*TCwF^I#azP&+=hQvZPgw+@>qda z-kE2J3t~%rb>ypjD>w6Kh*e}aywJ_bz|$Dl@-dMDQf#1U>Z7eTZHkviBWpN_g)1m; z1?`>{E6n74BALY8lPK}KE~yP;nrxt6tehG@mXlR++fWD13#cfyiy!^3YhU*dOInSo zbUJlt30nxIAmWrNAvVF0km&haw2GLNl9D?g%m{`5Xvpw{Lc@;PpwlQ{berE5yO9#M ztHF~9Ff(rtmdm>Q|9 zf9RUvA)4PAK}|p3;$I66xAZyAwl2ncqU%4KSM+n2{>=6HcN?FU^_F!=qWgg0>@`Ke zF7%U$19jVwm!9Gg$NUwYl#JQDOv1gsc8~Bzb%3E|V&FA)v9!VR$(n3_SQB~RHj=rm zBG9*|;mK_If*$8NI@A;J6)nD9bi-Dn=w(Qs!$rwTv}3Qo=VJ42LdTpNpmD6)fAf{_ z7bVts%pV@`F{@t(M-oaL=J=zf;2%Rk1cnN9i*T-7BmGJd{Vvx8iiFYjSG#~c&aT?4 z$2Jo85*-H3ygu_>#DC%CdHpPhBrKld@d~@j#pAHry}@vAUS}U>ZaJBrYN^I?_87?* zZ=#fptSeYsOR$t#VOn4#Wv;FhA=$Z;0U@`(#IgN>!D zwhf8@$L%TutNyWWTk~6oW#E&w*Exab2L>N61)qw(sR_O|giMCSvzE3X1bp;9Z?6W$ zbvMN{g`f(<$=R>dh;%$Mys6r!-Vgn~JcWl%C;NRGnyY(zJ3Ct%R}=Sim>nQPIf6(X zoEWQ!-YS!tXtegaihIR6rhoy9ZeLdLB5Cw!Fdp}_JN8R-_j7%zXRj@%QACRf7s{_fy= zIk&YaoY%gbu{P%>{6R6}XXZ=hPf2cdGf9>_Q*M4=Xfr|9h0>p|fTlILiSF}qIOFft ztfTxdpEjw%pcg1K>)`;Mv#|1=`ckG=_vq-PE8M>U^YOaqk@3x&H)pNqb<5v7KdfIU z#3rk7f0_F{X;{?v@v{WFKNpG?)`r#WIM?@3`wAub1!EQdFLOmlum76j{cO~duPQoJ zU>S0;cfEsY|F$jgEiZdRd5G`&l$<#f`(`t5t_JF}@^ZXlCkcHJXu-y$>^-V%I_)GI)su(i@#Fvkg(aVH4J6fX~Vc% zf;t>f;WEy`1jt5XrmM*zwS!y)nx##=PtXOUpLFm0J>Y-r2KdyKh^!oO15Fo}PPyX#y;F6YgcI2@WR)RwLyVenvgpy1t18Y~%W zR+C<_VFthPfZt~2qjKV?v7(sO4tNj00qMSv8vFHCwt+g;_d5zBS)1gi5lSokV%rI` z9EGRBI@y21;O1lJZgObT_=lT~;`{H=VYDuG@CX^P1Tbg_Q?|Jc8V4UHWy{al$2vrw z723U$Nh<6aY@`gOXOpYAT#u$_r%MWw8DJMSOZ-y2A+S{HEqM_$L^ZwxVXd)qpKB>v zu;x{zzW?MOHlz($suCkphi6caO|JKtwieUU3?iXGKS<>Ro8s3xst-#1-h)?} ze>a_H;n$90B0BiKe>Wtne;fsVAxO{W`34-&GgE1jmerstyyQ_+I2L;reU`*is(f+E zyn6OQb%?J&oMqPta~C-%rz*EPHuk_4o&VFe=U10EFA}Z^%+t2rZ`*g>c9ioHFH2RV zFr=qr;(Xahd3DI{rlCq_)QD&ITX%iO!Mp}g+>%3VX#)8f!eKN)ilq}qC8rfYs;Zab z?NqT+XJ-@BWYe-OmR2a^QT8tw73<*L6=ZITV6E4$q??)6iva`}(E+&x_X{ zG0R)m^>1Npb5n<2n=%9T@iaKEN+*J!;j3T;el#C+a4e54$tA(NqMfT>JNi4!WF$4? zobeNJ6}$^6fM)R!7&cJ6Lk0j0^o8G8#IgTLUd^=7ob;?;kKI^<7Q{*CTf}qmp-IXL zmsN-Vw*1PgjrryxD}4L2Ks<=uD?|Y*F;-Qvlela=9qs04l&N`$7D$x$mr*mQ9CB5ebP{?y$|DDQ|K2mG(>%i;*#lVszb^l}1ApT*mj{$kH?!I<8BIEfde9i&-{ zH#F?F{%V&5Xz0;^R(i;JXQ}^lE1c2B0257pA+V~tQ`%hcrli$$;umuTT;r5ibpbo7Y-}QiO#StDC!rvAfQpwKegr zDu&hMVx z3Ow)n*6~%XpsP_l-&A42Mg54{Zrj*hvH!cZPg9aGx+kOLyzDt6l81`iF37Qc2VB=p z5PqmqRqW>9FFv;{bbJ53<;?K)hO7D1k*9`dSye2H=4rBAb%Mx)sM4z|<^Q7(Ja?8X zQbfjW=YB(4`Fq7ELcq|ppUD}P3&_(biE2jLPZ<(96Geaf_N`C!)ynr{I$}Zk$1A74 zbA|+66?&#W7sSY)o;1t$9@=8S*$`LFM!S@`=Xy|*-7-Q5_h%BK;V=a2PL_Wjd~Q40 zc_qZX9mb-j@GtQFKW$m>2~DYLj@Rb+MLd", code: status)) + else + get_error(status, response) + end + end + + def self.get_error(status, response) + case status when 400 then BadRequest when 401 then UnauthorizedAccessToken + when 404 then ResourceNotFound when 405 then UnexpectedHTTPMethod when 409 then AccessLimitReached - else InternalError + when 500 then InternalError + else VeryfiError.new(format("%d, %s", code: status, message: response["error"])) end end - class BadRequest < StandardError def to_s - "Bad Request" + "400, Bad Request" end end class UnauthorizedAccessToken < StandardError def to_s - "Unauthorized Access Token" + "401, Unauthorized Access Token" + end + end + + class ResourceNotFound < StandardError + def to_s + "404, Resource not found" end end class UnexpectedHTTPMethod < StandardError def to_s - "Unexpected HTTP Method" + "405, Unexpected HTTP Method" end end class AccessLimitReached < StandardError def to_s - "Access Limit Reached" + "409, Access Limit Reached" end end class InternalError < StandardError def to_s - "Internal Server Error" + "500, Internal Server Error" end end + + class VeryfiError < StandardError + end end end diff --git a/lib/veryfi/request.rb b/lib/veryfi/request.rb index e23b932..ce2c9e3 100644 --- a/lib/veryfi/request.rb +++ b/lib/veryfi/request.rb @@ -56,11 +56,12 @@ def make_request(http_verb, path, params = {}) headers = generate_headers(params) response = conn.public_send(http_verb, url, body, headers) + json_response = process_response(response) if response.success? - process_response(http_verb, response) + json_response else - raise Veryfi::Error.from_response(response) + raise Veryfi::Error.from_response(response.status, json_response) end end @@ -102,8 +103,8 @@ def generate_signature(params, timestamp) Veryfi::Signature.new(client_secret, params, timestamp).to_base64 end - def process_response(_http_verb, response) - # return response if http_verb == :delete + def process_response(response) + return {} if response.body.empty? JSON.parse(response.body) end diff --git a/lib/veryfi/version.rb b/lib/veryfi/version.rb index 7f9143f..5f6c3a4 100644 --- a/lib/veryfi/version.rb +++ b/lib/veryfi/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Veryfi - VERSION = "1.0.0" + VERSION = "1.0.1" end diff --git a/spec/veryfi/request_spec.rb b/spec/veryfi/request_spec.rb index 4573021..2dc5eda 100644 --- a/spec/veryfi/request_spec.rb +++ b/spec/veryfi/request_spec.rb @@ -29,65 +29,104 @@ context "when server responds with 400 error" do before do - stub_request(:get, /\.*/).to_return(status: 400) + stub_request(:get, /\.*/).to_return(status: 400, body: '{"code": 400, "error": "Bad Request"}') end it "raises error" do expect { client.document.all }.to raise_error( Veryfi::Error::BadRequest, - "Bad Request" + "400, Bad Request" ) end end context "when server responds with 401 error" do before do - stub_request(:get, /\.*/).to_return(status: 401) + stub_request(:get, /\.*/).to_return(status: 401, body: '{"error": "Unauthorized Access Token"}') end it "raises error" do expect { client.document.all }.to raise_error( Veryfi::Error::UnauthorizedAccessToken, - "Unauthorized Access Token" + "401, Unauthorized Access Token" + ) + end + end + + context "when server responds with 404 error" do + before do + stub_request(:get, /\.*/).to_return(status: 404, body: '{"error": "Resource Not Found"}') + end + + it "raises error" do + expect { client.document.all }.to raise_error( + Veryfi::Error::ResourceNotFound, + "404, Resource not found" ) end end context "when server responds with 405 error" do before do - stub_request(:get, /\.*/).to_return(status: 405) + stub_request(:get, /\.*/).to_return(status: 405, body: '{"error": "Unexpected HTTP Method"}') end it "raises error" do expect { client.document.all }.to raise_error( Veryfi::Error::UnexpectedHTTPMethod, - "Unexpected HTTP Method" + "405, Unexpected HTTP Method" ) end end context "when server responds with 409 error" do before do - stub_request(:get, /\.*/).to_return(status: 409) + stub_request(:get, /\.*/).to_return(status: 409, body: '{"error": "Access Limit Reached"}') end it "raises error" do expect { client.document.all }.to raise_error( Veryfi::Error::AccessLimitReached, - "Access Limit Reached" + "409, Access Limit Reached" ) end end context "when server responds with 500 error" do before do - stub_request(:get, /\.*/).to_return(status: 500) + stub_request(:get, /\.*/).to_return(status: 500, body: '{"error": "Internal Server Error"}') end it "raises error" do expect { client.document.all }.to raise_error( Veryfi::Error::InternalError, - "Internal Server Error" + "500, Internal Server Error" + ) + end + end + + context "when server responds with empty body" do + before do + stub_request(:get, /\.*/).to_return(status: 501, body: "") + end + + it "raises error" do + expect { client.document.all }.to raise_error( + Veryfi::Error::VeryfiError, + "501" + ) + end + end + + context "when server responds with unknown error and body" do + before do + stub_request(:get, /\.*/).to_return(status: 504, body: '{"error": "Gateway Timeout"}') + end + + it "raises error" do + expect { client.document.all }.to raise_error( + Veryfi::Error::VeryfiError, + "504, Gateway Timeout" ) end end