From e12dd2d540e2b26ffcc75b4e3400bc8f3a64c963 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Sun, 6 Nov 2016 21:55:51 +0900 Subject: [PATCH] Add unit tests for SMS class --- tests/_data/images/rhymix.png | Bin 0 -> 10659 bytes tests/unit/framework/SMSTest.php | 395 +++++++++++++++++++++++++++++++ 2 files changed, 395 insertions(+) create mode 100644 tests/_data/images/rhymix.png create mode 100644 tests/unit/framework/SMSTest.php diff --git a/tests/_data/images/rhymix.png b/tests/_data/images/rhymix.png new file mode 100644 index 0000000000000000000000000000000000000000..2199495948fbe8d423c0649fb2907038ae4fce99 GIT binary patch literal 10659 zcmbVybyQT}ySIu+BcKSQqqmmNJ|YNT@ph` z!@$s7(C_c}-gn*Ky6au<{IO@B^Xw<~6Z@QXp3hqiwdX|mRQR`U-6B#_l+(O*>o)p& zo``$zdSp+9IbZ)hc9++8*K)RU_X4{@Z%JD^TR<6<9KqI5O(@vX=hY9W#I0Lcp0?Wh z?)s`KVi0FX9`MZ?9&bmNYwlaOB&57uzz}<=JA(z(+SUogv{T>A#9(U)V$u^-5e4F*|fS15xZj}SKm2m~?+i}C;kMfmvyxfu9(fr0>DQ2>yan-?esd1uUBxp z`8c_Qy}6y-nExd~4(bMRwRLf~b#`L7kqEYM_HYL=U0eEh3yv!5%gk&HHF90)>2FuDk1_DfkL=N`1q~3fr0`e++Z+Jl-mLf z6|jU_3J3`D0{;8vV?tkSKlXZoH-JM;vot+*2l?56$&hE}`HqI^#va)}o&cLo`>tyNd z<;HOnroX$EgSy&!LM;_sogEqe_*u;MKiD7)5#SYt@>_BXfd%-vf&2m%+@k#aLfpJy z0YM9XDMGA6u(nV2{m*bFQbLl_3#QYFmMV`b|&Tm(7uS#G%`m0@GO_2e$t%^e@}{x~iv;&r?;lT6F>@)fmIxo`o>7u@7a@a5^&Ggt9nz z4l5TM_%WXHZ+0^!eFkuoWE0y0EgnB>1JeRF9$@=$b-amd#Er+aA;}E;dModRphYdc z3~NlkNPauAI52{h@#bZR@620e!mU})Ra-B}E;;X9;r%fXdse;O_Xk)HuQ`6O{xypq z_W~o{xbio(c7Ni(bkL`8ulTk!vZD`W25&2FF9t-w-;!N2EvEHGe7-X;9xsFKx~yS3^4jX$$T3F>ft^h9Zx7tD3|ttuC=@B$ILpWy~% zb3eQ8v-&ZDO(E)r+gQPE(PHjeg3NWDWtnhQ?f&qAdz2%zg?4RwFHLD~%wb>4dE`#2 zub&?C)1pbH)5clxn{sO~S#Csl6CE#ztpU}Ss;MRq+ zt#krL?j(0khky3{u8unFi|fp(D%)WNTjOnMeddaDNrZopTH|tHxWSeGYUsQcgd@FHnz5a{h|%z^%gtONq`fEYy3b`Kq)kl746Fxr|%( z5$j&S#e4o@O=I<^7AwsTg!lPPvf;xx?wYjk=(!$OzNj%zX9HKkpY9t@(`rnN$G5TI zVf{|=41r^rE)8&gx#cEXJb+r7mzL;Ec3jj-$ygM{)0cUF?dFxHcr`6g zJpKgTCpFYKD!#Ai+cuaMyu8b%!>`@e2yB;94jX4tLGVJl<3G+35%@TTpE#18vZS~+ zNnjLj%1UEU8L-A=H-SeayPoSYy}MbH8a_4RlWQhN+qeY!opL8L?B(1RnbV_JfxWUn z7g%r-PcI&*ouo=!$=}pqW(GocP`)GBruMU;!!@n8Qi9Tb6pF{S#Yqvj zFz;_6N}YROJ(zEQ%K#Y&h=U3^&|ob!8pMUZB%6Xpu_GgDPib`=+mcqyt!v+MZNo`g z>0tS=wPEUx!F_*`(cOa*CZ};DT+te_kcA13-_2@94DbB?e1E%c?Q}1&Let2)TiwV) zmBiAj*YY83U%L`~XfNmDg!Rh9{sgZT+vF~R4E7buo;rXI5aa<5`Bm~HET8Q3aX^z^ z>k(6~X}~Os&bMI73Q%GmcnBmLKvY@64C0>SbT4SOsZ+XMr7aJ2-MH4)K>JnqMbceh zpl0jPBN_2$#K=Qh%2eQ+Kh?=yqw?tX?6}q- z*fv^lulH^@Q{T@0I00@IQuoM~bCZvtAB;#-_UkOndG^^DTxa=id4x;X1pdB)0G1Fs z6QgNWcvOCEG+RNWpZ)YGK!u^9ev(V|IU{M00~!MCeZroMC^^ssn- zvN}dXw)0F8rum$P<%&*Y-jgUoLF4|9W-sM2*(Avqj9?L!4D>-`Tc1yUD4R$oVYPD`)UH6v)XU)aFcRUC zg&s>uiJ{UWmA#_4_x@P zspG8qc*doECv(dC^5FW+K5{6u+sOO$VQPeYZ!0Z_!ud88h3UbsVdb#&6OP*>Xf2IYhA6W#`$>%#zG9S;Va2U1x&FR#)2|1=tq*CoC!8niyNP6Os4szc?56kkY z4gZux(QHy&-+c^eJ~YE zoCi_zf?U4wH_YM1nN0*=h-ta9q$7Ui{c7i!nk2o+Vy%|_BI3|yYXjwg7wztc_Xm}m znOu?;l#>%xMDxDyekEshF#YUx=@HUIA9+brc=OVb_AcKm8mb$Uiyjz{ZOiDkJ)=h+ zPmpd`zFwDBf2G(XI*~cB{MJ$9?c9kq`B`Y_3qT`5A=&lQ6VwMp-ior@r0@65D~~Y5 zP&_)#CmHw{X7zL>zB7|4gUxa_Z$@B>gi)3Eu0-X)4(9P?Xl!zT;bugq^@9`@kTa>j zLnogC{6gWPuh%#Cq)WdwaWpt31UqTLEr1&oYqZz zvHND-B*}oGTz~15IC2Q~4O^RNu(d`tM_3h-qUj%B9yK(y_;Bob_5!0Qr6)8-XL<~o ziQb3~GraCN!(ipE>mA-T+20}J=yvXv(z8Drv0^24r!P{VWC7428d_{Zc7Ea*pOoa- zecG`EW1&_qF>h}9{CwKl7#r9|Gg29`ff<3PdYpKWPF0;+=v+jdRg}LdzsT3q)^T*c zO>e%sC#}@e8;I6!1s1Fjv?UNNpMjn?Eq$d~+WC~hZy;j0U2lVY+N*Or(TCU{(l&po z3kV8lPGj3S`IYY58OY+^q$KICEZU`A?vQQBxc~AqshiPj<-O|s>QQdB*aqq8f@cXzw`#p3`I1SU{I^9NdKyC<-w?Z^v%p)h zd$d|7hCE^Mls5`H@!+&xJ`?HMC;`l$P0@LD*hNQqFkYG;r5N_SN@Uu7#*jlhMf@^=i+TXg?D?>1ETk8 zh~2N8qW3JQdn}0kN>;tTHZS>`P_m*{uyizgIM7##A51LiO}NE=(9D7u$)ic5F@x zk@Iv^IuMB+!Pd^{oRs<;$m))hlJgI%{zAsJ4a&ms%!ZOtSpd+;#Vg{dL=vZ0 zQZa{%ax6poBGbTA_D{1LRbG;a{#Tc*3&SZ?8~x>5t)TX6@%)h(ZAxW+6_61omj zS)okI7cnnc5V75mGMVt8?a+LkbF~*Vgx2KMsi;=66|iBZAo+lf_D0SJ>+}0=ijY{R zSCw;TWL*s{noY%A16{nu5m&FX(CBBnG64^Q(Y!ESPh#(#1Xmt_E|H}VTap^6Z7HDl zMUpWf5G5?|-k576uaI!sLu+sg-z+(ULiB25lQ0KtgG4dsaBxe_@t+qHwz(4QH)W;; z9u)7Ul`6KOHj?(xRTH8mjp)c70u)*!Y(t83y&m{%wUu0j+aYf6F_^N!pvBj#w>G7g zs~nzz-2KLucrRL|TU}s+O*HWg3;lu^zm7R~A#+l+Cfo7E>z6f=H0B+C9dhuieH(t3 zxTJz(B`P?uYte5U+(*(ow!ell%brQ3|BN&Jw9Uum>*iu(U(fLib z9o(<)cevg7wL-_DRk2j|9b9TIla*I^0)2UkqPFANedn6B+)?cUE$cc3w+dO-Y#WnH zuyaPo9c{RJ&#Uf5=L^@%;LTm=`OK+MTbwwpxVeSwcUA}09Nyo>=^A=%)+?TGT^kTo zF|UC`l$quF@H-40yK2Odqhe82ZuaZU^Zf?ThowAJr6D#mM5JSu?_7HtH(ItGO{I$EJkY!KbnF+Hn;nv%iA-6@NU9%4d5n7|21!O~@ zOexr$+vg+YRAs0h0}s)g16u3_uYD&Kar4v_26qFKhGcz^rfDuw{SMW76Hn-?lA!JC zcFm^zeAjQiOJtNCwR)`pnnjCBL{_2x?V4f@LyAORP?(SD(lebB+MON^I@gbEV;0d- z27V5JL5L(7X2@O7QuiMKgs9g0{FrOKzZ8<-esg{T)FAp#w z5btTrtJ9l44y42;(gO?ay}{o6mU3{}TaZAJPct9y#b+?8kmWEzDfyN4vdvX4W)%8? zjGCg<2Vd-2*1lxhyjPUBI)bjy{xW3$wa=S^Eu49_Fg{`oGAti|M6H@e61gtnWV-6g!{Iq^xgSFJEJCCNnwdCyv-Kyo17`WP>BnuE5A=T&2D~ zxKYs&QycgCz3{yOHpiQJn~sn{<**oMiu)EdJf^Dc=n|nXC+u*~fC`;<-<5T4o_3qz zK%t9Rzc;bV?kFoGsLotZ!w17hJz~pFRHo`~EU|hh*qiW^W{Gwh1<(Um_LO<;DwToa zXH*NKzeQt?OWKmW6ulKjYdGXv-Y<8F^&#Fl1B0CU7M$IZQ_d=)H>TEJrQydmv^L$= zqWw&qxLPZnvqNXoI@VG6c9c0W(}U=&Wrwo%LqguyZ|2Oe_vzAyL5E2*%$Sdwhjgk2 z*s}tCAB5N>0AcR_x##CZ!Hi@={fx!7Cqv~eFQYl#;C{z?^6c}_uJNR8_b^jxs^(_* zZ-|HpJ?I)YfL2sJ(CG`c#Uj&M3DM@D7HpUJ*s2|NVLp0?y)few{?I$twMi4s#)BA8 z=_^Y$9}zZ`msY@lUN#*>p1t$yur-ECCc*D4ufnW!rzh#wc$pwWaJq{TMP_ia0K;HQ z&7{fJ(=bzeROrm7czS`Lu;(u}%3UuE9-_VdHW}8OSKgPrm5ikhJ%WSPcT)Cw`%hsV zktb=w>G5R}7Glvvr};!j8>JLh0o7A%_j<0ki#vPDarcaB|>Df->h? z#0%X=z^nRN?I(IT4J*c@__5dVyR7Plu6}toUa{5RR4hN%>4|+uQsZiRtd2G{!i#&! zeN>!aN~2~ylazB4{ab(o5n*t`3+%8?M_EEyPPy+gyjCoQ_Nu))z>8mqw( zdldv;B&sH<_LMo9km9hQGBIi33_Hyg-TBctk66M=-18)f4XK~r;$FP|j3-@7?_lci zyviZ9_Z#ISh02a0wV=+s4a=l)SF=Vv&kb3n&6s6VlDN6&X{&d?^Q1!PE}2o7QT`R* zx%eNv_nX>;wd8E~a9^c%(aHe`B(L*%qDZ>ys5XiyZG&s4GJ>vp&75?Vuhwjdrn(rC zCBZcd5id@rDMLj2t-klQR5@7CUx`hcW7M)*42E%7B-3FcuRf$4@b*8;)9dsrwNvMP z_<(s+^Dy6THic#(`Hup^T4CBryRywu&x#`Irm>)08thq5&hH(Dpc*ex%12={igwRW zIs=EuB#SEWPYK)R69)#B1I099m)u05F%qTaw$Ue;f^6Y(?580V1M(`e&VZ-GDb+g1 z;Kc&RfeMD@4mt1g%pvq^1lnWIuGOmhBJ~L}6t>tDzO!frs=5mF_yF}YY7?Q5ju|sg zs3X`;j(O{{PT)FcTBCypiz_?lWu40sji#Ka0ADN0fEb!`ey;~CUAAQ{L*}!|h3zaN zli`~=XLa6(TR((^)#`Z`>ywgPcLqV|VTO5gagf-MWGiaOKq4)O?snry)Q=b9#hU(K zB7^35tJplzhMZkoej?X(AsKL|d76Bis8z(KUkuERa$>&K`>Quw#(-~-zeY~#w8q@N z&l<~^4IZKQpwRp0ePIQ=yWa;7OGAh7s2x@ZDZ~OIfRsyD+C;C7x-=?KQV8QK; zsgXO`hXh@G$Jx=-lvi3N3qp0ij(6$C;#Mffk%PQWYLS8+E?T~Zujd?aDN6f$l_+}e z9gFv;Z9!@~L7e{cZbs&Wm?-P}v$}&O3X(z8Y{~&8>9Y5!U?R6a-4+CjWoO{rNzgmE zh&cn(LVN0@xd7tXmdFafXbjAlN@!>7gjZt{11Qg^FS*-o!4jNCGsaO*EKUbF@rsCV zroit;=%Jdh?r2B0ExUxsG6V0e{jf-0J&WFJG--HZZX~Ia^_J)jHf>a*QfMYVm^(`qLt#ghx19tX+;8>L}-M>F62 zb6`qfNf)a|rV24HdV4sFYnU(KWj5x`+{!u~g7U$-kK^;7DwotwI^eKbXVtRBz^;8U zAMXewl4DqwPE+smu3q7$&jk$7NA9?hwxFe!c<=k{zP(6+f_>MQd!`>;2Wmo_GcEkf zSdhOOiVOYV28$MX^`dm^Z8T}63B?g2VN|-FwO)NW@QIKu!7y*kUDxa69g8`mk%eH7 zJoLJ&GJ?VjOs74W#6PrSpBG3RPm4QnEWfixs3ZO2>Dp9m2P8Dzvw%WZ^1^!2x_eDP0lr*=Ri-jUh@jcx;o=r<)x!@O%Gd*Wta zW@!5R!jr~pJ|n8~U$QqZ@z#Axd>=?J7OvwE#C0_s@chYB;o!x|w69W%+h(G9nvTk8 zk{@2_nf+K3Xp2_Xp15ey+l#yctDOikqOiW7Pp*WfZ*vWan>`8pM!_j1TYANnzDEh$ z`Q?rLyf1t-lhgY}x(^j4WIxz!x5!!|`n8bvDV0j6OG#8!PWH@{Kr({6tbrzXCUnX= ze~N51Phy+MC<~9cX@_I&5SD`X7{ro;h(^&0ZBat3>zRR?c`5z{^0PRRBBp7s z(OaA;2~5qt&dlbd!yfUU{IPRwy+#JSLOGh(nI`Nn5`*Y)eK>ZXJ551w0En7a`LVjHjGjUqgxim-iJ6@Mo=a$QrUi(CAYTM`dmnl4yuUNZ zXaRFjSRNiTRzFnfHQD!XqCP&Ulj8xHW+}nG_{S}Y(=neM!pH6xDTog6m#QV8i;6g9 zrt!1)4BO^~MmNYd-m-gk02M><_1QN9Dd;E4eb;E+-aU{V9LaUsMmvb8^|=h3hclD#pgO*WMQ0vy(=5&w zHEmfh(x6tYC=Z8f3z)Q}2S1Eq5hI6#H5WWD*H<53#VVcz3$}*6z@qy~a`Nu% z^KTBm_m;5G!{gdV19rxDD`aC&3TK@X^GUxNx1%Qrm5}PTA{Kavjk2?8&QJak#f=){ z-KY*9m}bx8CN_#yRen}N`)v}1Gp_I5*+|X0SymGxtwAgXz};vz6*cwH7f-xitmi=H zf4yQQMTap%hva+)*t8_cjydM~cSo?|noAQl6VA~0#0?XR?|Tr;Aud>AaGsa2OjD#Z z1AW_h#-sU`d3H#hk{xp?E53;~b^=8ac_Kr0?PHR8M$7vZRgk$h9*ej(5Kvu`#WpAU zoL0=G%6jOV;xHobZ2Qr)EY1Tm&Ns6B?H$IjaFg~i=j-nPg5%vxb%36QsFo8xWvE-p zD{mQA4{5ylYNShQMCMN)&Pe-_UQ{sBP%;IEcsxGYMYfVO*2IG(x2J0HY!ZmbP}e$Y zTZ~AU{vvB#1Ba`0L%i2ZWUuhH1_LJz?0*M>vlIWR@1k$eQfwhbq!`Mjq{0 zV=D^RWH*W}@llLh6M|D}WNz=UMyZK*aL5hjMEbAq7OO^lGtflP^hD?wjLL5D%r6|q zsZ&^aeJ4cm{aWy}bh0(czrn2s`~>O42aI5a@IFJyEq3WjB!Y50KEB?`)K6sup5?*)7D znqieWQiUG5A5pQ{z80U>yR+O;ZGfM=X!j!J-7hPoT)BVa7PUNt!aDVRBEz*N}dty{aZdkx;crnfPE4W{MjZw8} z(Yarc1KT{N1WNvcZ>MIgVYnj^o^$}}(fDOv++f`q6#VEIDX~wW=J>>0qK8$iv1BGj z*EU(F-n3VgF>}b%f_6t&euV!kKiIHEzqqV#GrS~6kCp^{sSl$ z%lja$9sMTZqMDC19Q`$JYqPHG09yX0K+4TJ%G_4{DOiujTpNxnvd{r`bZ_8;y^5QS zN?F((p?=Y)Pz6kPMbR@k5~d>pJazBvg=cQad<_-(&tyoAX{RxE10Jfn)r%v`byhbv6=*L_FSoLYPgN(1DQtjxC9 zP?%F2Jtz;Ifh;mPm|W}UQXU^v_B5D}%BdOmS;Lihe>uvJ1ix=&#Ga)mWR|i%7B8yh zf6Qg`65df)7(2Bik$(GNUg(oh%lPTh;|`ioY8PSKWC&b-ttzg0J_oc2>o5Fm8(w6T z6_9N=4YBawxP_O>dO1K=<|*Qsm$w$Gz}o1gC>=8@Qf`uLcuzWghr~Lk8?m-5Yd7*lwTd^M&?_(Z!TmUdzir}~qB`~7g6j4| z=+}Wq2VfANgO1_O9D84umReh{DCv6dFT4_-pgl|B0T$oqs`?98-B*^6RVUodWgZ7jg z^a9AM3X?ONFlj;4%ePG)+uJZlmbgSVxYWhtWN@U}b)H)K^jXnc2eG)_BzRL?^hMR4 zu`aL+=C;XY%|{k=5Q1g!^QIxHHOYv1ViD@Gpw#I&QGvGB_qF+SZ{6RSDJ-_2W?SM% z@}p44MmfJ!|EgYpSYh%=3jea$*ggCGb14nM2-Ojr+gzu@<7aoQgJiE;qcYL}xxwl$ z;QGd_jquYN+fH+jyA<}s3j}m?Z%&h(05T0;q$e!M3uc{Z(;=1>{T@F3v@@Yk_L?`i zj3CqO4CXs4;TS~`Xd+x1_EgteZe}4V&gHpK4nJ|xnT$9@0?iZT z8P4>^KfFm9_HTk$vo=^alU(o<9k=LQX=`vL##UPS0%CDbM?~M9;OZE)eXROPTw;>i zkoNMg#xEK6nZXcJku$~ptf;V#Cp2sc?s?@^tHG7`D2KOnR;wzPC!^gPasHwgLI_|V z(!^%&Y-_Iy=zq8}gzqF2G_d=WG!@k72BeDR(E^a}?~wlgH1R_+?Dy>5d-a@a9|q(u<=L_1 zO2rtO6b4Kh{nNm|PAi39v+Et((dWgD7vSI`blf_+(Bl6 zRZ@-do0yo|Q+pO;2ANCaIpKe>5yLm^<&!_mb*An8?NLHHi6T^bgwU xzk!+ziin#2hDc~Z+$&k@iSut-oP<$DaotJmB^R}{TC&@NtOTr literal 0 HcmV?d00001 diff --git a/tests/unit/framework/SMSTest.php b/tests/unit/framework/SMSTest.php new file mode 100644 index 000000000..012053adf --- /dev/null +++ b/tests/unit/framework/SMSTest.php @@ -0,0 +1,395 @@ +assertInstanceOf('\\Rhymix\\Framework\\Drivers\\SMSInterface', $driver); + + $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); + Rhymix\Framework\SMS::setDefaultDriver($driver); + $this->assertEquals($driver, Rhymix\Framework\SMS::getDefaultDriver()); + } + + public function testGetSupportedDrivers() + { + $drivers = Rhymix\Framework\SMS::getSupportedDrivers(); + $this->assertTrue(isset($drivers['dummy'])); + $this->assertTrue(isset($drivers['coolsms'])); + $this->assertEquals('Dummy', $drivers['dummy']['name']); + $this->assertTrue(in_array('api_key', $drivers['coolsms']['required'])); + $this->assertTrue($drivers['coolsms']['api_spec']['mms_supported']); + $this->assertTrue($drivers['coolsms']['api_spec']['delay_supported']); + } + + public function testSenderAndRecipients() + { + config('sms.default_from', '010-9999-8888'); + $sms = new Rhymix\Framework\SMS; + $this->assertEquals('01099998888', $sms->getFrom()); + + config('sms.default_from', ''); + $sms = new Rhymix\Framework\SMS; + $this->assertNull($sms->getFrom()); + + $sms->setFrom('010-1234-5678'); + $this->assertEquals('01012345678', $sms->getFrom()); + $sms->setFrom('010+1234 x 5679'); + $this->assertEquals('01012345679', $sms->getFrom()); + + $sms->addTo('010-0987-6543'); + $sms->addTo('010-0987-6542', 0); + $sms->addTo('010-0987-6541', 82); + $this->assertEquals(array('01009876543', '01009876542', '01009876541'), $sms->getRecipients()); + $this->assertEquals(array( + (object)array('number' => '01009876543', 'country' => 0), + (object)array('number' => '01009876542', 'country' => 0), + (object)array('number' => '01009876541', 'country' => 82), + ), $sms->getRecipientsWithCountry()); + $this->assertEquals(array( + 0 => array('01009876543', '01009876542'), + 82 => array('01009876541'), + ), $sms->getRecipientsGroupedByCountry()); + } + + public function testSMSSubject() + { + $sms = new Rhymix\Framework\SMS; + + $sms->setSubject('Foobar!'); + $this->assertEquals('Foobar!', $sms->getSubject()); + $sms->setTitle('Foobarbazz?'); + $this->assertEquals('Foobarbazz?', $sms->getTitle()); + } + + public function testSMSContent() + { + $sms = new Rhymix\Framework\SMS; + + $sms->setBody('Hello world!'); + $this->assertEquals('Hello world!', $sms->getContent()); + + $sms->setContent('Hello world! Foobar?'); + $this->assertEquals('Hello world! Foobar?', $sms->getBody()); + } + + public function testSMSAttach() + { + $sms = new Rhymix\Framework\SMS; + + $success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css'); + $this->assertTrue($success); + $success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css'); + $this->assertTrue($success); + $success = $sms->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg'); + $this->assertFalse($success); + + $attachments = $sms->getAttachments(); + $this->assertEquals(2, count($attachments)); + $this->assertEquals('mms', $attachments[0]->type); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', $attachments[0]->local_filename); + $this->assertEquals('minify.source.css', $attachments[0]->display_filename); + $this->assertEquals('minify.target.css', $attachments[1]->display_filename); + } + + public function testSMSDelay() + { + $sms = new Rhymix\Framework\SMS; + + $delay_absolute = time() + 3600; + $this->assertTrue($sms->setDelay($delay_absolute)); + $this->assertEquals($delay_absolute, $sms->getDelay()); + + $delay_relative = 86400; + $this->assertTrue($sms->setDelay($delay_relative)); + $this->assertGreaterThanOrEqual(time() + $delay_relative - 1, $sms->getDelay()); + $this->assertLessThanOrEqual(time() + $delay_relative + 1, $sms->getDelay()); + + $delay_relative = 86400 * 3650; + $this->assertTrue($sms->setDelay($delay_relative)); + $this->assertEquals(0, $sms->getDelay()); + } + + public function testSMSForceSMS() + { + $sms = new Rhymix\Framework\SMS; + + $this->assertFalse($sms->isForceSMS()); + $sms->forceSMS(); + $this->assertTrue($sms->isForceSMS()); + $sms->unforceSMS(); + $this->assertFalse($sms->isForceSMS()); + } + + public function testSMSSplitSMSAndLMS() + { + config('sms.allow_split.sms', true); + config('sms.allow_split.lms', true); + $sms = new Rhymix\Framework\SMS; + $this->assertTrue($sms->isSplitSMSAllowed()); + $this->assertTrue($sms->isSplitLMSAllowed()); + + config('sms.allow_split.sms', false); + config('sms.allow_split.lms', false); + $sms = new Rhymix\Framework\SMS; + $this->assertFalse($sms->isSplitSMSAllowed()); + $this->assertFalse($sms->isSplitLMSAllowed()); + + $sms->allowSplitSMS(); + $this->assertTrue($sms->isSplitSMSAllowed()); + $this->assertFalse($sms->isSplitLMSAllowed()); + $sms->disallowSplitSMS(); + $this->assertFalse($sms->isSplitSMSAllowed()); + + $sms->allowSplitLMS(); + $this->assertTrue($sms->isSplitLMSAllowed()); + $this->assertFalse($sms->isSplitSMSAllowed()); + $sms->disallowSplitLMS(); + $this->assertFalse($sms->isSplitLMSAllowed()); + } + + public function testSMSSendSMSAndLMS() + { + config('sms.allow_split.sms', true); + config('sms.allow_split.lms', true); + + $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); + Rhymix\Framework\SMS::setDefaultDriver($driver); + + // Test sending a message with no recipients. + $sms = new Rhymix\Framework\SMS; + $this->assertFalse($sms->send()); + $this->assertEquals(1, count($sms->getErrors())); + + // Test SMS content splitting, grouping by country code, and forcing SMS to unsupported country code. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0001-2345'); + $sms->addTo('010-0002-3456'); + $sms->addTo('010-0003-4567', 83); + $sms->addTo('010-0004-5678', 83); + $sms->setContent('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.'); + $this->assertTrue($sms->send()); + + $messages = $driver->getSentMessages(); + $this->assertEquals(3, count($messages)); + $this->assertEquals(0, $messages[0]->country); + $this->assertEquals(83, $messages[1]->country); + $this->assertEquals(83, $messages[2]->country); + $this->assertEquals('01012345678', $messages[0]->from); + $this->assertEquals('01012345678', $messages[1]->from); + $this->assertEquals(array('01000012345', '01000023456'), $messages[0]->to); + $this->assertEquals(array('01000034567', '01000045678'), $messages[1]->to); + $this->assertEquals(array('01000034567', '01000045678'), $messages[2]->to); + $this->assertEquals('LMS', $messages[0]->type); + $this->assertEquals('SMS', $messages[1]->type); + $this->assertEquals('SMS', $messages[2]->type); + $this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[0]->content); + $this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면', $messages[1]->content); + $this->assertEquals('LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[2]->content); + + // Test LMS content splitting. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent(str_repeat('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.' . "\n", 50)); + $this->assertTrue($sms->send()); + + $messages = $driver->getSentMessages(); + $this->assertEquals(4, count($messages)); + foreach ($messages as $message) + { + $this->assertEquals('LMS', $message->type); + } + + // Test subject splitting. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.'); + $sms->setContent('이것은 내용입니다.' . "\r\n" . '줄을 바꿔서 내용이 계속됩니다.'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(1, count($messages)); + $this->assertEquals('LMS', $messages[0]->type); + $this->assertEquals('이것은 제목입니다. 제목이 길기 때문에', $messages[0]->subject); + $this->assertEquals('내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.' . "\n" . '줄을 바꿔서 내용이 계속됩니다.', $messages[0]->content); + + // Test subject splitting when forced to use SMS. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.'); + $sms->setContent('이것은 내용입니다.'); + $sms->forceSMS(); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(1, count($messages)); + $this->assertEquals('SMS', $messages[0]->type); + $this->assertEquals('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.', $messages[0]->content); + } + + public function testSMSSendMMS() + { + config('sms.allow_split.sms', true); + config('sms.allow_split.lms', true); + + $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); + Rhymix\Framework\SMS::setDefaultDriver($driver); + + // Test MMS with a single attachment. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent('MMS 내용입니다.'); + $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(1, count($messages)); + $this->assertEquals('MMS', $messages[0]->type); + $this->assertEquals('MMS 내용입니다.', $messages[0]->content); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); + + // Test MMS with multiple attachments. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent('MMS 내용입니다.'); + $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); + copy(\RX_BASEDIR . 'tests/_data/images/rhymix.png', \RX_BASEDIR . 'tests/_output/rhymix-copy.png'); + $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy.png'); + unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy.png'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(2, count($messages)); + $this->assertEquals($message[0]->to, $message[1]->to); + $this->assertEquals('MMS', $messages[0]->type); + $this->assertEquals('MMS', $messages[1]->type); + $this->assertEquals('MMS 내용입니다.', $messages[0]->content); + $this->assertEquals('MMS 내용입니다.', $messages[1]->content); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); + $this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy.png', $messages[1]->image); + + // Test MMS with multiple attachments and very long content (less than the number of attachments). + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent(str_repeat('MMS 테스트용입니다. ', 120)); + $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); + copy(\RX_BASEDIR . 'tests/_data/images/rhymix.png', \RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + copy(\RX_BASEDIR . 'tests/_data/images/rhymix.png', \RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(3, count($messages)); + $this->assertEquals('MMS', $messages[0]->type); + $this->assertEquals('MMS', $messages[1]->type); + $this->assertEquals('MMS', $messages[2]->type); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 100)), $messages[0]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 20)), $messages[1]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 20)), $messages[2]->content); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); + $this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png', $messages[1]->image); + $this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image); + + // Test MMS with multiple attachments and very long content (more than the number of attachments). + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent(str_repeat('MMS 테스트용입니다. ', 403)); + $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); + copy(\RX_BASEDIR . 'tests/_data/images/rhymix.png', \RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + copy(\RX_BASEDIR . 'tests/_data/images/rhymix.png', \RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png'); + unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(5, count($messages)); + $this->assertEquals('MMS', $messages[0]->type); + $this->assertEquals('MMS', $messages[1]->type); + $this->assertEquals('MMS', $messages[2]->type); + $this->assertEquals('LMS', $messages[3]->type); + $this->assertEquals('SMS', $messages[4]->type); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 100)), $messages[0]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 100)), $messages[1]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 100)), $messages[2]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 100)), $messages[3]->content); + $this->assertEquals(trim(str_repeat('MMS 테스트용입니다. ', 3)), $messages[4]->content); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); + $this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png', $messages[1]->image); + $this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image); + $this->assertNull($messages[3]->image); + $this->assertNull($messages[4]->image); + + // Test MMS with no text content. + $driver->resetSentMessages(); + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); + $sms->send(); + + $messages = $driver->getSentMessages(); + $this->assertEquals(1, count($messages)); + $this->assertEquals('MMS', $messages[0]->type); + $this->assertEquals('MMS', $messages[0]->content); + $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); + } + + public function testSMSIsSent() + { + $sms = new Rhymix\Framework\SMS; + $this->assertFalse($sms->isSent()); + $this->assertFalse($sms->send()); + $this->assertFalse($sms->isSent()); + + $sms = new Rhymix\Framework\SMS; + $sms->setFrom('010-1234-5678'); + $sms->addTo('010-0000-1234'); + $sms->setContent('Dummy Content'); + $this->assertTrue($sms->send()); + $this->assertTrue($sms->isSent()); + } + + public function testSMSCaller() + { + $sms = new Rhymix\Framework\SMS; + $sms->send(); + $line = strval(__LINE__ - 1); + + $caller = $sms->getCaller(); + $this->assertRegexp('/^.+ line \d+$/', $caller); + $this->assertTrue(starts_with(__FILE__, $caller)); + $this->assertEquals($line, substr($caller, -1 * strlen($line))); + } + + public function testSMSError() + { + $sms = new Rhymix\Framework\SMS; + $sms->addError('foobar'); + + $errors = $sms->getErrors(); + $this->assertTrue(is_array($errors)); + $this->assertContains('foobar', $errors); + } +}