From 06b397cebfb27b1159cd3aba614418a293079c3f Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Sun, 21 May 2023 10:24:16 +0300 Subject: [PATCH] Add multiple product lines test --- RhSolutions.Tests/CanWriteProducts.cs | 18 +++++++++++++++++- ...rgetSpecificationMultipleProductLines.xlsx | Bin 0 -> 9373 bytes ...TestSpecificationMultipleProductLines.xlsx | Bin 0 -> 9278 bytes 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 RhSolutions.Tests/TestWorkbooks/TargetSpecificationMultipleProductLines.xlsx create mode 100644 RhSolutions.Tests/TestWorkbooks/TestSpecificationMultipleProductLines.xlsx diff --git a/RhSolutions.Tests/CanWriteProducts.cs b/RhSolutions.Tests/CanWriteProducts.cs index 3792914..a6ddf38 100644 --- a/RhSolutions.Tests/CanWriteProducts.cs +++ b/RhSolutions.Tests/CanWriteProducts.cs @@ -17,7 +17,7 @@ public class CanWriteProducts : IDisposable _reader = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); } - [ExcelFact(Workbook = @"TestWorkbooks\TestSpecification.xlsx")] + [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecification.xlsx")] public void CanWriteSingle() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; @@ -34,6 +34,22 @@ public class CanWriteProducts : IDisposable Assert.Equal(products.First().Item2.Values.Sum(), targetProducts.First().Item2.Values.Sum()); } + [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationMultipleProductLines.xlsx")] + public void CanWriteMultipleProductLines() + { + Worksheet sourceSheet = Util.Workbook.Worksheets[1]; + RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationMultipleProductLines.xlsx")); + var products = _reader.ReadProducts(new[] { sourceSheet }); + var _writer = new ExcelWriter(Util.Application, RhSolutionsAddIn.Configuration); + _writer.WriteProducts(products); + Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; + var targetProducts = _reader.ReadProducts(new[] { targetSheet }); + + Assert.Equal("TestSpecificationMultipleProductLines", products.First().Item1); + Assert.Equal("TargetSpecificationMultipleProductLines", targetProducts.First().Item1); + Assert.True(Enumerable.SequenceEqual(products.First().Item2, targetProducts.First().Item2)); + } + public void Dispose() { _addIn.AutoClose(); diff --git a/RhSolutions.Tests/TestWorkbooks/TargetSpecificationMultipleProductLines.xlsx b/RhSolutions.Tests/TestWorkbooks/TargetSpecificationMultipleProductLines.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a83ff99fa5dba543aa4977668212faeb3374d43d GIT binary patch literal 9373 zcmeHtg;QMF_I2Zs;BLVQuEE{iJrE!??k)`k*WiRea0u=af zZ|7oa=VGVt9X2HHKbd4T)_*T^wG9Z))WxQRE=3E_#1atlJ%H%>ed(HKwNC$OtBXyMYp7aGokQOdM6zZQOA#xIH>xO|41PK5@gRG2) z4U4(G$x@xBj{>5@1;qcHn*F99lW{5UuiBJvke0u%b4>Do(>`64o zBEN(%bpf(2nRdBPDaECCXyH=pczICzrg%Z0t3$lB7T(b?xW{a^29U28jG@bvjLQM~ zyl7IsY?~G5oKrLP9cnc`Gbj^UlhZ2J_=w3((N{zUDnvEvpW3kSuPbqsm!IL(A0RHi zvtZe_F5fT-pH~|c=@k^<>2Q5F9!DdJuS$nlQALKO^?Y=dxjb|7O{gFpKJA+Za^Knn zELPl|=fGeLb0`CjX&r32fdQ4Mz#nwhAgLq!_jC;N!!Us+AL7m|OyS$PubrCbLA4FS z=qx__2~T8(X?gLI?8C>JYz?*t;A24ZS+?a z!GV!kdAAHvc*fUb8<(Nk%Ri`K64Q?p<6X~-iFq}-+-rts`7}69M7F(!GRm8V_){V% zG?+T-+KlGEE+f68^UjGK&6Y_@WBFji-?jQ z9p@ubv|lAs)lUag?F9`^mo%s4ksmH~egF_8INxjd z^|wWzeUH10GrEhXo(&t2a?y5x4rU~u4+{ygx0V9(rX1epZ_OqaDIUxyq#0q-8273z z`#gq*EE2HqEc?fs`Zs)XOcVT;dLF{q6N^Sr%YkqrNX75gTxA3$$uC)CM!D=4-&niV zS+t3)Dj=J7@v#)y_jcHAcXx3SHUd{S{D5LnAlA51Z;^$$?s*e5=~us%mx=xdM~`)Z z>S3)^G$cy)$^tyM9-K{lrw69&smpo#OHXWbwwxO?mNLiIJa?%7MtOgsgrsu_)f*wY zNC-fLf>8crBbBz}Sa?j)!{Ot~pWHV6ZOR84BNH!g^xa9P`8351kLeAOa7| zNCKqcurLqy_Dc?*qoz1xH3-G`GG<`&Y~9dO6NKjEQ%GDid=KHU8fJB6w{jkR(GQV{ zftn4!yCC(0vVfYpI4JH@Qgrpl?44shKK1FMPvF2z!Wn~?|3;(&y2dg>X)8*ruS`AoEE zlyX@g^ED1zvxHlP;R&dRBWkguEVHvJR(2Ne&I=~{W&%r~1VqL5pXqunGZ8pf!!y0H z;InYdXV-cj19lsEV=kHyD8tPd{TXgt?5hhE;~^8Wx~AN>sotEBsTlOQii1;K*EO(KMgdlg*CE>PxG_%* zN0~yWz-wd_8MK{ty4?Y1^TBMxn;>yj7E|rHo@@cIu9_HibkviXlA*|O5KH5R)q01MK#P=!+b*@9sgKR5T9`$IILi#9YeznB9j_TT95#xI$Y&?yXyBD zT7Htt$&s*_b>YW#USnbh z&V2x<-=A+R)ATG2^#w&%`kEGjm5t&ho^i5%_Exs+kc3}x1jC#9S#8f-%nMY)z1CwCD=W@N* zVm14X=&r7H@IZh#={`)j<+fmCjHLXCLQ$i6WCaZyTa)vJX|Dl<6dp`{cK(md8P>xmt0Da`7>mb?#eltd?7VDbQACb~_w{ z=GE+3g}>IapTN^;k9ka{kk@_3mk}YatD7G-c4htX^HO~i30}9?6+RF91xqYXH+P#K zg!9xhyPsn{tu>7p-tP-nsG%_o>!03_^sr=*2tN(rJw057i+iQ!yu%WrV#8fR@!nW8 zV`CgO5?+xVjR2Ya<2H*Q#?!wZ|H6J~@dN2rS7W4+oVNpI$G;eL5H0swI-gawtlrB3dO%a$3Z4bA|J4y8#Zj?63poq^BpXrn; zFD72O`BfRaUL#iBH_A(;A#uem39h-KJ2slgT$M@m2iM9XJHD<*4pPx;oo(57#dj@h z3`Mi0YQ_!YizEeFHJs9?$YVEYpsFe;h8~j zks7Ul>8S5$mB*`!+K4BvcR3>KRxpWq;X;W$lE(FcioJ?70!Bu4V-ffrZrSvT=<^Xd zD(x)(Q4_4*s*fPX0+bV{Vn3FIV6w9`V+GI*9P^w{bf$~lmPGGhZmTo-Mf&Z8+~JEz zIzBPu$QFK5e#V{3s;dWT#o4~UBWr(l6k{a=jy!9Oz ze9S>TD=p1W`N!0~E8K}tK;bX;Az`{$8%VDtRNmI_;7XL9Y*SbnP6C|^7CL<_&sjyX zO(yx-WDWH0)9Agv3FjX;;<0Y4oYdnyWvH2B<=JG?J8-Q&A`GOEq|nr{9#HM4xvEaS z(cpZ1dZ+niSHHE;l-VjdLbv0nvx!K#l|K;)B4vC8Q7Vc<}N+S&(_A%lj9Og;z zE0VS>JMCSPtzt=@h!u8gk=ONf(z@O23O-^cHF((sHShZy+j()4_li!;6hshY(e{rR zg!1&Rv$sx}i3-w3onE^NswX|8IzLsbCk!qBs4(``b7@hpX!_xM(NRA$ib}OTFo-SL zR$|gf;vFxdD(EAIr|C9Oa@Aifs35aot%w;B;(K^@s@-XJd)LQ>EVmtlKKnW{T`bD8~%e<67^?WX*Ktud6h3*7>w#vtb!iI zR8ZuCrDn=;=Ztiit~;EHri%muq9mmpc@>mz5FBzv@n(6!B!>L^F-ZknNm7i=?C*jM zCqnkWJUVsp?JLLJv}E)3T?<0zo>yuSaFh%wm5r9xA_QkmTVkgy>K2TaxbC-zRuFNe z1WLEM7q*Kw&7oL5NM&msxjh#x%N?}mcz&6sW{Gg=mP1-YYHEsHDv%d5h__;3JN@zB z3t!a(Xm%Qij59z48|8Pgc6I^Tm^%Mf?dEC@MbC4gx8n8kqc>X9Sy6X!QNit#!a-q@ z6~4%-3rM6*MU*7OZi!XjSP);zK8`g;eHXgOy%$?O#U22AcvbyUI?cY-UdV~--6SXU z;;Tg`>Q^xfuq4204Vt6rI!YqEIzV&&X_hW=7VH@v9?=> zQM`k!b_0Ue7G6213g41+cS8tg_FmYbrHmDSm5pjMLZ_W`|zF}o+qf%fZ;R`o^5y#@QthuO92&*){j_61HZI* zq^jDA&AK}|O>Ih$&HL`=B6hT;^uxJISfp*!m}z^!le8@CneV5d9&ArBN@lHX-|c|L zyYPe#gwD7rhCJoXxJ%*lDZ8wlz3c0gQ>~LJ){Fg6PR|xmR%{B7x2QxMuAXiiqZz_7 z_)_DWd&9mBI>A0QI@FIQ@r(~)K@o*IWw@(rS6`a)#Op@Bl016e+}&)Rj)a0q!2;ey zS=o#8lz1Tn))>PyqpGfW70}PE4-|I6sMj#8^jhONtf>Vt$?mVg#yG-UtK&u2_XY$A zaiFA2J+C|&pmpVNv+e3?8w;NmYO(ft5?LeSgDh+2%@|X}gQbAsony@>mZUBY#K5lY zF_Ryp&O<1`dPJ%ee@g0c^D6W3eR<^jCL7PYBQ~f*wrk5zuudgF$MARhSWyNH$N@@dYD-y8#cs?A;XWPU$U@ms_atRFo;qxwQM{ZSgw&BT*4sLymKIX{BETK5yvFhP}H^Bs`o!mYN)y1c%NW8$n|n+tu$<8tfS(m z#)U=8&`IUq*0`d@LW`q3t8xGI68p(RP-pYeX6IwLy5{5CZ%RG&>b2N`JdM}ogi*Hh zFAqy&FwWHP8+|~xc>hl54- z0?~M4Rl~l8tk7(ly19d2XH!t`GQK?L$s=;==ncr*C`Iqo^ZSahbL6uP6l~E zV-pDdK<(oG*YhB+W=$Xgl6BY+l|}z+))_fC{4ePsOZLY|i*L8XVnc_ts+v3cue(zN z=&?ci+1L{>VKTB_q|IN#gQsf`cIj8)wMqQ(R@qXxfo|H0+->3WgZE$`UlKk2V?Aw` zPt_=`nCGwQo?X10n6hVZtONO;N?|9rO|Jy>$Pu$fSU;Qv>*k@e#dW=L2pah~gV7b7 zFndrLEMPqQ<$KTsv}0;5J4Y0!2iBl?M8<~cYXjK@tUJQ}2#;sj#%rH*o>0mHcW=)g zw$KT5O6u77to?2h?{YZlHbzxW?d(VCcyVyX%f{5q%+_Tk@1QD-9T z;bt4oJ+tZ8b*$4J%pgRPF{V-4G4c*(rr=QBA)I>439v>sZ%3|IsduhUdC!oZ z4vb2jAmA!ZBJ6`Vn(C3bMQ&=w&a-uo$&7|#9OiB;v+O|0eV60|FK(EolrzA=j}ON^ z%H`YIU(Pi9l=+kCZtv4C?IC;eyRicW%>+@ge}56=KRfrI`CncOQIY?9fWNn_{{#GO zPJ+4Rz0+0aR9D@#>)w0z+H0S^uZlbjED!(>Km-5)6adg+##;j@03a3?0Kf(yLhFg! z+Bku2oD9|7?ZA%uEN<3TLnug zK|miCgQ{?QcS3Kmv0kRR`BP^29fnvojssHIzvI{&o!m zB3{;>zI~cDJc4)!U7e#WAkj;90z<=S(=@;b`?@YQE{Qc!xl+QnIJm-o-!ta>G%;6t z8&HaM3;FsNI#!i5moZ-q7ENM&AIF}uFsJu4IQz~l3mZx4xrpmxkgr0a{fZu>*5GiP zEZ^!#SI;^9#u$2;EhM%DZRzU@d{ZkgsUjC)RZ+xwv2JgyC1ab{YcG#Bx_6Q1Dz}Y1 zIByM^^)g@jQv^(W1E^R=R^yg&*o=C2i{Ruc3>|lpFWu3sVH0<+5ScV)#>AQ^;Zs^O zt>*V-N+|R3G6eV(^bgd(XjeWkCib%VG>)(VD|!6{yu{pXJZl%j7-*-U_6|K*?cWvf z+#lQ23p_k|zw68K2oC@}J;4A}{zl6h4K}KCh_5L?SceRurJ)1Z%8`}jxA}i`{4eI< zUmm?QUQxM=4JG7A=03FlYI-RaLrmUPRHlhS-N#RM5xpilmzrp)jg}ZgoiGqa+PB5$ zesEz)F#1P7#pOCzX(Sd;Oqc14>B|&pId?jjmKcVT z`oe7affXvL$rFi6j8PUXLL}^b;t*V+6o1`bMV)2P^=GJQu~!FWAr*DJSw9j+(|l*& zf7(SA3FA}PpGd*!cLbTuefH|NqPVyr)Ohul&%6SZ>A+9vZfIiFekPIDhW+5htd!ob zM#+VB%`qz7N0W8ot6R-=GL+%o&5P7k(tkV<5J^_J3{j|mlH_GD!b}JZ01yh1GIYqB zakFA|wRNxr+1gtErdy>NOE$SL@LLScSDfy<#wpo`yj&7Ca(opkjdZb$sh7%>Qna&ISZgK+|mMWld!zA`X6a5*#6e;j&X@XBD zhVk1wc+Hjxx5_$^R~IYX-{GLbI3N6_j_ACug&YY<8=%ACC>}-I zYHHGwoj0nT^~p1Lvi16Qd$z6h;qd?+WxIhtz&SIHg7SjUUe`#!?_?mJi$+`2*~2)@ znpRz4M>q3A?J7$Q9;MQZ7F*z4LBQ2}GA-mC-^J^`boZ2my9B|ZS8rbEKKZ_2sv*cZ zxy#j_k?3zA-=y-YVcDgm5qfKZjdAQP&vQ{wbO0?`-X6SbH1;YLK6BSBcu(1mXXs%) zsq~reNk^`Q#clz89LzUuKJ6H)Y21amr40~gCG&LVL(Y)GruW@>n{{)*4w1*|*7|LG z^q0}?von~h%+0f=G%@5|vfLUcZuJswlW1K7=Z=rfo*jp0B1XLHUfhPIw&IzkcPv?+W)av za)6AM>WJMS9N*8B34F12O-Dlzn)``T;=ExZgv;V9n=^-n;~2>xB+L(0Z}{B?z1lAe zsIIFcPo+2Ad}0;7&GvMt~$Mi0Td)-^L_BT2H&t~1YT1!{i?T^v zB2QY(E#wvAL>}5NP3B7<@3@(h(xh>;<|KAENZ+<_$~1I-WV$iXH@yPc>3>G~bP{u= zD~P+GApijQkSqR(@{Vu8U?)e`p9}kM;XXZKB_@Xrqi=<^;VFApAd&JJzP+*2$l=1K zkMOKoUYy$JvXZo+ha+A%C*G5u1=tV%F2XA*Un|^Rl)$$j8t2;}D|8`JjXUTMx)`pK zt<;Hz#5tET>*VUGu4);bbe*0R^vI?KmId1(B9<}R9lYkH?LO6|GZkM7$JJ!8209*F zTz0!iRaBv?p@!$al>#O(lOj4gqKj)KZGdubRKsUbF{lW)$bI#Oz8buZSP6VJO#Dv2 zz2*m?G9lWjTnI?jvpssJNmOf@b;zlRFKq^+g>tn)IqBP`suoXV?Yt>QoCD_XU#cheMrxTBt=9-@?Xrk3OiU`DRKn} zKoJ6|L^1`+(0#shdPVrXy+h6HuTNkFF{gfNR|c9cKORapqhoCppDefSSl`7xf>h`k zT&xzgygjfS3GF@1(<`jDOhzH2?YsF=a}+!_

cmM+MVy~7mI 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