From 31f15428b359337b03b3ac2d6c0aff747039ead8 Mon Sep 17 00:00:00 2001 From: pliao-hmcts <113367232+pliao-hmcts@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:44:40 +0000 Subject: [PATCH 1/4] CIV-11440 Assisted Order - Costs default value (#3548) * CIV-11440 set default value for costs * CIV-11440 Interim payment required set to No * CIV-11440 unit test --------- Co-authored-by: Madhan Mahadevan Co-authored-by: vasudevganesanhmcts <100689363+vasudevganesanhmcts@users.noreply.github.com> --- .../user/GenerateDirectionOrderCallbackHandler.java | 8 ++++++++ .../GenerateDirectionOrderCallbackHandlerTest.java | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java index 57967679b5d..91e5960c66b 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java @@ -14,6 +14,7 @@ import uk.gov.hmcts.reform.civil.enums.CaseState; import uk.gov.hmcts.reform.civil.enums.MultiPartyScenario; import uk.gov.hmcts.reform.civil.enums.YesOrNo; +import uk.gov.hmcts.reform.civil.enums.finalorders.CostEnums; import uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderToggle; import uk.gov.hmcts.reform.civil.enums.finalorders.HearingLengthFinalOrderList; import uk.gov.hmcts.reform.civil.model.BusinessProcess; @@ -66,6 +67,9 @@ import static uk.gov.hmcts.reform.civil.enums.MultiPartyScenario.TWO_V_ONE; import static uk.gov.hmcts.reform.civil.enums.MultiPartyScenario.getMultiPartyScenario; import static uk.gov.hmcts.reform.civil.enums.caseprogression.FinalOrderSelection.ASSISTED_ORDER; +import static uk.gov.hmcts.reform.civil.enums.finalorders.CostEnums.CLAIMANT; +import static uk.gov.hmcts.reform.civil.enums.finalorders.CostEnums.STANDARD_BASIS; +import static uk.gov.hmcts.reform.civil.enums.finalorders.CostEnums.SUBJECT_DETAILED_ASSESSMENT; import static uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderRepresentationList.CLAIMANT_AND_DEFENDANT; import static uk.gov.hmcts.reform.civil.model.common.DynamicList.fromList; import static uk.gov.hmcts.reform.civil.utils.ElementUtils.element; @@ -289,6 +293,10 @@ private DynamicList populateCurrentHearingLocation(CaseData caseData, String aut .assistedOrderCostsFirstDropdownDate(advancedDate) .assistedOrderAssessmentThirdDropdownDate(advancedDate) .makeAnOrderForCostsYesOrNo(YesOrNo.NO) + .makeAnOrderForCostsList(CLAIMANT) + .assistedOrderClaimantDefendantFirstDropdown(SUBJECT_DETAILED_ASSESSMENT) + .assistedOrderAssessmentSecondDropdownList1(STANDARD_BASIS) + .assistedOrderAssessmentSecondDropdownList2(CostEnums.NO) .build()) .publicFundingCostsProtection(YesOrNo.NO) .finalOrderAppealComplex(FinalOrderAppeal.builder() diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java index ca123fb867f..9891b5f8586 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java @@ -275,6 +275,18 @@ void shouldPopulateFields_whenIsCalledAfterSdo() { assertThat(response.getData()).extracting("assistedOrderMakeAnOrderForCosts") .extracting("makeAnOrderForCostsQOCSYesOrNo") .isEqualTo("No"); + assertThat(response.getData()).extracting("assistedOrderMakeAnOrderForCosts") + .extracting("makeAnOrderForCostsList") + .isEqualTo("CLAIMANT"); + assertThat(response.getData()).extracting("assistedOrderMakeAnOrderForCosts") + .extracting("assistedOrderClaimantDefendantFirstDropdown") + .isEqualTo("SUBJECT_DETAILED_ASSESSMENT"); + assertThat(response.getData()).extracting("assistedOrderMakeAnOrderForCosts") + .extracting("assistedOrderAssessmentSecondDropdownList1") + .isEqualTo("STANDARD_BASIS"); + assertThat(response.getData()).extracting("assistedOrderMakeAnOrderForCosts") + .extracting("assistedOrderAssessmentSecondDropdownList2") + .isEqualTo("NO"); assertThat(response.getData()).extracting("publicFundingCostsProtection") .isEqualTo("No"); assertThat(response.getData()).extracting("finalOrderAppealComplex") From c3af6666841de65a3310d3937abbdc039465d3af Mon Sep 17 00:00:00 2001 From: Deepthi Doppalapudi <107422736+deepthidoppalapudihmcts@users.noreply.github.com> Date: Tue, 14 Nov 2023 08:30:55 +0000 Subject: [PATCH 2/4] CIV-11205 Add new fields in GA to store court address and postcode (#3557) * CIV-11205 populated full address for after sdo scenarios * CIV-11205 update TriggerGenApp to update address * CIV-11205 Updated address during TriggerLocationUpdate Event * CIV-11205 Unit tests covered for location update * CIV-11205 updated templates with court full address * CIV-11205 Code smell corrected --- .../templates/CV-UNS-GAP-ENG-01067.docx | Bin 23905 -> 24221 bytes .../templates/CV-UNS-GAP-ENG-01068.docx | Bin 23663 -> 23801 bytes .../templates/CV-UNS-GAP-ENG-01069.docx | Bin 23669 -> 23492 bytes .../templates/CV-UNS-GAP-ENG-01073.docx | Bin 24133 -> 24314 bytes .../templates/CV-UNS-GAP-ENG-01075.docx | Bin 23180 -> 23120 bytes .../templates/CV-UNS-GAP-ENG-01076.docx | Bin 33657 -> 34163 bytes .../templates/CV-UNS-GAP-ENG-01078.docx | Bin 23432 -> 23270 bytes ...erGenAppLocationUpdateCallbackHandler.java | 4 +- .../genapplication/CaseLocationCivil.java | 2 + .../service/GenAppStateHelperService.java | 9 +- .../InitiateGeneralApplicationService.java | 18 ++++ ...nAppLocationUpdateCallbackHandlerTest.java | 8 +- .../service/GenAppStateHelperServiceTest.java | 39 +++++++- ...InitiateGeneralApplicationServiceTest.java | 90 +++++++++++++++++- 14 files changed, 160 insertions(+), 10 deletions(-) diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01067.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01067.docx index 1016e0a18c4e8b1898fa37ba0f047f0dfe7187e2..bf518dcc5e41c904dac10e9e72ad59c63f7341b4 100644 GIT binary patch delta 8606 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 D^J{U0 delta 8306 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 L3(~0mzk>e-as$B+ diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01068.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01068.docx index ca7751745025d2e5c61198098820dee8066e2b45..07e3a3b1e8c7687cfd69cbb16303146dd1f74521 100644 GIT binary patch delta 8385 zcmZ9RWl$VU)2>;9TX1&?7Tn!~Ebi{^?y$J~;_ez;g1bx5z~XKJ0tEN(dEQfX-tV0L zF;!F3HPcmdP1oH$m+gS34nTuAJW}hFR6RWg6jaG~usl3INdL@nofr4LufI2RwCm&? zdPY07GDqN4bfrzSoTw#_;JhBdG~d>iLMP*n>BZVFIQr*o2K==uheROSfv+uh3C>gn z)5qJJne4LNft(AP^#9e}Gev-{~1Y@#YP#CwD!-v|yg;C~od#53; ziY#s)hN(?M>}>Y4fnKX)wwl+q$6YbPyhSXTO@q{US6x;hw) zO?!SAWzJT7&Q0`SmKu;>ZWZSoW6g_FlJpZ_L8W%0ko9RJglf6E2z_c`8M`G=9-4SU zOd&k?ptg6}M}DZs-h8(#`_ zL6}V_2+c*$_WZE)i|btyRNY=>omXB6s=w-2j)zO^FYLo8dj1fLZ$GQb5o_w2~K>k$b+LI?Z#ZKEq|FNZ=N%= zb^`?*Ge@&1`Dbg^)tDIdsn*$b%9t;7PAGY5py744GR_0b>yWsGYsZAEFI0=}icA~v zYh8TQhBrIr$hv6~O#D8*L>y$abQUrMFQH!hVdmEOYzdiu2-Ab%;-6k~2$1@)rToKRG)D4)MtFMxOQhqac4#!6U?U8g(WNzNotn@W#P1m3z;tOe( zf|^s=&^HRp2fL{0YH|UUn+7AM5~c&jF47B~^YFVvJM8}q3t zDe_^`Ee2B*MXAFVYnHp-3r*{+6GKpan`PIt4ulU{lEQJ!b8+%dymFgygG7QWSFjWX zX9<$lxSY}^>5HGkY;dmD5j4DRGPtA5L2RG@oITuy7R!lm>3;2Y`V+`}*`GTw`rh7p zy_ab~fLhc*BO58TSvIDuS}H&a6jeP=wF}`ib6Ulue(Z;!(*RqzV%^jPJEvnJp~Q78 zKLdzM=_D?pw<1kW>KM|LbPB&csntF&!3g7A;3zc-_FS?4&e;Cd{yOOt6U-S>56TU> z(b151x~q-OKH)>dTl*BSEkY`xrl4R$%I_Ukj$u$6*fH#{%MRASOQhzs(op#mi6Xzv zOBSv~Aon-bT>TOD^G%ZJZb%m#EiYSEqp*I>?a<%#pRsoDWo>-2EZfIM_FJce&4DAT zpr5;W`$CpmS=CSa%6|6QyTn#n?VyKeBQoNLP~`w5Fdb3akU=ZzY6H$}^Agx$!;0v| z(oL+a-bnKH7gHG-;o zqn~&k=-C{Z<>Pg~FZhb;1%c!K=_c{x?dAc`>^bIRbC(o00(bZi+?HuI1Vrr3w9bkDwFRD=_VeWyxA0zxx${D_n;izJ9u#uq_E>}6T%A?1E7vtNiat2v}>a9DAr zeq=Q~x9ULPRD$nZ(pYjmzn-vM9P$hnT1NS%|waD8#4ne8y@=ASJDBVJYgT{mR}b}Rf54V0)HDM~c5Ky576 z&rJ;1J?qglOLzqZtKL^gtf@d##t20lr#wmC!ap8aLaexp{b!a;H0U` zHB81JDjY6I`tFRoh>bH-W3)s56`N6Pgp=I)@o@pL$SsmIJd0MnifMOI>t`rxadjcDQ31u1{I#WGb=W*@c8X9sZ6 z7e>Bpx30jdq7}V0qFXg!Fb&r8hOW>r!DLcx?1=FSSPB-pig z!KroTiyK@*E{Q_U$OyOZ=O2x;JCd`da2uVGQmj#>zuTtXG@nm5&s&YLE)Y|3o6U5x zvC2NNRSx5C00qAZIL*8|WxLf#B!eSb5$%03OH(|vBv=&cr>$}CHCfe-ka1rQ$$9Jf zW?1iNyLnCbU;58m>=(P~!q~_}`lgWeB|~#maBmpRB--iy12jE!k%~l7B{n~jfG^7 zle>{>fa2M^RJ7Sd0>X5{U>GfCr)MD^&g5L1u2ZW24BPc?E3AQ58%l{s`AZe-x)*GR z7lR`a$ldXt2bZVbewI6^<;Z(NvF4e^PKWnTE1sH)qyjk3;|2QxIFYKZLhsGT-`~@U ztWM^%h6Qt}r%+rCSZ~z3ls&I3PXOBr&^cjAZgnMA)xj5T`c~Y{r+TsSZpnFdg|P2n zF0^v>HrC%n#4va5tsoYxO!?{lvhLhJ_hq{Q<-B$J2i8brxd;!wN|$e3VOqF*_D-*1 z$hn4(Ij%n43q9Q<%3L^G{gFfvLY}N0dR0?y$jX!=8c*Ng_i)MXCClyQlHlahISM&9 zes0r87_J-qy?EP$RN(K4;?nDN6_!Ay+cc@+4n0eYF?$Vmqbu4etkA(xyV0-jPsMr! zku|14(mXbt(7S%B6_2-=+4$n!q*D7fRc3E#@hM$=dZW<@PN5N?y#-O8knLb7hJ+6F zRmNyqV9-8_m~yz--ax3{87bZ4FF0-zn-m)*SCnV!G@of>yT~$~@6UGMCl(si!#^HY zZI;)Vc_C=G8akTz=LM$kU1i;jNs}?4YPp2o(U=EpnX^u0hpxM)Vm0y}6xnJRROvsq z7JpksQ_8hPZ$uxuG-k0=+)2by>w?1-C{FVWeE0g=Z`h<{g_xgAN}Kf8*?!e&R#qfk zrs`~w^^K+Lyz~4lkhS&EqE;^|7FY5hgGc=F+9x$~D_>cA`tl@h_+!+gayaJ*B(4E# z_@HN7QM+QM*j<%iE~;n$CIFaqJ#N(tt#q@8hU~xY>z3R4*bQ#IO^d`Z0!0mfAhp{G zR-8P$l-L!G=ITW(cYKnWIwvl|=aV5zTl({q*XooX^fl2wD@DHKv5ns#=0(giBz*PPhrk21FHKK#K3qOL79B;=fd9pF@Zl6h&`R zm%op31&gFTUK_{y)9FRnLYUAvbC+)t+w=PzGR~~JKR!W0eSDnj{i9>Ku>)~tM4p|H zrBsU#egWJaknI(A%<1lHl&MEmD1dNMv-?{#w8eV;wv-7w z{s9j*!<(WDqP&|QpAAUU$AFrFftVy@z9iPhd}}E2v?jTb7yMJ%>imm& ze5R}Z>It^*yABF4&aB+>gBOpsC68aoF&^rb9NV?8?AzXV!_X&1K;SE*!u3TQL&r_Ui-?Vg=|og3Tm7W171*v3Pmx(fIPy8fA!(pl{^G) zUeugw3W~N^$C}7dBrvNgxr zGbvK9`V&Q4l-J*49JDoO@lFfqV!oY&Fx%E{4l8l7YzF<3El*x7v!UP!&&pb%aLh5W zQpke^i5AFlC0b^kN;U55_EOH$cO}VAK(e@z8-}jeF2M3w*yT)T+SNkL2wVVh;RQg^G3NKr_# zIE}{|k^_y&ZY1Qk45Myf^Zeca;#18~Nl?AN?)L$5_*q(&2FCkn7ch+6tv8$$Z>D@+b`DMWXAe5tnPA8pMI_?3T%R|a(JYY_57V>-&)in z_<;XNR)a>RspWU$&g2*P!2Cp~2)1L+PMI@)dlsvJBRxcHXA7UaCj~b2FA$d74N<8@ zy|hYDJ_|0rh?Xuwu?#}mia*DsE2*Ul*GUE}9}vPagj&UL8(<{fff{s)_QSW4?TTXl zim+3dzY&8~KCHV(#M|*}+ZE5@{Dc?x-E)T~;nJO-k_+?ui4kMKY{v=E5aeXwg%@9A z7+-CH*|#)cr)>77U_I_hviBs7ynErB@)`=S+_=^=&N(S4 z(j^I!sK{+8_>nX!i01A8u@O2;8zh}==cB0?R4?154lk-Eg-Qy~X@HR(VS&{u_S8aA z9Ag^HE*md)on1b?s3~Kca#DQZQ@$~^bVG-91DhHprIWttE6=Qos{!{F-|#v}0jT02 zbMy4_Mb+D8DIevoE^MBBR`pCc3cLgQQq;562l}|7of%Q73S7IV2Ihes^LrjD>wB#X z4E(!)3pcxV`Btf#WP>!@c8Kh=>zMXxGMWS9l1hl$#RRpUxx=C@@ecRjR6-~|^4adQ ze9|9pIF4dig%g|Ikqxj4qMXYS7n!~940uH0hZl)k#nAZZLpqfgJ;#C_seqv7HySoh z%EDc|4|#5^ArErVDbw!}`=$@HrU#q{8LpQ+*+vQNGwg~w1zW1$7LzoIWiD;jRJ3_; zLz+L&5BqA}CCDKj!(k`s3GHxOKKXmO6^{<2na9EJc4}Z@XLn*9cLsmCiHGZhhgGqn znon?1VPzpToMxUfeL3eZ`r#(Iy)`ci6Ag_mdc=YSsF@nb#LK{X$1JB_wH23bQko~W z*cHH)cKyR!mcjNpJXMATE>FR$h_`2=cx+D+h2XQzks3d2%F#Yit^x;d$ zu12%rk8`(hYc?sZ1ZIDx8ZlTf#jgS@cIWJZ*5vsP>lAgjG(D3 zApl3_FZ}7@bttKwU+CVsTk@Gy%xc+VHVVm%pn56Qr$j;!tq|Xf7APKm=7kA)YLmjZ zrK7R6{ts4H^UJpsp^CwD6^ZO4bZL6|QT0WVM`c2JORj?}6(}^p`T|CENb}PBuQl#t zGwa}h11+nuo94fX(I#{IoFv89Cm^cbOD;PaV)k|eZ)I!d5Tbi~VJ`CDP?ll${yIx> zQX`_JwT@#ZLQ~a8xk@80+C-2BtIz%{N6^NqIhH&s#r$>SPo}XP_SuqNlD;{WHlYI7 zvG`S+$4I+f>3+W!Ajj6T4#2M)D-)>Ss|%T9H~bZ+fe|?Fa*8R(c}awQN1#H4$)Qk` zhe<4FD(aXQMwZjYmagV|{lx1PyaElwWC$2KtO&`@zU+SB0Mi{i{WF7eKDFZ?g1DR0 zAZPM}yGg!Z;`|fINk&W1UT0h1nw{LJS|<>pz^{ zacdJdUIU5wJW6N?k9W?4%p_I6GYN6UT{(`!FwJ$N65c}%phcPxadi@LNhxX|bN+#a z)?ivFB|9BGDu0t1;}nrNA?C$tiy~a$4CR$GQ7!-dr~hTan7x*KED_rIK<7@sZZM(jzJ3|k zD4_`8nQW9#GRr(E@+Cqna?w3%tt2)K)VK0I)p>l!a@Vk^1IZE6_@o|Wg3Li)~A zNvH~r8U5=r>A##x%#RuoZe7y0H|DLH6FMCcRUGy?9+x+KZd=~S`9GjGvyxBagPNIm zMzmm|pmxxqp#EuHLwPy5nzOiBxVzgpTDdWMJJ`2quP3Z?qX)3efmm<#>!l1Tk@sMh zYh{xhV!UI87cm{M7^9)3>R0HWFG+rzu6EfsBVaEf@3>TYy54_ z%j^e7if0~LC@)Z*tWkH;V`F48V>XK^_ul8G-3+-Tn@}0E1ev}r4v+3cu*8Q}4h@WS zn|AClZOd6;{=G;)bblmZ8U`+3C}8H3G3ZV?j)WJ|4ELXT&SrbwY6jHvfS?{qz>!W4 zdqoV=Jyh&Q4VzSWBddEfyY!*ou5#O$h?O-G08PHS5TB!y?t9elLiUYrut($P-!hWB z>fMZm+=ASmANk4Ncgz6k8G+i@{34I%kqXgLk1rt|&U3g;kiN-St|N~k`)F#vg?yb- z!G#sr!~D&>YIU?WhUBf6YoUBvB$+1{p1GPhuV@}Y?)&#x#kX+k>H(k4S{G&U_*9+xyNKY>M zWZ@K?YhkiA;W^q!;J#L%kmwB`Ofv-76~Ik#508|gZ5ecQn_V+2YDm4xjGAGTt_FM6e$mVQ9A3` zIvHv;dh1K0+W8qec2+OW3Hnr1$;jLIMp$SNkXY!&9^EaCM1gWf_)jNP3YaP<>ndlMe9r(7D2o=!v z|CIA9ZwzGzmBy1N=!3X6j;&-;Y|MZ`tBu_7(fg}a|BPo+jidudNH$*2A3VI#OpD8Z zI7iBf?39@Ah|PaHXpVEVK5!c7*pymmbVC2NRigOxd_quQ5~V-&h|<+tA}_qp#IkDJMoh2%WkFNgaNjt!q3{QW(f&jfJA{_qJB~J7R`Ci1I+^vJHNnffd9W6|k+3Aw@tb^^n=3mi~$ zO6fb{;e|;vX|1g_HcO#|fqx*nL4Nryu>_(La7ERhaue&<>4NY3i)dIkw%y(9oZbTG z8zZP~wWv&`Y15GM?n)*T=V}+Cz%5|c{~fK__j^u~{sl@)%hT+=x6E{zlFKdOP^rFZafqPX8}Ki zQ>vEP7GuobF(OU%0~L=&P3aG@E^6AqBrQ-UlG@}5 zu!|BgS3-PxIHPuuL*L`x_qpLD?dtU9QMiYru(i?(W5J*3m#b*mtQ+r}Q3w=kiW+2? z=S5~*5Tn+*OKg^VR_%lWh2EemOH8LsjH*84tWrFuEYNuwOX^b(mhUwqe*+oI4W;{1 z7>(ds4?tLKp~5lgtXZbt%&FnaQoswB5*!GrrE@`m*yO*k6|}e%nU5Aj%1@$%@p+Lf z^JXr^+a>w^Z4P)BuA+;txxyRo9Yl56cI%gN&{d2yz$J*N!Ms{#aXZKt5WRn$TB;3) zej*+~EAPqV{%JFaIPoRC4FtvR)gIa~GiOnZ4 z`*av_lVX$}Cv*eF~mjfCQbdZ{PR63F2Cj9fL+Wb%ROIv7ucoi!*yR{&g!&n@D2J#YkASu<{#z9j zI+?*R51**{T72ZcL3s#Razv9Y%U+b2cYc5(-pENxoC%E%lE=Epa0m)Sx}R`YJ{z4{DyXT@f?@`oVV! zJBzDa4S>NT^6sSM(J>J%WMhIzmY+5>Ql$fbFXeoR?1^Guwj7dwewqRX@k5II?-}wz z-mqUQt`rE^uMieXb9&{P=Az5dmO{%-VFjy7r4M@Ya28Uhgh-4C5k>_u8r4-hvE=>&6&A61lz&q3|IHQu1n~bJZlMAm(4!*$54ry& glhuDZxc>;d|7DcwDf)uY>{?)9eMUGV?SEJP2lB)RkN^Mx delta 8238 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 diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01069.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01069.docx index fe1a842c34ee4f3c4cc40586e506bec4acdb2fad..8a359232e14bb1a8b76346fc3e11be39adae6e12 100644 GIT binary patch delta 8971 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 LIvk_!e~SMHsuB?u delta 9100 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 MFyPnp{$ud}0DhTOLI3~& diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01073.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01073.docx index e44df45adc1521e91b91cc02e27fbbe90742800e..75da4c61c2c89f9ea2091980a527a354e4feb9d3 100644 GIT binary patch delta 8401 zcmZX4RZyKlv+c&+-QAtw8r)?Q+}$O(^92u1*jR9Pcb5PGLU0Qf2=1<%05|`+x6Y|k zw;yKaVS1{oW>wGXUNh1I1MP)rFhK&6sS894aX_GnS`g^p1oCzBu;#LMv+{PaarNT# zb8$X3I&obSB7E&1=nLO6@$v~RORuQjP(td`cL`M$w14+blBh*?ZB@DG{jAdZAn1m; zyIxSEDSBZfF*lCOO4I?bfKcuW71s3LPT_FK+mLrUYeqyG%A|(qDqCxDG9Xsuo|2>? zDrpkIq^`gsJY|(Lmy_dTTXOpMa=#vUdaa_Gx6k^L!v^}2@ls7Ia;7T81>JBZQB#bX z&@;g0F`UBz2xeHd2J| zHH=VA5|nS~CP`4L8pS{rKT|dMUH_cl@)CLYQUwG%1SWg+T3B?L0vX0PExT%FZHebq z=Td6yT23bNS~GN$6G~bwr^zmHh*(S*V|&4<9Y5#FHgpPWNgRE_Mw(wOFgp?-ThE$W zQvQa>s+kOB!4{o0CL#-tI@6C2gdf1Um1ZIAIXb0izEpXK|G|QDTJrkMvB1|js?w;$npsX#}Ox`%?#i+22UuKvrHYKWG2Q3G6 z$RK!Fj&QuShNw*!e$?ytdtLsLD^=qs?pm&c8qT2YX8iZi41n1FQ5yX+J#^FiWVC;P z?(=b;V=*TFQw<1a+i6|EFMm`A@9zG9@+T6nl)plpZ2|eU#BASREnjvt@-JQFv#GGn zJ1pe{s><>~-FY%UgeTihCQ`1fCoCX6s+QNT8B>yO^PSyA*A@X$c3!Oe;1%0cV@Rj} zH1o?kdI@RWFhI^wvrEO2sg2jpQg^YB6`ZC1?#qhcbT;Y=effph*x6clezm9zr};_H zw?$cZbiD!15;~e{J8jtC6#~gIu9fnnP5WaQ)OMHn_f%I3*fMfsd=xT@bk$Q|YZlOD zmJ7AsK@n^p#m6cF#YGpwOm)xPHdg zh#c>s?eD+Zj{L*1V<;cugCBwd+V;Z4)NJ0%`(<4(?jLCRt;tGJM{==R=m(=XOsUw% zPB6nT29pJ8aS~5Wgz?t>m5#Fc7URJvEdx?F{~t8CuH()JjA8NFnFAXa?hE6PVu61O?%VH4g1WNaXuz5vkgj(gv+Kx zct~C*^&i|Gm!p~aKaF0zC8SaP(fB&JN!9;$kq`9u65lLuZ*u&h5!MddQ19`m)X(<& zvSVLY2^9=S!(dlf4DK900>yo!waDqVrQhH2D=YU`nSGRHe1fstJ!x3F=i~U` zYXg{MEom>G8VqWM)EKr|-K}p`mmEn(X5NM3kV0Yp9!5EPRNqtEJay13OH4*Z+)>eT zVZr_uzUSND^`hd5%sM+hJZvfx8qbT+l2pX<%TyXJJ@$~W7UL@%RvQ|I7Lo+TVI-Xi zZA^xrYv71Bksq3Wbvdk1Da$@%JsK*ETTFzk3Tx0x*vN*)W~SnJxu+G?#l5c<8n@_* z{n(v>Iv&L`ZpymHPBwR2nli@|dSJ+%Hsk$o${KG4L!Lf{$_i}{!}mC7@YGSu^` zsdrn9mElIh$*6?Sn=EZl_%MpbZ^s8U7C`cE6GGC;?Hj9<9DK^`uz^8!lw8@6e61_y ze2B|t6_ZH4e!J?O)o2KpjpPKWrAMB`$pOGQ-i zQ`TGdA;y&;N96J!KIW9~2utE^ADp^HE;T#z=v7I4OjtBM(`bFFm5>corjU~ui-f|S zg5f1=p)FV?y!$sqzNNcz>p(wcqpGnK`kvu;XbokHR+x1{-fDAB7Jroo|NHq)a|S@g zzU(vXAs&4)bU1_BX|csY3+)32SKOsWoBqegk!RLb)~rp41R_iOgaBLE!{jGZd@$+g z8tpF!3wOU4?k;_#Fq;BHL;l{Lq3jPwx2H!1AsN`8)V_RBX>(KYaN}QRJYDbG)Yq&b zg{M4rz?zv??}jqC83^UI=MP|><_R>wujqC;3t$#Y z|C;zW*9B>(c4#b6Fb^Q9u&AKg^g}A%NpNmwV_B;b&{XrshhEkjiko4%9E5tku$4|% z@A(?uIVUo$EN+jQ-(T$A_$VxVO{QZ3;CC1gGOt#Sn(UJ_A#A*qdN~&oGZ%TEmN0$g zwVGv?^*G#r9SgJk+AK$FJs=TZt1(*;lv#oB`bjuh*eF@69)PU&$nh z#K>`Gvd6`)18E{o*Am=Y^-+@|EZ>Zta+lLxmuj*X4e3)0>J(baEnKVP$(09ASV zBrNr}{Q>#56JSC6QuQrqQ7!Dd`2FZx)|uluh+;3N>-f=vt6`%)>Fo^*1bTZrH9qm! zmM07$;E+r)>z)^Er5ET>&d{~3N{L4cWJ@#q!0TvbBUMDd65rgaLo2xsMib?S~InN1I)W2C}In;@6H`s`?bJjdEgP9S9>g z)>`Ia2juY&OG?jGQ6H6Z?25FL?}{qsp|jod=kwH4@=94w{nyd#KRWL}EC4@@iWVRg zc1Fs<$&+;u=k+PKKC<1n)Hi?VUU#1m{@dP553`P9y~Isk757t)_QeaUA*HV&{E?z^ zYJZ|1P)-nn!MLG{me|5We+EuQ%>Sm22F*jjIBi*2%mF6%bgZtK*1*h4@z`_Tke{3! zAi>_ltI;k0ok$D{|2%1bUiAKlvX8fZIX5k!$~>A(Rt5e{9Q;O{dd4BEdp8%hb-;2UKB>E$Z$`oeVVMr!C-sa}o2K^VSs zT$Ldbbx-bWBdA=|H;4>-Jy@UWC8j*bG0Gj<;GZ|5_etSXY_bGCJrd$CNPDRfWLaVvIBIV*r6t|@fk>8yY4UBUw|%_X|(tqaR{_po=;nOLfC*`+-JX(}lS!_9Y9tv;!~ zal|;ojG>&>4yoD1JOU6G+jCcJ*&*twKU{;!{Z@5W?VpJ>VZSIG=bzZC4jYNebl}O& zY+e0LI*%P3NH>Un3l;dDZZSbBTD8s(bV)dS)v5{GNzFP6f?C+s;Ve?=H<%Y%>W8F6 z$q>XXLW@)F#Df3SlAXEPeX<#vOMUd`7J^$~wPtZb32fI)$s8UUgJ~T_CX#qkWS3Xl zqTJ*%g^Csb!Bu$39Dco>O+cZRJKZkMw!+5XZnP>2X5Y$c&Qs+*a!&VLvK77rJY%Rd z(sw^h3!0z}xy>~%)Fn0tg@C!Rj<1*zw3k=X5gvB@#Ndw5pZ6)>B`jC&^y)vP1{Pww zv&)ikOZxo@EELP<8EC7CH?w+^+hfgLxi$VY*p|zy5c^_cPbMKQh3M8X!e`Q(* zReIl_n^xhoX^OsIA3l-;yVzZ$J)>!gY}hP~?B<@HH7MW6Y z4*xpF?U1H_#Ak^Hd{3sRp`Oxq&I-xy1`{?a(DpoB?$MdsbM$ zsC_F1Q)>bdQ#hp(MI+KEmOJ z|BPAfEWMEdw;+TO#(r_FUqU3-g8^Mv^1pOrn9k1n9GVya=Kg59u`4{;tl^%jAVt~h zY?y9B!w*L+a+S0vtxQedmzW7t-4h8EP&T>{BfA052rF>7?O8u&7-K{=f%%A#00I&Q zmcFjGucKIVw>^Y+gupiyuPnxKIu#qHkyH&yj3{6KWOb$=i8PZxxaiZB2e&W%cvD41 zEPM@c*SMtkkSP&+=ASn6ftT;^t|})5e%J2Kc+O1*F2Zdu+T3p(n4PbZ1xRpmHp}MP znY92EkBG!&PGqq;8a6NKZcm8S*MAFE83?QPnJSsCV^kl{Da;uX9i+l@ zB&vSMX1cTGw`n~$eYZ;46+63D__MZ6nNK1F{Bc)NS^I)5_JXgj?P+qVO4Awt5 za+G;;Kh6lx~SBxWXcyhi^e{=q&`HXW>zUv zl@%9YQl(t#P<&>cmZ3Zld_#hSQsXxV5{JOT*L>#kfxM7X1LLl1+}KeU2vAJe3(QtO zaKtYuBPKalxp@hY%xpTgJB*Ui{hBYclRKSYGQk3pA*rLpEBREsmoKmt*>1PGtHlof zxI>qO!a8s4oN@S2KdKZjW)-8TM1x>dMECA6TdT}1 zz-N_{NtX8k;7C~iMaC+eo~@=%!da^Beuxy}UD{IelUVB)Z7pIZJYu zW5~99iK)m{NSMk9ysB%-{_wZj-kAh6`rzG z505Z&B9#EVs=14M)}rY6rgU;q!o>6jt-muLX|S>AH2R6z#@%+cC}ZjCVW!fxqxy^0 zQNI~>n>ljaW6=jmA{`N80JqXl^hum6>p+=4#9+MpiyR!g1^5)i3Y1%|)qHcrl0>?EuRhWeL*P1N6SdXBYWcq?)~WEb+zPfgW6Dx<0w?sKlBbc*Y zLp!A*d8PODOZOjzq6mK}gn0YVN-|4o&|4(U-+umH3?xPLFW00Yk8Sz4Lj~_heJ#O1f@JKB8DJsfR2Xzj~OS9-Mf;-ZuOV$T1$MLOt#nJ3AQeDbtoI$7c^Q zRk1lV0x)9>#9+rR3&da~rHdX_{3m=%H}bu=0?`fI%ygu1x_c4B_OeKiQ>DzWpM+`m zJV}G|giu$hYOQ9DE;J zr?Xy@*XB>u8^kEFjG4H&2p~`e#8#Ldn7JX3gF2vi$0??-;!lb!kld@Pw5ZAABE%-{ zU_Nj9mdH-1|Dtu6&4}o_IPc!M@)PU#f6&*1Abk`4krf$P=jJShn{_;zCEaC5HnDSm!pi zg2@jOt>)?9Y@ZKXdRbxd)qh{H*G82aW)`9@U zZ2q<$j}2BMEfkv)s-#9-@)BM3$*O$?3xIsHcK-xs`&F>j`o6zMYYQ~*5i{ta7ju~L z&`qujhpS?vpmvcT{r#>8a=~^9h&zM9p~6jz$6_9D-tbfJ!V0L9>UT1+$lo=H9Te`J z_=VwNQQ*aeQK9X}7qH271`@;---tlk^tUL^)ph7e#!teoHM~XxeuDLSOB@3Z@k~5_ zK8p&cs+tT7u0^@`)KQZ&=c44i%E~dlN#pKGw$djlbKaQuMp9m-H3oP9pN+nubuiDE zJFjIafqp<-bYam7KDU!E&kz&pf^pVwQ5jaYf*H;)0~qwtl(C3?a74m`8;8h=!Y*~< z(3r1N`NNu(Ptr~`7`5zq$FDGR#4ia5}! za^OUNCKRgE4HiX!ATB2Z2XTb{6Uv9a(SFlM6KK+;70%RvV%989`2Dnl()sRF-EbqV zFukW-f67VO-;N7-1o=f~fHv#`;XUcm(>v|mjYbCHK})RB`?#FSA7gB*zqO`F`W=*+ zf12&by9z{v!=XlopzWy&i&lsM)EyCe4@6HJzPnVKQBhmJ2l+bzjZEyC*N@J=$tU@u zN+uIlPv1^8eFCl!Tz@Dnn#zxL`#=>LL}>5H_X_P~(_IOFCMZT3TU&dQ3yvGV+kW;e zrm~})f)r+pNnLX*!{Kd1)hS6_#C93lcwo8QGt@1mgLb1WY-P1Zr|Z=ex1zx*q+bR! zt_xZ7sAH(8cS58AYlSZ1f6mm63C=ge8p-aGI3BpxVx42naBIX;sjCjw@mnGvJq7t_ zE1S_11jgqkzLlaVnQ%?UkMX`I;e{F?{uVsmTJ!EzrC8&)Wtt$D4FnN+RLCv+ zp$encn^?j7Zx_xuL%L#$uLVwMI$FKi4|Jbs@7PwLOn|rBm+gQ_mb~>J<35c1OMfK_ z6TUCQe@F62thsl>P%jssS?s9tu$Ly)TrN*kS#4Em0-qcc-kgnz+J7v@-w#V-;uO}# ze$8tRUMogQT+>afrFbSX>t28jb*&&pgK)MI77QQ|Ar(34ess>clhRVLjnk#H+ms3%oo8IR?L z-Zv22B&O#cbsFv`@@h=se}b_F5<7 z-CW{NamMS!NXE!br6NRn7*m|w39*{qh3d70+qFbiYH`;!O5#WLbXbpItkdh?$sq^| zDE9Vk(wV6hOZT>XJU1I-9Hd}DQq6|;9`$4P;C~gJF7w}>DhF>z&JSaR9j$vOQ_0=1 zW1$wkMX6K)mi;eO|Dm0bKx6FYN(mzzluaYC*eDnf=&l(r_N6nPUal|(DnW#vmc9Ao0>nXpC`M^Gd#^C9)m7iW5f(v;>oDrr&F)RLJnn7A+3 z1m$*wG?|Y!L;6qAe58R`W<}-Os(`F`xXE&Dmxt{9-<;Rp=NIl*$GWoyHk6Xev>Ht- zG&Qy9QLotO1HELS(gW&T8&D`GAJ#YPW$E^rq%jt8_P+oIbP9ps!ws!+W*Bq$eP*4z z78h=etK4w6S3MW$g7>B~NbKCZ&HZ<~wI5Wcf}zPef`jmnsh^UAE)8`gR{vX4-z4J}MPq`!n zfcm^!c)nkOba=7#PbDxC2nFs+S@I9ebs6~i#Ljz^#rhyB7_rV7c^6E|icJ zLvdJ98VIqG7|aSp$4DI3ixHA)BnFGa0+}^yL4Y2>!+JzrE`U>pt)4y6ETBd8?}*dk_Y@5$es*AZldG=jV6;z~^2703QGV__}-AytQ!$d%N1Y zedP9YbvZE$Oe#?%fWu3laDMozo|Wchx)ma@G~xfO@0zu9Z|PF`2vNXtOX}ET`p&;o z&9Ddl72Fd9J>LI)FtI!|FaTDhm_zOC?5uh;SXf7SeT^31+;LORZMXU$3fR1YASEJe zi1>sbkN0U7RAbtHXR4%*cYTXBvS+CQ?ZbTwf6O>{SK9fR^#D{BRb^0CY)kPH%`A5m zpui!tR}B(>SoF;kQR`QEtRZ|H_`v5u&DV{+bBT8qI<2ZrB?eS+2#liswLDr#ckt^} z$(3rYt(lLJ6(_Hf`pd4H3KEqXM4qBb&Nc_HS|;WWFU(b^zpwOXvPX-8arOhkI%)@`t2qs1`spTGC9ADFe8LIQbGq4X26|p+0^EY?y3d6W z194iS3$YKJ3<-Wkzr6GPmf`g(qVWB^NL|rd8%#^GxW*}ZS&8zNvKE+4{5wpt?+Xyn z_J%I{5g6hWC^p1}F%g&*!t|i+N{a5EN zck>z~QB$nYflMgL?*40ReDU!PYX4V}Tm_KRnaBJFC;eqQ3Jcm#cGUSJI?Y7z{?2?N ztIp%ppGj}Lp}RCC(c*#d5|Sxf3d@3dtz~)+XxE9voZv8z-33$;qG#~iZz}OH&46lS zSm8HV>@RD|OoF=AJ)!fKp4zFKq3LU+d2xyHo~=mX;71y5)FI!y?I__sk>1E&c&Emb z9An>!30WF8iohB8FH0{mF>J&~S=;B`+tLxY=~*6@ofH-0nti>@@*;~Gw-a+s4xwYz z&*IE=NtMrDX=4LikQ57l_fvln@XLrdzsLEAPLKP*h1Uw+TPO0#&y*~O(aBXr^>z7X zK_=z`@7(vBM!t2M=a0Cd_b-VhoRV&aO!ag0@!EC>)F$_P5X&)f*&Gasj;ljapAaQ? zy~$sHsH6W)hhSqXeyGw02S3*aQSBEfLaAY!syX4RA(9W1mI<}Flq8(k8B`lQ zW!37679y?NpU_Ae(Iy?t*U8cQr{z-*Q-kAP}f9a(!g^f*@K3fef0CbAZ#VDgT$BsmB9|vGU4q~EJ-TQEoxF*a4X33 z>EUc(KdTW{UerK`l0kaXe?KHvgfj-J9_k0$$h?pyT$45)87|JY91FujF2mLh?`DFa zcN&r}kh~n`+vUiz&dtiVTuDu)Y&+8wWy?^avvp2T+8w`}BtXp0I6SorGWb{#!iv@Z zm-E6j?s&*Qk&H``QTXCl=m)T{inLkdX^8$TX<1tw!TTvXkP`XICw}Z5&al}AdgB#K zE7FnWNg@ub_vv^-hVWwi1)*_NyU$$^oHG*jUnf3~i1FgzcH<_++-lo7leE1mS zD<*f=lR?qnu%mrV@bc2zGc&tqgv*EjLQD1dLf;Gn!Kl}tpuCH*N zwRm=CBJq3fOqKvJPseTiFgDJGV;Xh~kIWq+1t=b(S?; z-AKBKm5JF4=N%l0xR#5{N-9x=bq}kjPcVrUtO!2L0WHDI+I;=X*6gd>S7Tm`NUaHAd1f2I4UuJ*TN|Mw*R+6bsT zA@(hY_c=@xM=rQZZjOjgKgVG1g`r(Zo3hh5`?<1{$!q|RS|PU_ zsZ9y487;P1&Jw0>VYM}+=;h)R8N9vUf>Kx{gUq3Ms>!wd?d?d9fk$-VwRJF9pU3}+g(nqY$b2e!+5N=5B*(aoxSuC0cwQ;GR)$Zc)2Hx6fW!9HCo@kCP9rh)Iv~k?;@F-&#=*XFYg>GtSx)PE=3yGBms7FPFlEd6HS5 zPk8S;ryAccMk5phej(DS2XHkrE>zG+M;6ju6r1~l4onR~XcZyqx(yrIJLfZSts7bx zI{Hw;K(Ec1)?z9mM!@}fRo2$5#L)nR&RK@viep;pA{Js*X}CB=0Pn(91HQI&pwMD| zl_7aVDUb^fACRG?AFa1>9#)oS`3cdXQy@`f4y)gh*P^N9zvcr@Mm}8;cVmwR>zn zlEKE+n+j2>p4NBxf*aiWuAt`PP10%O^<=NgmD((E;%%)&I*RtHplgj|w1EJZdBfCV zLaVc>y6gTsI#z~?*B_p}xe%J14rOG#xYN1bL3sa6x6qLMTSJf>8Y3w(`y_jpE$Vg2D_-XQa#(+pOi+qh4AOd- zp$I&tv{)yyD(RDs5aUbHrdR5MbXPIIY(n6EdTVkApQs}!e4+j*%FDAp5;%rSC71%+ z{dyrtrJE{ezEFcFPiFB^+=nM>lTqputdn2+r{f_xca}bnuB+-vcG*>&c3y=-c3P*M z9WTfMTkbX1%8}OkekOhB>=@ z+p%7inYUxjEv&FXk%SuF7z)I&vb*z-C+%6e^ZjxOYi0AH$p~5;8mcTQg@8s4t4hNMJ<;q(VyzQq?nDwSEH|Z@Y=CtFu7)&HOr$;;!^6#upM5b+ zDs;r^VjcW782&Dj$ux~;MaNpC+7Nj9P(Y}zuAaFd*0X?2z{r}1VM`PwQ8PJoaA&M& z`d!E*(qA|N004*oGCEG&79t8si=lmLf<4usjH=}3rL0mT>*_&j-dTUwQ)XDh5;xI1 za=y8J1h(XTN6yZQ{5_i$HnInlI=B`c-fU1m2Mg#k1KAw(2+E(s%8B?(AJJUR=7 zEM-{1R_~4kXt{6E2UjXK-|M|`UE^&lelrQxn|gh*Std~V(M94qS1*XSO4`VZjqz4M zYva%i-Pxq%B#$Iq7W=yp-s7(y(vvrn@a+VZ3t><0O z{V3TyHc(k7onQHl!6XewZH7MU^e`vAdZ9(!cAK7%QUR1H+cLc*ytp#kBeT)O>F1xkdr z$OBI)tTAnt+Z<@X8f-3gwDKp7U(4(0ND;gd-1oHlBZSW3oUV+i*6F)Twi8I6(~W-f z06Zy(=0wS`hC}oeB#=>UydF{g@5YqCl{y}?JxD|>>aE<8faGBqV~+^1MXODsuQj?| z2*Z2f&C%=Wq@V=Lnba*L`8 zZ{)#vE^4vt0LeJi4^-)K{j#=D8=p@AY*&-3knmJ)P*g`kUWNvS=iMpMO|c@1nY z`mvKLjX`#7kRTy}0*JKF?#KR)3um{F`gKd6Yt!0o-;L4|tZSK=AN;Gx_~iV7U7g(w%YTzoB)rL-$fVSj|b!z$hSx zOw6|036Lx-{(?vAwYAIb9M$LLZZFuck3|0SfO3MT=ya)v`RxIi_hvEZs?@*AF!%v8 z#I;MYq%IqtIwF!roRL#ru_J{Kv5;8T01b`p%>^gg)qKHBwTTJr(=H2l4qaP&h#g&v zdgE8j8Edr}?|PX?WN-VJvZeNC2!+Br-7__ci*ntinC|Tt+dI~`ey{}sVwVeCKodDR z6cKs!X737CM@a`+^UUGFi#ivd^R;aEjrg#QL?{kp)?o3?D-Q-Jj3^R*BvTQ(Tl0++ zZSR}3pE#1btJFqu+7sfnAF1`tL))E-A+ z5uZ(0SB2C`gN&$0Jv+%Wn>DE(m9ow4C>Aep2DKYd&ihEPj%<*vl4;7p7!z*NBpa65 zRzrheNH`3!@Sj>o$ebx1!sFgVWksxuq8mCKj9?>Rw|x+)VROQFOHgBnYww(wu_(ch z>Mkw)du^>cM6CleObni~r5eOLrP(`))jIi{M(U}yD@rHZ-8#d`RKrKBqfVqSzH98> zdPNRNf=(@JPA~nixayOhk51(OLCA}*B&jjSNC8QbB6u}#(r2IxUyDSG+y}O|+h12A zc%bnVRUeEO+fA^e7Q1=};+z}l3m*8f=MSuX-_Do3=*c7uRX58vlmC3&&TtN*8jW!! zSSMVuEq0^$C7b(0*C}cF1 zs_1(VyY!m2%-z_WHo(2sGc^8Pwx{ZRdtG~xknw67p)D|cDJIX^ZhUaqI{$( z_33<<<2ucEZ>$Ci$cPZ~Mu^V{nll+jLM^qKG|pxTL( z)b{cq2&3>_qB72&-N2j3$a%K-cSPyFs-SlX9>>80)=AhEA9jBxr8}95*yHBPK&@O4 zi);&X=-;=8UURcj06fLxwMYfOkrT`P12-EBQS=|UAIT2;_qVM|D?r)Uj0s((4?H?7 zd49ruWySsKZl(LnoxK5=qKoI^f}WO*kF(ux={Cca^|tecY7#{((!A#z{#jMZ%`r8_G=j{K%cmJXs^-y12;dvF`&%i;uR^t?O=$|VwadO+#JC$M zVf*t#IwAd5Xw@vT@^N1SJpRw0C&VDgUz2%V%S5Uku>=V}>Q7JcbQ7aH$0Bx;!$h2# z{tlO7`4=N{(LahW4#Gs~@gg~W>a0D~&A*J1fVu~^4HaTjy16U1lzl6rs6JmY>CMR& z9A<+z)xrsKG(m=qM4EfgC;@+`ZQxW^M&sEvKXWm41a&X8;u}ya}}e zr>wo-7oYIpMz;_YL2E_%%4AjfoQ`drhC=x&1ciV_}X|#0r1jI*f>+(t~_lkn7a#q+B}A!9p6&qQ4H zNWYol;xe?XKoLaQc=4>@q>xUpnzAs>chl>&x>+}~*Y7Rij59lry}w9R>PWVFEEXPn zUEMLI^>NRLafE4kwJ#aL|cUuMX6v;~J#vO@e6(sSzD4F%fLnNE^!D zWN8+<&;I^VMk7V9OK8hx7NNM`HcM8HH}o4&&s1xMb5yZz++?B+$-SvDI%S7-{ zr>m2hj;7Sza9&0bq|BJ1V^Dq0d-0aUED_YXu2Py^6j6s5viT?JcJY+g0PGfhh@1O0 z?~_k2nN4j<-XDL(eQdtXk!M*FG9#XmcZ`^6E@BaJx&h24fMf6(}O17b!Q)%;5f2||Q~nkz0!C>~9NA(H{81hj@6(;tb;Q**pf z1@Zn)uii`;X57OJ=Yulevkos58RLRC6-fP5P$WKMtHnS)!e5GbcZX5N-M5(gsyNu& z8-DkncZy-$*s$GxML&2=b0OeVo&gUD{858@|CUtlF%laka2LvA2@z1~=E!R`p*(83+d0+jnd2*q$+lxF>bT7 zxj0F6K`fEW1x_kRujqVaFo&exBeAB+$f8-E*)xdJr{$)+lC9zw0wYPV4C7PlM0y+6zgm>!N183wbb6+izlgrHJlqMqI@O+Tr6JGGtLj%YM3$Fl z@F-l~AG}r09rJ=(lgkuhPQrLrYJPIvltD%IU@mCCm9W{wUB_ zn&5lD&K|2}*Y74v-n1`WCAnZgt&H9&qKY$NyH$A4s1oAeZvuW5O*pTs=DkqQ9mTMB zXvx3Ck%-$5;*#^?x=beWIXDthj-k$icfc6Mi=)YRBY`4ZIo2<{IaJ?mtuzC0Bi^px z3jcUY4*=C=)|A@?;)XAL&Z}&?riNFznI4ptJzU|>ghGbUlr6f}o`qf~F8D-N9$^~M zc^R=jjhtT(Us=ePwTUQ=|Fpw+0lxFHJVpgmtCB(o*>J)K1xXy~stS@O=(kt&Jn#+P zkhJnMYLkyXKQhMuOv_q6lAMZD3xt5k1^6GQ{huDO5D@^7#RLEd{(0~J ziDL?wh6#}BzgGO8K>VNJKV$d*i7skbqKPD8G#zZxL;`^chG8m+_?-!+Vk&`X#tP$N zBZcLgvLmR%Mon3%{Jh;o?8X&m4%itD*%p|zGyF+ky3lcoI1PQ?dY`(i& z_wH{0>Z+v1`{gr6EG$qCT?4IrU0p_jriK}g7!5bVKX;pt7 z*iBHt)l&B#7f~n)#2E-<+zFQcj8koX-Y76y?=y2=vJoB*4y1T^FR3Xs_1>TNbpCSr zR{kZOp+M{hiWtWr`n7zzB$Oz=+T}aTsINcRX*v!}h(FwQ%`xd2lyEc|| z(DP8kO~d8&=;@tQ6pwhSbzUiadWE3N@_E8N=+yJ3v79OVhmAdkop>P~ zUUWe$hUiZfxQ%+Vc-bn?BAU$OFO3%JUaNIUZ@-*13yE}XN4ScGE^mvH>1ffSnmoX* z5F&KB1B6oa6)$Y<71Fw0CjzSba?8CbFv;4#2hLa#+oj^Kg+FO{o2k1zbIOElzRQS{ zUjKkkq{VW2aS|$IVS^%XM1p@(u^V ztf-i5v`t$O*w6Pl*nrAXL~Xj~6==R+qM=fwXs)q4kvlIzQ!Jh^9Voj5K4E0Rn#1P3u+$;vakO!|iso^G64Hims51Sfas2ktV0ucJ2^Za(=f*6J?byXdzu$eRPVGIDP8 zbtwJqgNBq#)z=u9{dVl>ky0?M#rvqyE8IaZk+`;}&0$9~yG~oOtSgMZKmzWkM6w<~ zYO|F5Q8ruWP6El1H`pnT)X*xiGr0|3A>hFZa2~>>7DV6e2;&Zsirb}!PYC0#F&mFr;-54*BLuxtW>3I;0>GV#s zZ>9n{G8n?c(CA=(GthypAHUMjGzNo^`}a~;zW$I0W69seDp_wQqSmwqzn>$9c5rn~ zcRMU@B3(s{X0TQnA~YAZNW!QAr6{XRMmN`k z-^vRqpHT&oEd$wZ62vS^VyG;`VuXVv?)5}%+GlCWPWo;bxfNCSLv?6cNoJA0K6BwS zp)IPk;fRRY_V<{9im8}9rQ?_};qn2cbW`-j^Gd$EOkSp$-ZrOIWI4B9zTr9{dWxq8VO<)IPp=%n} zF&Y@C<7M!QMh-h`iLgrgQ@)XhI$u1T*I&tIqz-WeA3U-bQxm+DZ>L>kQG6)I(P#4B zymyQE9MhS_lpAdpC`y{ku9DI*^eMk`q@B7l?XB+4kR5a-yOR#?&&3$ z3ryeauyrU(dHmTadgyHxL-e)sDnIb;nzxqbux&HN=N5F@b3&^g`WoX=fIOTT(2$;^Z0U7uDQ?LIs;@qeutdK4){$Cbf&W2t(s=$BKda;>5+?ETh7@kIAoPcBolkqoGvNZdZ1q8RzfSy53ib+&!1@!@>CxK`SP|`@ zPxc*jxknnd`F-^Ql4Qej%!S$L=u*32vKrkf8qJ(_63I0uR8(LzZ$` z8+uC@AM*Rx0|`x`o!^d$It7hw1E5En&jOl%mh@sP2|JDL+)1^s^wE@WKY$X{y)axc z4MF(WFU<<;J@uEa4}3Wf9#Zu;VjIk@eBXM#f6gdW12uKB;9z ziD$FydfFQ~(rp640BCM^qzfDY*>4EA00#rJ229Q8PoVX^c) zwGXm}{W+j=Kq=l-aNT)9{O6?H2A_7w5}AV--km@F`(Pj-`mXod?FOLJwWKeBVKG2Q1)bo92?DJk_19Lp02~9A zRLj%!=9sv7Gcl@J2f2N?D={%|JlR~MVenn>#fc>){Fjtze_U(d`p^TwKi<9}Q-wPu4)H0r*Ipr)1a(>Avs8>AOx z)}eh(Cv*W8F-ArxN4rP`Z{+Va6j;^``_^r#@i@K~Ty|JfgF3z0etAoa{J4Ijk))9n zFG75g&%v%S!xLO)r;_!Kzl$~97(pdq4Uv*JcaL%f&-hEMSkx<;RSgGB1A#Z+V}2E7 zmN8{lkB&Ho@>ni45wMzA+Xy>f$6wLMXz4hfzS|>;7vV^#Z zG%MPXqg3Toca?n5W8y=Z3$UP(dB>3OD>gQhyHNR%HTyDqoMNv zh&-NNLwcc;X-?Mw$b&Bzeh>+_(k}|ZQ(+>NOposv3$D5mr?1ZwuvghrgENu-1(#$8foW)BpenMnrpRUco>W%GR) ziN_Yj=|5&4u)1J;fC;xy>>UDq6}yFw6;ggmGWUt>vgsxDibaAOR?TFiQ>@@(=(NYf zNT|MR_2ttf%6N}Dl9G2D&YM!bd%6Tgg%SOG(;?085Ad&0VXJO*L{L>kziwFzmN6b> zO~raKQtlTO#6Cqr>!jTz5CzkTY~}f>R4Fl39%c0IRBO$}|^gbteUWjtT~nRzM;% zwvkA@m6phujJE{vs*EEBmhxuB4A?oIpV&e{zblsCoBF~kq2*_Yzz%zDduI&N`?7)( z4*Gp24o6TTgm>uRG|-T^AmYeGIw|KO0ss=20015UPNPczZA@Nu`_73Qc`iKfeQ`)> zktWrHKT??J;kIP^9ZlULgs%>V4js$cWc2Qx`51}ySVXPvhFZ5yhyA8Fxew848NYHY z%DaACWG&n@&N}1Z&F*Y89$b=-GNC+7hlu252(QO$OwO)+=!yvEH1NTZoUYX)h=q&g zB$84ZV|Ao%P}xRaH}fcIH%0+6S;mPXRa1ie+Ext%Ji9nUmxw`1GW8!Ld1P#}VDBkP za3pB(`T21osphC=yj2k)`$2nv1 zxl)z%Yr3Ynm==5^X6ChBS-beEj&Ft|bwQhDAxJC^&=s=rR8b)-a2022%q?YXrmo6X z!LC&w#V&W=3S$|g8-ka?K+#L?&F$O{9D1+oKU29{@6;w(h?YTWcz?`ZC)`#;zv9a5 z@P@C{cK-)sghE<*2hzEcJKPp!#RRh_+xnY(n7LHkIAJDKYgy$ZaBKL>HUgmIJj=!sHqhDqm!>oY1-n!Db--+@4 zRrMJe$9)^X3~ZQpV5^m}=n>|f<~aT5qWHo#ZpOSW_eQD;mHphz%)NklNb!Eq7?+8a z62BuK-W{|C@iCLyxelPLT2g!Qmm-cZUR_)Hr2h;PBgC06Otj7U3$5^9Xx{+fX1e(Q zf;QuSpf&Y4e|15FgD(spuzl;DRU8PA8Ii^JAW`7IS@n((Z0(&i<-U&SVY!*F`F7U# zbN&5pZ#?Pv7o*%mW@!YtR*{ht(cx{4bAcd6B^@_?8_XdDXCl92Z;7Ktrq6=;i#b0a zyipqU2eHlIu2dd z%9;ZS(;2KfDrv}gE`X#Au9}~*rO1O0x3@%gy;yRnrQUa}kOM3ZKreN(-Ms-;;0mtr z@fL*Go(h_1S3j<8Am*3)fXqdLrgw&P@GoN3<@*X0nFV>*MXXCTuWkGl4T6bX4KH%TU0 zStAK!;taB83I9MlRFLowv|nD0YAjm23eGQs}SrFj~e00JjLET2DeEb{BkLS~Se{hD3FzBnnN-U^{EC z^Sb@PSNE<@3CgZcGDTJ3+|bHZwVdwYzLa&pt+G82iai@g`9uZe^YQ(tL>AXh&a!=Q z^X`j>5rxw@|MRaP@$Iyq;c(vos%o7Ve_`v0z}lvp4fdCRR&E0)^%x0sS?`)`4;cWU zdi@W%0D!l%n+1ovrH6;DleIg$kE27QF2uP2j2k3=^epxHKnV$1KD5~w1#z|d`|5mg ziN9BmLS^VDhk4$P_Lm^@FsZo*ouAbYu+)32F4Cc$%Zu$DO>G=XF5>Xn@jU-+EVR`9 zN@@>(!9R~;WRsCdG|)F}>Z6QZTZy3Kf&0jhMr&kg0Wuu27mU9(d`Rq(0J@?PyW?=hn+;iw?K1Kk&e z0e&*r&e^oy#nPRlN;0c6vvSc5c)vBAgoIF71G8V}iIpr^7%KJat{}yyQn8@LJ4?6o zEc^0@&1L$K_%!*4GyRD8KR=e<9lrG)X7FZOXb>al!eI#+?-P$XK zV90H+N%WQ+f@!%3G$gb`d;#1q&tL0!zN@S&s{?z8cbU4wX3IU>m?T|s;6y`1RtP}b zQwFb|Kt)WWkFTG|VVy*yC8mWJD}3?{}rJ zRXJR7W!bp|{|OYGGS|G4@$I6we$PbP7ixKcM z-k|CF=_`!w^rbKG>3*c>%xyy4b#Z~M{h-vzunOWD*xdlq+JKFX$TYksWx;SCLSLBq zF;2JSdpzHe0BU3pv|OiMM{Hs*E>MH6FYeKsl-)$0s~fi%yM6WKh@xLPE35!!gqI+8 z3IFc*JMl~{;i?(@jWqTxBgCua&@wwI>rf@mVQxHt?#f@^)Ix#-^AoF9J;mC`PS9@z zV6#5+edHJV)tw*h!zR(+LD3ZDm-Sg?xt)3}hmovYK5-ZL$|kMUcwz^38d`@?1#I(d zC$%iE7@W!^>vjyyv1`FFpjHQqU4T`k(jR?RyTx(z&pXHJRgZ7Z^07NXh}A8?V$spo z-shRr6FHP|=PgjL;&>SE&3;3*eQQWIUQri<*=F|-l{jQ}p@~$~s-s)hY~T3>bh#DU zv`;^lU(30sw-#_J_pP{{O*71+pKhKdrgN-T{P#*E6hpv9PhVkRn?L{n*x*!36i{R5 zRceCB^S3|6_0|NQ)zfu!;EIrMwi>s2RVSjT zJkT}bSojQKLyyhMn!~`nvJ43pEGYY;Dc?1?DML&1(SP+l*9_ZrJxuXIjIG{50yQr1 zHOjF8_a(rgBI0s3#~?59)ev93r<}npr2$%U3sI^I&dKa?&%9PTK0}U4aH9ng`9e_S zAQq_%!S^dxS%WNurFp<0ifQja5OBxKwD6GJ9h5Vqp9zK~fL~H3UTw7=Kqo_lStyxytTGlC63TLr$H{iEdcj1oU`01~`hL^SSc%@e`)t$&c<5uu zq7s|QAl-6P#1y*!U55ITz}2rkrm0emnZTEaqjzMYZWaIX7!8;z#)#;y2+|Z`e}DJ7 z!BveG0SZy-=fn-(M0t@K^-pP>7gW^k{Upj1txB-@!OdxwAANMv>1CsFU5F*r*}Lsr zj6G#{siQoutH;;!cN~aLmUgC3zG#W(SEIp@CZ6xE!LK=+)Fe?KH{;Bly*{fxaI5!F zs1%AA2E$JtGi!@58y>~4%kKuC7;%LNHa}H>BcTgbWqUv1H6g`uDmEx1^m3|XW)A*z zf{aCnU%XDnbf{4x@R(-~ZMhW>V`N;uyfoxh{h?-w@W+Ja4}VZQ?>z2pua>)RmFfS3 z9@y3q=uiV>SwB?-Fu5^tYw1ZQ&1;g-b_YHJLe^b#!u7ygHbz_mMRT)ZWqC63!;^jD zW>6Edw}Cd476|aI2u-4X9EO=z^^+rlg^6=_}VQ zdU`hN@f8qJyyFUcK6JV`k0zQ-?B|4^9FKkfL&LXGw1?bE{i1n=WCoi;wl8J6N6oF> zt*UU`2&RZ;RNW&4srLN?>x<(mDJsIqaFDWIkxJZIWF0k`gG{RWs(ML%7hzIvOVd{Ro2cMN93D)VsUV8i9^&p8x zEoF&KrUS?4v${Vyg>*cd{5o=j%?di54nWSf`!6{DCH>~L$`JndEkLA>8saoDd`X9$ z?Em`jzl!kRp#rDYr6>EpR_EWvzX=80R96h~gbJRkD}oRWU)L2yp#SUWL=pPo`g)QG zweUEw_e@*WnLi_rA!?#SmKZI5+ zo3@G_OaE+^t{`j9&Mt&EDsgdP&?-8jhggL8C#?U>W%@05Vl}GnXk5$Xf>%TcNTtG> z-QP_egI?~M<|qnf5%P@Bh)ulfpxb7r*UC$r6_YYYw(CjKF#Oi9WoQ-Jz~1rBIHf= z^lh{zSWrE*`u#X3Ts7yuZVh%#|DcU?E#^aB?Ak`qin=%;o>-=qZ`(Zo2KSXC#3HJy z5v|+>!`7!mmrXi=jXK2_WDGcIku&nB^j;cJO5*bqrsW5q zyB@da(mq?}6vDbE8Hy)>v!-Em1f7WS?Wl|t5qd}?bmLp)>pNLu-Ae!hXd)M?4uW5v z3kCjk9ECT6J~{+!*)&;Nwg(e!Hk4U>H1CXsOhC*4?6OX#adHU7J8AJj9)r)rM#7R)%*|4 zr0Uq-gA=-asD0fa!7LZ)9U+NcAP<9`?>r{3a=5)^IiGs)FU?wNNl)OHs!DRa_DEB- z{Ln6l=ESh&^gj)udvhj!=`1PHp8Kd4t_+~sizyMJF8v@HTJjKJ%VA@g@Y86?9K)UC zIZ$HALk&lgogGx|AE~Dq6U!f07Zx@N6qve5ba@JOdn7ejVHybzlKeE;4B{yLdV7hY zhS$3C>ZtVCjUT0-8DditQt<`F+G66}MUS_dmi}G@@3Db6yH!-V3MDDIyH$8oaHk$g z^nRUjjMG)ay-16JB$s4o(2vMYR|aig&h79U3ESTTi+M+~xB8=g~f|KR2}t$xBN zmxFkHUPXwK($?E;OCd5G(7OaMV*kRz@{9w@FU0ovpJnEKkpWAAp)z^qjTG%_`d_fo1~5 ze{?M6YagR)0)Lz8LX_orsD^>Kc7|~~VWx#Q7$|0*IrFwUJ0r(281=9dgQ&%WwVp*C zpMKU+ZZQ)^Ej9P%MygU35Vn}y=D8*?L`pntlWS=fWs+!WToP-M--;7l{etc0P&e+$iu|T zlgx|*iqemJvCvpwpHcbVt6c3~K|N+Pcol<^nE~vWT4_^dJTu&YniaGOCwb#75uKS zdf6~PiulLK8j70vjC|nb54{eAisB|17Hu;%u?}!ss7=^iO9)t^mGY21(%kp28{Z>y zb0dAFN%#9gP05mpSgl;X3^E85v@x#o8d+%JGi`n4>#8%h%Q!Rcta-pU@Oazmp@CK) zK8U9K`GZWl`YVv7SY0xW56VwJ2j&fKMo8c3#r)!68nERc{?49vxr1`>fce^dwjho@ zku_VmNf1Ufx8?d?Cm4~ZObq9=$?=CaYM8*Y=jNGSjaJ4a?8%G>$1g<2ufy+(G*YCG z@YX|WY!^C}7*s{NnFpojtOmA;E+*~S9JEvHhYCP>nwc4srZ@7_+=;yz-t7SY<C$ z1qJ(Z*FNkEg|z+!6>|JfCSg1HwyGjWPx>8oPQ6v+n`-J&uNn&~YZGFWzA>ghS=2y+ zE*Lpf*7>~TV|M`qISqaDA04UA-0p7so0eUgBpTkv>p>9;!tt2uZ;n##HPk2tM{mvR z!`187pjWqFQPsInQiER$An#>U6@ha%@S8?%7WbcXcd8(Ey&KijFJ01a$S^Q(Z)YYh zUb({9P&P@BeV-{qG0~VQFT8BCkQb=uL)zL$h)#6K*^h=qWcRgZueU$+mnzPqfEp|VS`VB~)kePe)a%-8ZW4cLSvOB5ah4b^7%8fD-2#3fz)DR?~ zuwpSwqwp-u`|5V-n+Y=TBxjGw_{b?K6w~jJNTb-r6K0mvzpGy&;FmmQ)bf+KMPBeA z$<3ZG6K<4D#e(QmUvp-cjRvQF}uk&!l=9CNMvo*JT5y2kU~sWTwwb_wK#y zMi{9ksSQRR8&I}|HYS)=kXxrR{L))k4YI8)GciGW{1ErH>kJ7WH{8S@zi;UV-#i_z zV{AIjT9#+7T`B1*1aTs=2&O$LBt`-nr>EBLUcX#m@jhm5X0DRhOOTxHU1`g<55U%# zs5$Ol>Ca#Xm7s9=iNAn`OhP!`9aqh|f>3yA8eP^WlURTH{fxe?C2Cd~&l~nopf@_O zqU?&@?3+pN$f=ni#XOiyUQQRBOpr$(95<{YAmczaRAX08r1nR7mbRBCpCpvl&NVeFLZbNd;VFeUzk4~GjR)`=z_En{(xW9kC; z74gH(Vzwonm0xbEc+$%Uiw}Mkzvdr~yWB>pNzt&qL$>+f^M(5d;pSckkX-6qQ5AB; z!4k{e>q`a|XOw$>%tK@+yt}R^#9C>MUFYZ>N`)gF<`IUU-D>Oh1mrZMn9=SK@0ORoRNAY* zqz2J(O5#FrXMyv*OA8H|4SJ zv%_T{6Q|@Gkyw1F7D0{~jK0%w)oJ)Qop?(JGN>>W7|Jb2p4`T!r`)gVYE7%D{EB~^3__I z_}mIASAPy>Hg3au_u*74x>Kx0iM}=X%cBKv&F?ey>EoYTzdnolc;VUhRKg2Kf44~# zzbewNr{_(X>p?e_s>a3#F}P~8Fw2N5H@0~64$*pEoyzVaHgI?)gkq?=lqTew(Ixo@ zuur&V57tjU=Cn}7)1VUtmZ;LkyYF1BZAp=W;w|1|9DQwYCyIGp0^T&J#`#didn(3h z6l63Y;1vgVhOco3VRJx_FRF8wKW`P*HgCUKY&x5q;iEJlRfflSxBBx?)mIC!>sa;Z z;JHWpsnn^%Cxsz5is036V9B1=lwB)iwd5c$9k|Tk`O{z^(W@jzNu(oi+de#Wa zB(NX+;IP~GOuoR$aOYG{o^r$K=tIjMvUnG3y5YTe;c?}!`yX2gjOdsPDc?m!z&Y)o zdvVe;`X2B?2J$Lv3Ev)j<|-8UGExyhgS*3)wzwlIinTepL06T$W1K`WXQ}(g!yb%a zw%=OMVkl)*dhZGMd&rxO$AM+f>QEHm++yd7<=jmv+0?XaItsrg5S)I0R9w6ECniDK%)^b(I@C>H_f@GYoFp?5CLDDbB- zs!Fx=#!(6%hF+F_a`^%pwI-DIvoJzvT(s>w(fJO&!&1sg@P;=~)Io`jj=Qd3a1~ty z^LTZc!6m|jTK?sUB~wO*m#JeC4VICm(ZS7&DR6lb?qT-w3D(gWp>B>XKWwm3bU!LCSeCuZ&BdVmZaN=C?6Ahb5tS->Oy7xG%Ma%6(2~bS zZu=0Az~d$+0awqM)CaoG>!RZ>1t!v%^kQftm|@5yEL5X<(d$lJdl=~~@~)9&>q1LM zHdQp#p-bkw1J}WmgPv_M6eg~w=T6VVkUePGkvjMB#21<&&zRCQ!QIYdOebyA02!M7;1Op zy16{)=~|V%HEe#y<_NZz3dg5z1lMBslC>;wB!ZIe*II`MLHQ;FRcI&OW9Ns%-8S## zD)IUKHP)*&0k|3ZehwmT`36!KXq$e=v$n(l;@M@a(~;X@L7U7j z$P|`a+%jGQ)dXT96{&#z$7p4;gidm&eIj3(&)z1G337Glb+E!*B*u5FwuSFj5-*!% zoy=#Y)A{SamZ-o3ssxA!K6|i5U~URZ(7NjiH~#1a(>X=Snhq0i{@io2{rme!F-ygwMFlR;aU9^8~N{t(sELwt+NmwT9V}qh_SpMk4+fl zN6ou9q!5cptzUpdE_t<7oh8`s;nGD_ayjU9`M@=AVwRIM*XYy{(|Kp&uU>h648{58p^(4J{`(K!!7Cuvr7mBNmJs$joqcQT?OG-y@8NZIy5SQgv@| z(=qj5R8`VQf-aR_75Vo$SayoNe-IREyt8h>F$EQD9 zneo*WX?v!LyG1NMa)6KlDU_6X?saRhKL=$zk{eYX%Gb|Z4jmKvoZa-yQh$ZRg%zVY zIhWrL?9Ci9vv2BbkukZRktAH5Iox4y4%kiuw{vat?^>Tl4BEHLx!y^k47xu*UjE9` z_fBlp}(`F_)@k5^l;nav&cC z|Me|Bc};_oK%-TmNpQa^Vbc@U1TpHgWA)h?0t^f~cuJTYv?_=lOjZA8apa%G08Dc! zcC{RzUnv1biw+ey#J0vNmPu=StXaN&Qc!L_i(pG5{M0c10+FOl9^E~j?i%eRm9XGM zDODNm^2o=jKx9K*=gRMcTwkq`pvKzAvdUl0i&$=V2fmzgxg|C9Ylr0!!y*!Rn6l@G zr>lu)$LxfFoakK*!&ySaMx5v^Cmz70S1+w3L^ZA{^v2pa{yC4eWFit6#-bdR9vVEg zN(0#zVqaCQT31uy9zY{ueKzYeHq&vfBf2L9OymYz@TEJ_q?W%@$?KMnXKCuG{iXSP?Olg^;ABamyFk|3i}5Mma9aPoilhPJ$LII?m-m`HTqiU(1I zz9mqzUhbX>A4rTMuygquhI3bg_7FmsA=n!X;BV6uP^>pC%Roua+7l3ae;qp^GE~$H~pUCq!XiptsmkjvaB~ zH-wI$VS|yAIUZMTuB{U3P!ChP5*S5|)>TFNP}&VIT{%lbQ9vZlIlgkYoD0Ln4<9-p zyfPMw56?~D%T9UUG=EU4yl%Hse*{t0xi?Yv9O6 zi#FGCyjsDEm62qw_;yDIX%5>^Edpk#nt?iKAfkkHCrFRh4TyRNA#Tg-7NV@z6&9;^AEv@_e>Nr6w-V`)c$_fl zoQb1?kFHM9OGVi36`q5J2ee{k(>6p-NS$)jmNFC3RGM@Xn4s+U5j5ZVtsfN5iyr|x zrZ54&L@14)JX9XQG(a1`{2k(DT(_9z+~HjAIx|(S!gmYI$KrZNAt81U{zlsD3yl|J zC_bvVo2{HU*MxpH0TAJMJdo1AButcNfc?&8>}`}9J&e9# zgj#h-yk*3KvcuuS`Z4Y0&D~<$`#BJ8JsqDA(3q}MQO?bEeRkq5Ea(G3eAf3x+bfa2 zw-4o;hl;1K?Sp83hre(et&@ zQ(s$lo|`;H^@gV2AJ?*p(=QNqZCy7JnNs5=3H9`mj7_Ep(xCY5*pbY!igggFyEp_! ztF&rjyM#=-OMjFBXPWflw!IS&Bz1XDy2cvW_OP3+BC(eBHUnJsK1waEV9S;N{w{1I zP4g*sQJ!<6()JhcEBh^{5L#9`C$>Eq& zyW{e(G5>W8N-d#RMn9$eI0pIwKHs?DF}DtmK1O9-oRRLLLg(Ea}wOeS@_7KDa~7FF9r4 zG9^B!4$a&aif6wxO(l*zvF0a(>0?HeG6Hs)l}n!jaHcAoUN@m>IkUgo-eCWEv4Mxt zRDnmphe3itfq{Xcfob|F0gHjE1e54C^cSZBZ!1%P=3G~)@uU8^#n~Zb&TMLI)k@`G zPWT;iD!v86pbN_*CLz+RKi`UBGhJnvF81(5Q$c4BLol(D152Coz0E>R)2uSUsz#Wy zzo*k)gZ+Cun6j~^&?*Kd7(^5`C=CjwByRP%PR)4{){gng49!V;>0MAv0bdWl@lVYb zfeArGWbRRjd7T&nQ$4O-WSAA!GE2(U?nSl*Tw@^~7sb*G%$$WGZi&q_PhY{Lu@;}I zML{KZ7sYp5?+-&%E*dCHlf{S9C9LC~2*#Kp{c?C845w1GWQ%*obZl-B-Ni68&0q;l zAeB52WF)|0R_QSR%+8dS)$o%cFI@s4XAp;p{hs#EaU%f=u?xp1}!XT@*fKUcz}Jzf_vaq`mJapqaRW+R>6Z! z&uQd6nueF#@(3f6w9|*h@Y_=l;mDQJ7c#9cGLUDhV)>7PfTwa{{#gwj-8UF&JE~0 zA{}?RrAkjqU<0BNw~rb|ktQ7Cc}NFU>|TVf=lf?l`+$%%d{S-;9&O3p+Y$f@W3ccK zU#K=|q5>9`^6a$MAHq9k=T)EOnLvk?!iB=q=tJn&j@EnwTt!nBV95y5Nu1dr{`a8^ zDQXYqWTiM;m{86|-`Y9BKu?a_G%rvGUl7*lG9tmkCA|tSq88FQPriq=2Aa}(Ow6hG zPa=$y$p$DR9He>8&Z!Mge^{>59lHYgjqbbxzWW3czxcf*Gr|8OZ_qD1-HZfQWaHU< zs++F5+(2!jnyf?TY@&FKE|#Z8n=^y96B{TTev$x2xq9*L^0qOc|S zUoWQr_x$l&FTL|>y4K=`1$|pk#z1s2E!K~L=VA#h;IIQ53b)#ly?-lEgQtlhlRTda zP~dYKx-VTA7ke(M`CS(8pTTHf_AT8(@Yu_r&$v=4W>8nwI6U_@hGzZxhR^SMxi}e3 zP8OHZd0tT7_q$;VhY#)4SC=n3#+$K>Ns6{SKC59ar z`Q1^zu^9n>zr5qxpG&2T#ucjsyodhKaI~OSU(@U#c#d;# zMG{P}cZww9oxk_%ZATCsa6iw}*M7gk)@LxkYH^w+UNFV@N4)-+pa=$WLa1&h)vmt+ z8|+w=W@0c_|G&%FODg@C3a-6Gik`HetXUjq)27@VumN%oHyFM@-Ck$DFL zgZnr6KM@Yz(`R7(mjn8Xi~YrM{saCU=}^GH__}%8aM`-rfG_n)z)w`z=>N%}r3Tv= zh{N`Qiwz`TO~9K55^&E<;7ukXuz(>e>>=2~keU47{VLY~o%~D~JSU6?ZZl-XM3(&T zb-cX&oo&H9KmziAi#j3<4E}$X{5wKX0aF8|VgG-~fL7qgH>ssI20 diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01076.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01076.docx index 9d6e2d9cb1d7caa3da3926d6b2ef70c0f6decb01..8c4163027d4dabdd48d09146d1d90c583bc2b0b7 100644 GIT binary patch delta 17188 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 XbX3)3mR1|4qT0z$t=eq!>p+440_KGH diff --git a/docker/docmosis/templates/CV-UNS-GAP-ENG-01078.docx b/docker/docmosis/templates/CV-UNS-GAP-ENG-01078.docx index 6ebdfc6bb623ce45e682e48e0bafe0f6e916bbb6..40d0ed386278f7fdc7de187b3c92eb0e0a9c1ee9 100644 GIT binary patch delta 7890 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

Kxp}o71%3N)k z&Det$DT6H>$@Q`SS)UO|$sBr3KlD4A#iPA9EIjth6Y~l*2z1!WC2>!N<{2Lpm&v?kt zgZ1RJOl1D^M9E9ZW%xiQ9u}IWG%gDdEOdBWT}`y8)04QViGg!Xb$emm$1raS<&4$P zpft<%2S@A9JkG=GoieBCIEm&+gGJWz>4>V;QcycZ|8Bq%dK7W1!NwFq9&^9KeZ7bp zlO6pngaml+*Fo_%FL%Y zj_~J<-mJ8K+~ZootD_w~^?toGZb#bVVpr454d=c0_UrX|Jv}+=XcLeoMTN2PLBK?j6}azD|FL;2a+dd~M~(AzRS z%fi6nGRi1mfmIZ1oXL|!Jg;XBf@8WT40~4Rc+rXAGx=eB!`WQ6|02zsdoQ*wc=u?z}k9??Tx&L;gD$p@FNPgn&TVfvPHIv zSmPq^-Bp?xnm>#5h3aw)rouc*^P*Mf(D%m|M;utrs|EAo|As5(3Y^ZmSsPSE%6&dc zy01zWvjpJrP`HVDk~!$qw%CrCokMtSB@ETRif`mQMmbf>qT$2V zx<{Z4YzFZLOe!2ET&ptU98jTY_*5-uFcUMMn;t(SqglAHjwlwWuQ)dN*hHjVF81JN z{%cyAI7tOp>I^Vfag>O)q=+~KH`v&6GRShHW0SHPxexNpnmUxX8OV7dqGJ@C%$pi7GEW|)Z*W6uXSZbWgT6{XvTs5@w}j}u zt;m-cWlj--1LI2j2!UVm(305T!rB@HRXRbc;4^RMUox;8{)TPrL)}T(3jb)E~+pty5NVNB16uqd#YEwxwg9 z9bfXpAPWYS(=*jNO9miX)cSS^3rj@(KD3mSSgvXv2O zeNP|C!^6vW>%TjyFJm+gTUwcnv(zl3YMLOyW-8pb&57B0%!TTUSfcB_eMfn)%obs% zPbsjl@@|M*gpR0xw2Es|*i-qaIw;Jv+#}q@JhjpzQq>z=%x zpUhHSjsp-x`m-57PEP%dq{+e__C2eMjmh?!F+{JFBSpPMQg$f})i_Lk_cl%f<9>U# zy_NG+^Er&e12AXYZP|>ZYYzcC+CZ0*KXXRL<9N2XCb|yi2%atldln-4N81yfvk7k zKtHwi8&c~F=6^wSScD%3SzcmDCm03h!I&sZ)fsMj@@naq=2N~!pt7;j4dNgg>{KYKTdf$# z8nu6ou)zMIo$E}XlOHHoaa2o@a9!XA};?nJaG}9eolXF>G(!ek!rhqrT|;aLZ>*hAZ|RVnVkC@ z@P-N7zKGA)L%=$ae4$kGU~_|8{Z1P5^rHiioNvxHx53_Ukh!OZJhCFH(a27S3ewALU+@;|0fsY)1yKs-9{`J4_ z0~9hV>1Ce}(7tmXzCrw@qMLRA+;@Zh zrdxN>e3z7Yq)92lWOERpjdW=UOreOvOP{DOF1brtm zw+~)zyJW?IKe8bHzKuB>br#?jIKO$*MAjVh$Za0@D@4h<+w%?m_7RMaQqif z# zlIqcs{Fll9=|cZ>?Eew}&DfwudZMt8_jqmS;y?Yr1^mxb=HWn~f4Tox;6RBCMPMnkp{v>?1Zs-#2>;P={*9n_Adr&I He^&noH@Fm# delta 8013 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 SU;zz6@U$*E?1kpPlK&sC8F#7x diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java index 6b392415a0c..6a7c730596d 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Map; +import static uk.gov.hmcts.reform.civil.callback.CallbackParams.Params.BEARER_TOKEN; import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_SUBMIT; import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_LOCATION_UPDATE; import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_UPDATE_GA_LOCATION; @@ -44,9 +45,10 @@ public List handledEvents() { private CallbackResponse triggerGaEvent(CallbackParams callbackParams) { CaseData caseData = callbackParams.getCaseData(); + String authToken = callbackParams.getParams().get(BEARER_TOKEN).toString(); try { if (caseData.getGeneralApplications() != null && !caseData.getGeneralApplications().isEmpty()) { - caseData = helperService.updateApplicationLocationDetailsInClaim(caseData); + caseData = helperService.updateApplicationLocationDetailsInClaim(caseData, authToken); helperService.triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); } } catch (Exception e) { diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/genapplication/CaseLocationCivil.java b/src/main/java/uk/gov/hmcts/reform/civil/model/genapplication/CaseLocationCivil.java index edc224ba820..20bc4d13f5a 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/genapplication/CaseLocationCivil.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/genapplication/CaseLocationCivil.java @@ -14,4 +14,6 @@ public class CaseLocationCivil { private String region; private String siteName; private String baseLocation; + private String address; + private String postcode; } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperService.java b/src/main/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperService.java index 2569a7ad87b..f0d0abaf206 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperService.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperService.java @@ -14,6 +14,7 @@ import uk.gov.hmcts.reform.civil.model.genapplication.GADetailsRespondentSol; import uk.gov.hmcts.reform.civil.model.genapplication.GeneralApplication; import uk.gov.hmcts.reform.civil.model.genapplication.GeneralApplicationsDetails; +import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import java.util.ArrayList; import java.util.HashMap; @@ -31,6 +32,7 @@ public class GenAppStateHelperService { private final CoreCaseDataService coreCaseDataService; private final CaseDetailsConverter caseDetailsConverter; + private final InitiateGeneralApplicationService genAppService; private final ObjectMapper objectMapper; @@ -69,16 +71,19 @@ public boolean triggerEvent(CaseData caseData, CaseEvent event) { return true; } - public CaseData updateApplicationLocationDetailsInClaim(CaseData caseData) { + public CaseData updateApplicationLocationDetailsInClaim(CaseData caseData, String authToken) { if (!Collections.isEmpty(caseData.getGeneralApplications())) { List genApps = new ArrayList<>(); CaseData finalCaseData = caseData; + LocationRefData locationDetails = genAppService.getWorkAllocationLocationDetails(finalCaseData.getCaseManagementLocation().getBaseLocation(), authToken); caseData.getGeneralApplications().forEach(generalApplicationElement -> { GeneralApplication generalApplication = generalApplicationElement.getValue(); generalApplication.getCaseManagementLocation().setBaseLocation(finalCaseData.getCaseManagementLocation().getBaseLocation()); generalApplication.getCaseManagementLocation().setRegion(finalCaseData.getCaseManagementLocation().getRegion()); - generalApplication.getCaseManagementLocation().setSiteName(finalCaseData.getLocationName()); + generalApplication.getCaseManagementLocation().setSiteName(locationDetails.getSiteName()); + generalApplication.getCaseManagementLocation().setAddress(locationDetails.getCourtAddress()); + generalApplication.getCaseManagementLocation().setPostcode(locationDetails.getPostcode()); Map genAppMap = generalApplication.toMap(objectMapper); genAppMap.put("isCcmccLocation", YesOrNo.NO); generalApplication = objectMapper.convertValue(genAppMap, GeneralApplication.class); diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationService.java b/src/main/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationService.java index a6191151527..f70a80f9ad5 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationService.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationService.java @@ -179,6 +179,13 @@ private GeneralApplication buildApplication(CaseData.CaseDataBuilder dataBuilder Pair caseLocation = getWorkAllocationLocation(caseData, authToken); //Setting Work Allocation location and location name + if (Objects.isNull(caseLocation.getLeft().getSiteName()) + && Objects.nonNull(caseLocation.getLeft().getBaseLocation())) { + LocationRefData locationDetails = getWorkAllocationLocationDetails(caseLocation.getLeft().getBaseLocation(), authToken); + caseLocation.getLeft().setSiteName(locationDetails.getSiteName()); + caseLocation.getLeft().setAddress(locationDetails.getCourtAddress()); + caseLocation.getLeft().setPostcode(locationDetails.getPostcode()); + } applicationBuilder.caseManagementLocation(caseLocation.getLeft()); applicationBuilder.isCcmccLocation(caseLocation.getRight() ? YES : NO); applicationBuilder.locationName(hasSDOBeenMade(caseData.getCcdState()) @@ -343,6 +350,8 @@ public Pair getWorkAllocationLocation(CaseData caseD .region(ccmccLocation.getRegionId()) .baseLocation(ccmccLocation.getEpimmsId()) .siteName(ccmccLocation.getSiteName()) + .address(ccmccLocation.getCourtAddress()) + .postcode(ccmccLocation.getPostcode()) .build(); return Pair.of(courtLocation, true); } @@ -369,6 +378,15 @@ private CaseLocationCivil getClaimant1PreferredLocation(CaseData caseData) { .build(); } + public LocationRefData getWorkAllocationLocationDetails(String baseLocation, String authToken) { + List locationDetails = locationRefDataService.getCourtLocationsByEpimmsId(authToken, baseLocation); + if (locationDetails != null && !locationDetails.isEmpty()) { + return locationDetails.get(0); + } else { + return LocationRefData.builder().build(); + } + } + private boolean isDefendant1RespondedFirst(CaseData caseData) { return caseData.getRespondent2ResponseDate() == null || (caseData.getRespondent1ResponseDate() != null diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java index e82e3a302b3..53cd99df257 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java @@ -46,6 +46,8 @@ class TriggerGenAppLocationUpdateCallbackHandlerTest extends BaseCallbackHandler @MockBean private GenAppStateHelperService helperService; + private static final String authToken = "Bearer TestAuthToken"; + @Test void handleEventsReturnsTheExpectedCallbackEvent() { assertThat(handler.handledEvents()).contains(TRIGGER_UPDATE_GA_LOCATION); @@ -60,12 +62,12 @@ void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplication() { true, true, getOriginalStatusOfGeneralApplication() ); - when(helperService.updateApplicationLocationDetailsInClaim(caseData)).thenReturn(caseData); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); assertThat(response.getErrors()).isNull(); - verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(caseData); + verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); verifyNoMoreInteractions(helperService); @@ -93,7 +95,7 @@ void triggerGeneralApplicationEventThrowsException_HandleFailure() { ); String expectedErrorMessage = "Could not trigger event to update location on application under case: " + caseData.getCcdCaseReference(); - when(helperService.updateApplicationLocationDetailsInClaim(caseData)).thenReturn(caseData); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); when(helperService.triggerEvent(any(CaseData.class), eq(TRIGGER_LOCATION_UPDATE))) .thenThrow(new RuntimeException()); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java index 6aa26270c72..f6626efde69 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java @@ -18,14 +18,19 @@ import uk.gov.hmcts.reform.civil.model.genapplication.CaseLocationCivil; import uk.gov.hmcts.reform.civil.model.genapplication.GADetailsRespondentSol; import uk.gov.hmcts.reform.civil.model.genapplication.GeneralApplicationsDetails; +import uk.gov.hmcts.reform.civil.referencedata.LocationRefDataService; +import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; import uk.gov.hmcts.reform.civil.sampledata.GeneralApplicationDetailsBuilder; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; @@ -50,13 +55,19 @@ class GenAppStateHelperServiceTest { @MockBean private CoreCaseDataService coreCaseDataService; + @MockBean + private InitiateGeneralApplicationService genAppService; @Autowired private CaseDetailsConverter caseDetailsConverter; + @MockBean + private LocationRefDataService locationRefDataService; + private static final String APPLICATION_CLOSED_TEXT = "Application Closed"; private static final String APPLICATION_OFFLINE_TEXT = "Proceeds In Heritage"; private static final String SET_DATE = "2022-08-31T22:50:11.2509019"; + private static final String authToken = "Bearer TestAuthToken"; @Nested class StatusChangeInApplicationDetailsInClaim { @@ -393,6 +404,10 @@ private CaseDetails getCaseDetails( @Test void updateApplicationLocationDetailsLists() { + when(locationRefDataService.getCourtLocationsByEpimmsId(any(), any())) + .thenReturn(getSampleCourLocationsRefObject()); + when(genAppService.getWorkAllocationLocationDetails(any(), any())) + .thenReturn(getSampleCourLocationsRefObject1()); CaseData caseData = GeneralApplicationDetailsBuilder.builder() .getTestCaseDataWithDetails(CaseData.builder().build(), true, @@ -404,8 +419,10 @@ void updateApplicationLocationDetailsLists() { Pair caseLocation = Pair.of(CaseLocationCivil.builder() .region("2") .baseLocation("00000").siteName("locationOfRegion2") + .address("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") .build(), false); - CaseData updatedData = service.updateApplicationLocationDetailsInClaim(caseData); + CaseData updatedData = service.updateApplicationLocationDetailsInClaim(caseData, authToken); assertThat(getGADetailsFromUpdatedCaseData(updatedData, "1234")).isNotNull(); assertThat(updatedData.getGeneralApplications().get(0).getValue().getCaseManagementLocation()).isEqualTo(caseLocation.getLeft()); @@ -416,6 +433,23 @@ void updateApplicationLocationDetailsLists() { assertThat(updatedData.getGeneralApplications().get(2).getValue().getIsCcmccLocation()).isEqualTo(YesOrNo.NO); } + protected List getSampleCourLocationsRefObject() { + return new ArrayList<>(List.of( + LocationRefData.builder() + .epimmsId("00000").siteName("locationOfRegion2").courtAddress("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") + .courtLocationCode("court1").build() + )); + } + + protected LocationRefData getSampleCourLocationsRefObject1() { + return + LocationRefData.builder() + .epimmsId("00000").siteName("locationOfRegion2").courtAddress("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") + .courtLocationCode("court1").build(); + } + @Test void noLocationUpdatesToCaseDataIfThereAreNoGeneralApplications() { setupForApplicationOffline(); @@ -427,8 +461,7 @@ void noLocationUpdatesToCaseDataIfThereAreNoGeneralApplications() { Map.of() ); - CaseData response = service.updateApplicationLocationDetailsInClaim( - caseData); + CaseData response = service.updateApplicationLocationDetailsInClaim(caseData, authToken); CaseData updatedData = mapper.convertValue(response, CaseData.class); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationServiceTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationServiceTest.java index 3eabd89f790..c4e659ce307 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/InitiateGeneralApplicationServiceTest.java @@ -901,7 +901,8 @@ void shouldPopulateApplicantDetails() { CaseData caseData = GeneralApplicationDetailsBuilder.builder() .getTestCaseDataForConsentUnconsentCheck(GARespondentOrderAgreement.builder().hasAgreed(NO).build()); when(locationRefDataService.getCcmccLocation(any())) - .thenReturn(LocationRefData.builder().regionId("9").epimmsId("574546").siteName("CCMCC").build()); + .thenReturn(LocationRefData.builder().regionId("9").epimmsId("574546").siteName("CCMCC") + .courtAddress("Prince William House, Peel Cross Road, Salford").postcode("M5 4RR").build()); CaseData result = service.buildCaseData(caseData.toBuilder(), caseData, UserDetails.builder() .email(APPLICANT_EMAIL_ID_CONSTANT).id(STRING_NUM_CONSTANT).build(), CallbackParams.builder().toString()); @@ -914,11 +915,98 @@ void shouldPopulateApplicantDetails() { assertThat(result.getGeneralApplications().get(0).getValue().getLocationName()) .isEqualTo("CCMCC"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getAddress()) + .isEqualTo("Prince William House, Peel Cross Road, Salford"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getPostcode()) + .isEqualTo("M5 4RR"); assertThat(result.getGeneralApplications().get(0).getValue().getGeneralAppRespondentSolicitors() .stream().filter(e -> STRING_NUM_CONSTANT.equals(e.getValue().getId())).count()).isEqualTo(0); } + @Test + void shouldPopulateLocationDetailsForBaseLocation() { + when(locationRefDataService.getCourtLocationsByEpimmsId(any(), any())).thenReturn(getSampleCourLocationsRefObject()); + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getCaseDataForWorkAllocation(null, null, INDIVIDUAL, applicant1DQ, respondent1DQ, + respondent2DQ); + CaseData result = service.buildCaseData(caseData.toBuilder(), caseData, UserDetails.builder() + .email(APPLICANT_EMAIL_ID_CONSTANT).build(), CallbackParams.builder().toString()); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getBaseLocation()) + .isEqualTo("11111"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getSiteName()) + .isEqualTo("locationOfRegion2"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getAddress()) + .isEqualTo("Prince William House, Peel Cross Road, Salford"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getPostcode()) + .isEqualTo("M5 4RR"); + } + + protected List getSampleCourLocationsRefObject() { + return new ArrayList<>(List.of( + LocationRefData.builder() + .epimmsId("11111").siteName("locationOfRegion2").courtAddress("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") + .courtLocationCode("court1").build() + )); + } + + protected List getEmptyCourLocationsRefObject() { + return new ArrayList<>(List.of( + LocationRefData.builder().build() + )); + } + + protected List getSampleCourtLocationsRefObjectMultipleValues() { + return new ArrayList<>(List.of( + LocationRefData.builder() + .epimmsId("11111").siteName("locationOfRegion2").courtAddress("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") + .courtLocationCode("court1").build(), + + LocationRefData.builder() + .epimmsId("11111").siteName("locationOfRegion2").courtAddress("Prince William House, Peel Cross Road, Salford") + .postcode("M5 4RR") + .courtLocationCode("court1").build() + )); + } + + @Test + void shouldPopulateLocationDetailsForBaseLocationWhereListIsEmpty() { + when(locationRefDataService.getCourtLocationsByEpimmsId(any(), any())).thenReturn(getEmptyCourLocationsRefObject()); + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getCaseDataForWorkAllocation(null, null, INDIVIDUAL, applicant1DQ, respondent1DQ, + respondent2DQ); + CaseData result = service.buildCaseData(caseData.toBuilder(), caseData, UserDetails.builder() + .email(APPLICANT_EMAIL_ID_CONSTANT).build(), CallbackParams.builder().toString()); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getBaseLocation()) + .isEqualTo("11111"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getSiteName()) + .isNull(); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getAddress()) + .isNull(); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getPostcode()) + .isNull(); + } + + @Test + void shouldPopulateLocationDetailsForBaseLocationWithMultipleListValues() { + when(locationRefDataService.getCourtLocationsByEpimmsId(any(), any())).thenReturn(getSampleCourtLocationsRefObjectMultipleValues()); + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getCaseDataForWorkAllocation(null, null, INDIVIDUAL, applicant1DQ, respondent1DQ, + respondent2DQ); + CaseData result = service.buildCaseData(caseData.toBuilder(), caseData, UserDetails.builder() + .email(APPLICANT_EMAIL_ID_CONSTANT).build(), CallbackParams.builder().toString()); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getBaseLocation()) + .isEqualTo("11111"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getSiteName()) + .isEqualTo("locationOfRegion2"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getAddress()) + .isEqualTo("Prince William House, Peel Cross Road, Salford"); + assertThat(result.getGeneralApplications().get(0).getValue().getCaseManagementLocation().getPostcode()) + .isEqualTo("M5 4RR"); + } + @Test void shouldPopulateWorkAllocationLocationOnAboutToSubmit_beforeSDOHasBeenMade() { when(locationRefDataService.getCcmccLocation(any())) From f8969cd124e507a5239387c1625d8bf051de2914 Mon Sep 17 00:00:00 2001 From: UshaPanneerselvam1 <122611188+UshaPanneerselvam1@users.noreply.github.com> Date: Tue, 14 Nov 2023 10:09:11 +0000 Subject: [PATCH 3/4] CIV-8923 specAoSApplicantCorrespondenceAddressdetails is being updated when defendant updates address (#3547) * CIV-8923 specAoSApplicantCorrespondenceAddressdetails is being updated when defendant updates address --------- Co-authored-by: TortolaNavarroD Co-authored-by: asthamalviya <104994907+asthamalviya@users.noreply.github.com> Co-authored-by: kdaHMCTS <128375235+kdaHMCTS@users.noreply.github.com> Co-authored-by: dtortolaV1 <93722198+dtortolaV1@users.noreply.github.com> --- .../RespondToClaimSpecCallbackHandler.java | 90 +- .../reform/civil/model/CaseDataParent.java | 17 + .../civil/utils/UnavailabilityDatesUtils.java | 2 +- ...RespondToClaimSpecCallbackHandlerTest.java | 1378 ++++++++++++----- 4 files changed, 1024 insertions(+), 463 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java index 5640b94350a..701d9c1c912 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java @@ -184,7 +184,7 @@ protected Map callbacks() { .put(callbackKey(MID, "upload"), this::emptyCallbackResponse) .put(callbackKey(MID, "statement-of-truth"), this::resetStatementOfTruth) .put(callbackKey(MID, "validate-payment-date"), this::validateRespondentPaymentDate) - .put(callbackKey(MID, "specCorrespondenceAddress"), this::validateCorrespondenceApplicantAddress) + .put(callbackKey(MID, "specCorrespondenceAddress"), this::validateCorrespondenceAddress) .put(callbackKey(MID, "determineLoggedInSolicitor"), this::determineLoggedInSolicitor) .put(callbackKey(MID, "track"), this::handleDefendAllClaim) .put(callbackKey(MID, "specHandleResponseType"), this::handleRespondentResponseTypeForSpec) @@ -1060,12 +1060,26 @@ private AllocatedTrack getAllocatedTrack(CaseData caseData) { ); } - private CallbackResponse validateCorrespondenceApplicantAddress(CallbackParams callbackParams) { - if (SpecJourneyConstantLRSpec.DEFENDANT_RESPONSE_SPEC.equals(callbackParams.getRequest().getEventId())) { - return validateCorrespondenceApplicantAddress(callbackParams, postcodeValidator); + private CallbackResponse validateCorrespondenceAddress(CallbackParams callbackParams) { + CaseData caseData = callbackParams.getCaseData(); + if (caseData.getIsRespondent1() == YES + && caseData.getRespondentSolicitor1ServiceAddressRequired() == NO) { + List errors = postcodeValidator.validate( + caseData.getRespondentSolicitor1ServiceAddress().getPostCode()); + + return AboutToStartOrSubmitCallbackResponse.builder() + .errors(errors) + .build(); + } else if (caseData.getIsRespondent2() == YES + && caseData.getRespondentSolicitor2ServiceAddressRequired() == NO) { + List errors = postcodeValidator.validate( + caseData.getRespondentSolicitor2ServiceAddress().getPostCode()); + + return AboutToStartOrSubmitCallbackResponse.builder() + .errors(errors) + .build(); } - return AboutToStartOrSubmitCallbackResponse.builder() - .build(); + return AboutToStartOrSubmitCallbackResponse.builder().build(); } private CallbackResponse determineLoggedInSolicitor(CallbackParams callbackParams) { @@ -1118,6 +1132,10 @@ private CallbackResponse populateRespondent1Copy(CallbackParams callbackParams) .respondent1Copy(caseData.getRespondent1()) .respondent1ClaimResponseTestForSpec(caseData.getRespondent1ClaimResponseTypeForSpec()) .respondent2ClaimResponseTestForSpec(caseData.getRespondent2ClaimResponseTypeForSpec()) + .respondentSolicitor1ServiceAddress(Address.builder().build()) + .respondentSolicitor2ServiceAddress(Address.builder().build()) + .respondentSolicitor1ServiceAddressRequired(null) + .respondentSolicitor2ServiceAddressRequired(null) .showConditionFlags(initialShowTags); updatedCaseData.respondent1DetailsForClaimDetailsTab(caseData.getRespondent1().toBuilder().flags(null).build()); @@ -1265,9 +1283,9 @@ private CallbackResponse validateUnavailableDates(CallbackParams callbackParams) } private CallbackResponse validateDateOfBirth(CallbackParams callbackParams) { - Party respondent = callbackParams.getCaseData().getRespondent1(); - if (respondent == null && callbackParams.getCaseData().getRespondent2() != null) { - respondent = callbackParams.getCaseData().getRespondent2(); + Party respondent = callbackParams.getCaseData().getRespondent1Copy(); + if (respondent == null && callbackParams.getCaseData().getRespondent2Copy() != null) { + respondent = callbackParams.getCaseData().getRespondent2Copy(); } List errors = dateOfBirthValidator.validate(respondent); @@ -1345,9 +1363,9 @@ private CallbackResponse setApplicantResponseDeadline(CallbackParams callbackPar AllocatedTrack allocatedTrack = caseData.getAllocatedTrack(); Party updatedRespondent1; - if (NO.equals(caseData.getSpecAoSApplicantCorrespondenceAddressRequired())) { + if (NO.equals(caseData.getTempAddress1Required())) { updatedRespondent1 = caseData.getRespondent1().toBuilder() - .primaryAddress(caseData.getSpecAoSApplicantCorrespondenceAddressdetails()).build(); + .primaryAddress(caseData.getTempAddress1()).build(); } else { updatedRespondent1 = caseData.getRespondent1().toBuilder() .primaryAddress(caseData.getRespondent1Copy().getPrimaryAddress()) @@ -1424,21 +1442,8 @@ && ifResponseTypeIsPartOrFullAdmission(caseData)) { .businessProcess(BusinessProcess.ready(DEFENDANT_RESPONSE_SPEC)); if (caseData.getRespondent2() != null && caseData.getRespondent2Copy() != null) { - Party updatedRespondent2; - - if (NO.equals(caseData.getSpecAoSRespondent2HomeAddressRequired())) { - updatedRespondent2 = caseData.getRespondent2().toBuilder() - .primaryAddress(caseData.getSpecAoSRespondent2HomeAddressDetails()).build(); - } else { - updatedRespondent2 = caseData.getRespondent2().toBuilder() - .primaryAddress(caseData.getRespondent2Copy().getPrimaryAddress()).build(); - } - - updatedData - .respondent2(updatedRespondent2.toBuilder() - .flags(caseData.getRespondent2Copy().getFlags()).build()) - .respondent2Copy(null); - updatedData.respondent2DetailsForClaimDetailsTab(updatedRespondent2.toBuilder().flags(null).build()); + Party updatedRespondent2 = applyRespondent2Address(caseData, updatedData); + updatedData.respondent2DetailsForClaimDetailsTab(updatedRespondent2); } // moving statement of truth value to correct field, this was not possible in mid event. @@ -1495,8 +1500,10 @@ && ifResponseTypeIsPartOrFullAdmission(caseData)) { .build()); } - UnavailabilityDatesUtils.rollUpUnavailabilityDatesForRespondent(updatedData, - toggleService.isUpdateContactDetailsEnabled()); + UnavailabilityDatesUtils.rollUpUnavailabilityDatesForRespondent( + updatedData, + toggleService.isUpdateContactDetailsEnabled() + ); updatedData.respondent1DetailsForClaimDetailsTab(updatedData.build().getRespondent1().toBuilder().flags(null).build()); if (ofNullable(caseData.getRespondent2()).isPresent()) { @@ -1568,6 +1575,21 @@ && isAwaitingAnotherDefendantResponse(caseData)) { .build(); } + private static Party applyRespondent2Address(CaseData caseData, CaseData.CaseDataBuilder updatedData) { + Party updatedRespondent2; + + if (NO.equals(caseData.getTempAddress2Required())) { + updatedRespondent2 = caseData.getRespondent2().toBuilder() + .primaryAddress(caseData.getTempAddress2()).build(); + } else { + updatedRespondent2 = caseData.getRespondent2().toBuilder() + .primaryAddress(caseData.getRespondent2Copy().getPrimaryAddress()).build(); + } + + updatedData.respondent2(updatedRespondent2).respondent2Copy(null); + return updatedRespondent2; + } + private boolean ifResponseTypeIsPartOrFullAdmission(CaseData caseData) { return (RespondentResponseTypeSpec.PART_ADMISSION.equals(caseData.getRespondent1ClaimResponseTypeForSpec()) || RespondentResponseTypeSpec.PART_ADMISSION.equals( @@ -1582,19 +1604,19 @@ private void updateCorrespondenceAddress(CallbackParams callbackParams, CaseData.CaseDataBuilder updatedCaseData, CaseData caseData) { if (solicitorHasCaseRole(callbackParams, RESPONDENTSOLICITORONE) - && caseData.getSpecAoSRespondentCorrespondenceAddressRequired() == YesOrNo.NO) { - Address newAddress = caseData.getSpecAoSRespondentCorrespondenceAddressdetails(); + && caseData.getRespondentSolicitor1ServiceAddressRequired() == YesOrNo.NO) { + Address newAddress = caseData.getRespondentSolicitor1ServiceAddress(); updatedCaseData.specRespondentCorrespondenceAddressdetails(newAddress) - .specAoSRespondentCorrespondenceAddressdetails(Address.builder().build()); + .respondentSolicitor1ServiceAddress(Address.builder().build()); if (getMultiPartyScenario(caseData) == ONE_V_TWO_ONE_LEGAL_REP) { // to keep with heading tab updatedCaseData.specRespondent2CorrespondenceAddressdetails(newAddress); } } else if (solicitorHasCaseRole(callbackParams, RESPONDENTSOLICITORTWO) - && caseData.getSpecAoSRespondent2CorrespondenceAddressRequired() == YesOrNo.NO) { + && caseData.getRespondentSolicitor2ServiceAddressRequired() == YesOrNo.NO) { updatedCaseData.specRespondent2CorrespondenceAddressdetails( - caseData.getSpecAoSRespondent2CorrespondenceAddressdetails()) - .specAoSRespondent2CorrespondenceAddressdetails(Address.builder().build()); + caseData.getRespondentSolicitor2ServiceAddress()) + .respondentSolicitor2ServiceAddress(Address.builder().build()); } } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java index 7d2a5546ce9..08b9556caf8 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java @@ -723,6 +723,23 @@ public boolean isApplicantNotRepresented() { private FastTrackAllocation fastTrackAllocation; + /** + * used to temporary hold addresses. + */ + private final Address tempAddress1; + /** + * used with tempAddress1. + */ + private final YesOrNo tempAddress1Required; + /** + * used to temporary hold addresses. + */ + private final Address tempAddress2; + /** + * used with tempAddress1. + */ + private final YesOrNo tempAddress2Required; + @JsonIgnore public boolean isResponseAcceptedByClaimant() { return applicant1AcceptAdmitAmountPaidSpec == YesOrNo.YES diff --git a/src/main/java/uk/gov/hmcts/reform/civil/utils/UnavailabilityDatesUtils.java b/src/main/java/uk/gov/hmcts/reform/civil/utils/UnavailabilityDatesUtils.java index 5c394d09ee5..81a5e845f2e 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/utils/UnavailabilityDatesUtils.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/utils/UnavailabilityDatesUtils.java @@ -76,7 +76,7 @@ public static void rollUpUnavailabilityDatesForRespondent(CaseData.CaseDataBuild .getUnavailableDates(); List> updatedUnavailableDates = addEventAndDate( - caseData.getRespondent1ResponseDate().toLocalDate(), + caseData.getRespondent2ResponseDate().toLocalDate(), DEFENDANT_RESPONSE_EVENT, respondent2DQUnavailableDates ); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java index 6fbfc1fb527..1ae04095de2 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java @@ -19,6 +19,7 @@ import uk.gov.hmcts.reform.ccd.client.model.CallbackRequest; import uk.gov.hmcts.reform.ccd.client.model.CallbackResponse; import uk.gov.hmcts.reform.ccd.client.model.SubmittedCallbackResponse; +import uk.gov.hmcts.reform.civil.callback.CallbackException; import uk.gov.hmcts.reform.civil.callback.CallbackParams; import uk.gov.hmcts.reform.civil.callback.CallbackType; import uk.gov.hmcts.reform.civil.constants.SpecJourneyConstantLRSpec; @@ -55,23 +56,26 @@ import uk.gov.hmcts.reform.civil.model.UnavailableDate; import uk.gov.hmcts.reform.civil.model.common.DynamicList; import uk.gov.hmcts.reform.civil.model.common.Element; -import uk.gov.hmcts.reform.civil.model.dq.RequestedCourt; import uk.gov.hmcts.reform.civil.model.dq.Respondent1DQ; import uk.gov.hmcts.reform.civil.model.dq.Respondent2DQ; -import uk.gov.hmcts.reform.civil.model.dq.SmallClaimHearing; import uk.gov.hmcts.reform.civil.model.dq.Witness; import uk.gov.hmcts.reform.civil.model.dq.Witnesses; +import uk.gov.hmcts.reform.civil.model.dq.RequestedCourt; +import uk.gov.hmcts.reform.civil.model.dq.Expert; +import uk.gov.hmcts.reform.civil.model.dq.Experts; +import uk.gov.hmcts.reform.civil.model.dq.ExpertDetails; +import uk.gov.hmcts.reform.civil.model.dq.SmallClaimHearing; import uk.gov.hmcts.reform.civil.referencedata.LocationRefDataService; import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.sampledata.AddressBuilder; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; import uk.gov.hmcts.reform.civil.sampledata.PartyBuilder; -import uk.gov.hmcts.reform.civil.service.CoreCaseUserService; import uk.gov.hmcts.reform.civil.service.DeadlinesCalculator; import uk.gov.hmcts.reform.civil.service.ExitSurveyContentService; import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.service.Time; import uk.gov.hmcts.reform.civil.service.UserService; +import uk.gov.hmcts.reform.civil.service.CoreCaseUserService; import uk.gov.hmcts.reform.civil.service.citizenui.responsedeadline.DeadlineExtensionCalculatorService; import uk.gov.hmcts.reform.civil.service.flowstate.FlowFlag; import uk.gov.hmcts.reform.civil.service.flowstate.StateFlowEngine; @@ -79,8 +83,8 @@ import uk.gov.hmcts.reform.civil.utils.AssignCategoryId; import uk.gov.hmcts.reform.civil.utils.CaseFlagsInitialiser; import uk.gov.hmcts.reform.civil.utils.CourtLocationUtils; -import uk.gov.hmcts.reform.civil.utils.ElementUtils; import uk.gov.hmcts.reform.civil.utils.MonetaryConversions; +import uk.gov.hmcts.reform.civil.utils.ElementUtils; import uk.gov.hmcts.reform.civil.validation.DateOfBirthValidator; import uk.gov.hmcts.reform.civil.validation.PaymentDateValidator; import uk.gov.hmcts.reform.civil.validation.PostcodeValidator; @@ -99,7 +103,9 @@ import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; @@ -119,6 +125,7 @@ import static uk.gov.hmcts.reform.civil.enums.CaseRole.RESPONDENTSOLICITORTWO; import static uk.gov.hmcts.reform.civil.enums.RespondentResponsePartAdmissionPaymentTimeLRspec.IMMEDIATELY; import static uk.gov.hmcts.reform.civil.enums.RespondentResponseTypeSpec.FULL_ADMISSION; +import static uk.gov.hmcts.reform.civil.enums.RespondentResponseTypeSpec.FULL_DEFENCE; import static uk.gov.hmcts.reform.civil.enums.YesOrNo.NO; import static uk.gov.hmcts.reform.civil.enums.YesOrNo.YES; import static uk.gov.hmcts.reform.civil.helpers.DateFormatHelper.DATE; @@ -198,15 +205,82 @@ public void setup() { ); } + @Test + void whenCallBackEventNotImplementedOrEventInvalid() { + // Given + String postCode = "postCode"; + CaseData caseData = CaseData.builder() + .build().toBuilder() + .respondentSolicitor1ServiceAddressRequired(NO) + .respondentSolicitor1ServiceAddress(Address.builder().postCode(postCode).build()) + .isRespondent1(YES) + .build(); + CallbackParams callbackParams = callbackParamsOf(caseData, CallbackType.MID, " ").toBuilder() + .request(CallbackRequest.builder().eventId(SpecJourneyConstantLRSpec.DEFENDANT_RESPONSE_SPEC) + .build()).build(); + + //When + CallbackException ex = assertThrows(CallbackException.class, () -> handler.handle(callbackParams), + + "A CallbackException was expected to be thrown but wasn't."); + // Then + assertThat(ex.getMessage()).contains("Callback for event"); + } + + @Test + void resetStatementOfTruth() { + CaseData caseData = CaseDataBuilder.builder().build(); + CallbackParams params = callbackParamsOf(caseData, CallbackType.MID, "statement-of-truth"); + CallbackRequest request = CallbackRequest.builder() + .eventId(SpecJourneyConstantLRSpec.DEFENDANT_RESPONSE_SPEC) + .build(); + params = params.toBuilder().request(request).build(); + + // When + CallbackResponse response = handler.handle(params); + + // Then + assertNotNull(response); + } + @Test void midSpecCorrespondenceAddress_checkAddressIfWasIncorrect() { // Given String postCode = "postCode"; CaseData caseData = CaseData.builder() - .specAoSApplicantCorrespondenceAddressRequired(YesOrNo.NO) - .specAoSApplicantCorrespondenceAddressdetails(Address.builder() - .postCode(postCode) - .build()) + .build().toBuilder() + .respondentSolicitor1ServiceAddressRequired(NO) + .respondentSolicitor1ServiceAddress(Address.builder().postCode(postCode).build()) + .isRespondent1(YES) + .build(); + CallbackParams params = callbackParamsOf(caseData, CallbackType.MID, "specCorrespondenceAddress"); + CallbackRequest request = CallbackRequest.builder() + .eventId(SpecJourneyConstantLRSpec.DEFENDANT_RESPONSE_SPEC) + .build(); + params = params.toBuilder().request(request).build(); + + List errors = Collections.singletonList("error 1"); + Mockito.when(postcodeValidator.validate(postCode)).thenReturn(errors); + + // When + CallbackResponse response = handler.handle(params); + + // Then + assertEquals(errors, ((AboutToStartOrSubmitCallbackResponse) response).getErrors()); + } + + @Test + void midSpecCorrespondenceAddress_checkAddressIfWasIncorrectForSol2() { + // Given + String postCode = "postCode"; + CaseData caseData = CaseData.builder() + .build().toBuilder() + .respondentSolicitor1ServiceAddressRequired(YES) + .respondentSolicitor1ServiceAddress(Address.builder().postCode(postCode).build()) + .isRespondent1(YES) + .isRespondent2(YES) + .respondentSolicitor2ServiceAddressRequired(NO) + .respondentSolicitor2ServiceAddress(Address.builder().postCode(postCode).build()) .build(); CallbackParams params = callbackParamsOf(caseData, CallbackType.MID, "specCorrespondenceAddress"); CallbackRequest request = CallbackRequest.builder() @@ -314,10 +388,8 @@ void testSpecDefendantResponseFastTrackOneVTwoLegalRep() { assertThat(response.getData()).isNotNull(); assertThat(response.getData()).containsEntry("responseClaimTrack", AllocatedTrack.FAST_CLAIM.name()); assertThat(response.getData()).containsEntry("specDisputesOrPartAdmission", "No"); - assertThat(response.getData()).containsEntry( - "specPaidLessAmountOrDisputesOrPartAdmission", - "No" - ); + assertThat(response.getData()).containsEntry("specPaidLessAmountOrDisputesOrPartAdmission", + "No"); } @Test @@ -347,10 +419,8 @@ void testSpecDefendantResponseFastTrackOneVTwoSameLegalRep() { assertThat(response.getData()).isNotNull(); assertThat(response.getData()).containsEntry("responseClaimTrack", AllocatedTrack.FAST_CLAIM.name()); assertThat(response.getData()).containsEntry("specDisputesOrPartAdmission", "No"); - assertThat(response.getData()).containsEntry( - "specPaidLessAmountOrDisputesOrPartAdmission", - "No" - ); + assertThat(response.getData()).containsEntry("specPaidLessAmountOrDisputesOrPartAdmission", + "No"); } @Test @@ -376,10 +446,8 @@ void testSpecDefendantResponseFastTrackTwoVOne() { assertThat(response.getData()).isNotNull(); assertThat(response.getData()).containsEntry("responseClaimTrack", AllocatedTrack.FAST_CLAIM.name()); assertThat(response.getData()).containsEntry("specDisputesOrPartAdmission", "No"); - assertThat(response.getData()).containsEntry( - "specPaidLessAmountOrDisputesOrPartAdmission", - "No" - ); + assertThat(response.getData()).containsEntry("specPaidLessAmountOrDisputesOrPartAdmission", + "No"); } @Test @@ -662,9 +730,6 @@ public void testValidateRespondentPaymentDate() { AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler .handle(params); - List expectedErrorArray = new ArrayList<>(); - expectedErrorArray.add("Date for when will the amount be paid must be today or in the future."); - // Then assertThat(response).isNotNull(); /* @@ -723,8 +788,9 @@ void updateRespondent1AddressWhenUpdated() { CaseData caseData = CaseDataBuilder.builder() .respondent1(PartyBuilder.builder().individual().build()) .atStateApplicantRespondToDefenceAndProceed() - .atSpecAoSApplicantCorrespondenceAddressRequired(NO) - .atSpecAoSApplicantCorrespondenceAddressDetails(AddressBuilder.maximal().build()) + .build().toBuilder() + .tempAddress1Required(NO) + .tempAddress1(AddressBuilder.maximal().build()) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -755,15 +821,21 @@ void updateRespondent2AddressWhenUpdated() { when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + Address newAddress2 = AddressBuilder.defaults().build(); CaseData caseData = CaseDataBuilder.builder().atStateApplicantRespondToDefenceAndProceed() .respondent2DQ() .respondent1Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSApplicantCorrespondenceAddressRequired(YES) .addRespondent2(YES) .respondent2(PartyBuilder.builder().individual().build()) .respondent2Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSRespondent2HomeAddressRequired(NO) - .atSpecAoSRespondent2HomeAddressDetails(AddressBuilder.maximal().build()) + .build().toBuilder() + .tempAddress1Required(YES) + .tempAddress1(Address.builder().build()) + .build().toBuilder() + .tempAddress2Required(NO) + .tempAddress2(newAddress2) + .respondentSolicitor2ServiceAddressRequired(NO) + .respondentSolicitor2ServiceAddress(newAddress2) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -777,28 +849,52 @@ void updateRespondent2AddressWhenUpdated() { // Then assertThat(response.getData()) .extracting("respondent2").extracting("primaryAddress") - .extracting("AddressLine1").isEqualTo("address line 1"); + .extracting("AddressLine1").isEqualTo(newAddress2.getAddressLine1()); assertThat(response.getData()) .extracting("respondent2").extracting("primaryAddress") - .extracting("AddressLine2").isEqualTo("address line 2"); + .extracting("AddressLine2").isEqualTo(newAddress2.getAddressLine2()); assertThat(response.getData()) .extracting("respondent2").extracting("primaryAddress") - .extracting("AddressLine3").isEqualTo("address line 3"); + .extracting("AddressLine3").isEqualTo(newAddress2.getAddressLine3()); } @Test - void updateRespondent2AddressWhenSpecAoSRespondent2HomeAddressRequiredIsNO() { + void defendantResponsePopulatesWitnessesData() { // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + LocalDate date = dateTime.toLocalDate(); when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(time.now()).thenReturn(dateTime); when(mockedStateFlow.isFlagSet(any())).thenReturn(true); when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); - - Party partyWithPrimaryAddress = PartyBuilder.builder().individual().build(); - partyWithPrimaryAddress.setPrimaryAddress(AddressBuilder.maximal() - .addressLine1("address line 1") - .addressLine2("address line 2") - .addressLine3("address line 3") - .build()); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isHmcEnabled()).thenReturn(true); + + Witnesses res1witnesses = Witnesses.builder().details( + wrapElements( + Witness.builder() + .firstName("Witness") + .lastName("One") + .emailAddress("test-witness-one@example.com") + .phoneNumber("07865456789") + .reasonForWitness("great reasons") + .eventAdded("Defendant Response Event") + .dateAdded(date) + .build()) + ).build(); + + Witnesses res2witnesses = Witnesses.builder().details( + wrapElements( + Witness.builder() + .firstName("Witness") + .lastName("Two") + .emailAddress("test-witness-two@example.com") + .phoneNumber("07532628263") + .reasonForWitness("good reasons") + .eventAdded("Defendant Response Event") + .dateAdded(date) + .build()) + ).build(); CaseData caseData = CaseDataBuilder.builder().atStateApplicantRespondToDefenceAndProceed() .respondent2DQ() @@ -806,422 +902,693 @@ void updateRespondent2AddressWhenSpecAoSRespondent2HomeAddressRequiredIsNO() { .addRespondent2(YES) .respondent2(PartyBuilder.builder().individual().build()) .respondent2Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSRespondent2HomeAddressRequired(NO) - .atSpecAoSRespondent2HomeAddressDetails(AddressBuilder.maximal() - .addressLine1("new address line 1") - .build()) + .build().toBuilder() + .respondent1DQWitnessesSmallClaim(res1witnesses) + .respondent2DQWitnessesSmallClaim(res2witnesses) + .build().toBuilder() + .tempAddress1Required(YES) + .tempAddress1(Address.builder().build()) + .respondent2ResponseDate(dateTime) + .respondent1ResponseDate(dateTime).build().toBuilder() + .tempAddress2Required(NO) + .tempAddress2(AddressBuilder.maximal().build()) .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + when(deadlinesCalculator.calculateApplicantResponseDeadlineSpec(any(), any())) + .thenReturn(LocalDateTime.now()); + // When - AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler.handle( - callbackParamsOf(caseData, ABOUT_TO_SUBMIT)); + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + var objectMapper = new ObjectMapper(); + objectMapper.findAndRegisterModules(); + objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // Then - assertThat(response.getData()) - .extracting("respondent2") - .extracting("primaryAddress") - .extracting("AddressLine1") - .isEqualTo("new address line 1"); + + Witnesses actualRespondent1DQWitnesses = objectMapper.convertValue(response.getData().get("respondent1DQWitnesses"), new TypeReference<>() {}); + Witness actualRespondent1Witness = unwrapElements(actualRespondent1DQWitnesses.getDetails()).get(0); + assertThat(actualRespondent1Witness.getPartyID()).isNotNull(); + assertThat(actualRespondent1Witness.getFirstName()).isEqualTo("Witness"); + assertThat(actualRespondent1Witness.getLastName()).isEqualTo("One"); + assertThat(actualRespondent1Witness.getEmailAddress()).isEqualTo("test-witness-one@example.com"); + assertThat(actualRespondent1Witness.getPhoneNumber()).isEqualTo("07865456789"); + assertThat(actualRespondent1Witness.getReasonForWitness()).isEqualTo("great reasons"); + assertThat(actualRespondent1Witness.getEventAdded()).isEqualTo("Defendant Response Event"); + assertThat(actualRespondent1Witness.getDateAdded()).isEqualTo(date); + + Witnesses actualRespondent2DQWitnesses = objectMapper.convertValue(response.getData().get("respondent2DQWitnesses"), new TypeReference<>() {}); + Witness respondent2Witness = unwrapElements(actualRespondent2DQWitnesses.getDetails()).get(0); + assertThat(respondent2Witness.getPartyID()).isNotNull(); + assertThat(respondent2Witness.getFirstName()).isEqualTo("Witness"); + assertThat(respondent2Witness.getLastName()).isEqualTo("Two"); + assertThat(respondent2Witness.getEmailAddress()).isEqualTo("test-witness-two@example.com"); + assertThat(respondent2Witness.getPhoneNumber()).isEqualTo("07532628263"); + assertThat(respondent2Witness.getReasonForWitness()).isEqualTo("good reasons"); + assertThat(respondent2Witness.getEventAdded()).isEqualTo("Defendant Response Event"); + assertThat(respondent2Witness.getDateAdded()).isEqualTo(date); + } - @Test - void updateRespondent2AddressWhenSpecAoSRespondent2HomeAddressRequiredIsNotNO() { - // Given - when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); - when(mockedStateFlow.isFlagSet(any())).thenReturn(true); - when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + @Nested + class HandleLocations { + + @Test + void oneVOne() { + // Given + DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); + DynamicList preferredCourt = DynamicList.builder() + .listItems(locationValues.getListItems()) + .value(locationValues.getListItems().get(0)) + .build(); + Party defendant1 = Party.builder() + .type(Party.Type.COMPANY) + .companyName("company") + .build(); + CaseData caseData = CaseData.builder() + .caseAccessCategory(SPEC_CLAIM) + .ccdCaseReference(354L) + .respondent1(defendant1) + .respondent1Copy(defendant1) + .respondent1DQ( + Respondent1DQ.builder() + .respondToCourtLocation( + RequestedCourt.builder() + .responseCourtLocations(preferredCourt) + .reasonForHearingAtSpecificCourt("Reason") + .build() + ) + .build() + ) + .showConditionFlags(EnumSet.of( + DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1 + )) + .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + List locations = List.of(LocationRefData.builder().build()); + when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) + .thenReturn(locations); + LocationRefData completePreferredLocation = LocationRefData.builder() + .regionId("regionId") + .epimmsId("epimms") + .courtLocationCode("code") + .build(); + when(courtLocationUtils.findPreferredLocationData( + locations, preferredCourt + )).thenReturn(completePreferredLocation); + StateFlow flow = mock(StateFlow.class); + when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(false); + when(stateFlowEngine.evaluate(caseData)) + .thenReturn(flow); + when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) + .thenReturn(true); + UserInfo userInfo = UserInfo.builder().uid("798").build(); + when(userService.getUserInfo(anyString())).thenReturn(userInfo); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + AbstractObjectAssert sent1 = assertThat(response.getData()) + .extracting("respondent1DQRequestedCourt"); + sent1.extracting("caseLocation") + .extracting("region") + .isEqualTo(completePreferredLocation.getRegionId()); + sent1.extracting("caseLocation") + .extracting("baseLocation") + .isEqualTo(completePreferredLocation.getEpimmsId()); + sent1.extracting("responseCourtCode") + .isEqualTo(completePreferredLocation.getCourtLocationCode()); + sent1.extracting("reasonForHearingAtSpecificCourt") + .isEqualTo("Reason"); + } + + @Test + void oneVTwo_SecondDefendantRepliesSameLegalRep() { + // Given + DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); + DynamicList preferredCourt = DynamicList.builder() + .listItems(locationValues.getListItems()) + .value(locationValues.getListItems().get(0)) + .build(); + Party defendant1 = Party.builder() + .type(Party.Type.COMPANY) + .companyName("company") + .build(); + Party defendant2 = Party.builder() + .type(Party.Type.COMPANY) + .companyName("company2") + .build(); + CaseData caseData = CaseData.builder() + .respondent2SameLegalRepresentative(YES) + .caseAccessCategory(SPEC_CLAIM) + .ccdCaseReference(354L) + .defenceAdmitPartPaymentTimeRouteRequired(IMMEDIATELY) + .respondent2ClaimResponseTypeForSpec(FULL_ADMISSION) + .respondent1(defendant1) + .respondent1Copy(defendant1) + .respondent2(defendant2) + .respondent2Copy(defendant2) + .respondent1DQ( + Respondent1DQ.builder() + .respondToCourtLocation( + RequestedCourt.builder() + .responseCourtLocations(preferredCourt) + .reasonForHearingAtSpecificCourt("Reason") + .build() + ) + .build() + ) + .respondent2DQ( + Respondent2DQ.builder() + .respondToCourtLocation2( + RequestedCourt.builder() + .responseCourtLocations(preferredCourt) + .reasonForHearingAtSpecificCourt("Reason123") + .build() + ) + .build() + ) + .showConditionFlags(EnumSet.of( + DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1, + DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_2 + )) + .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + List locations = List.of(LocationRefData.builder().build()); + when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) + .thenReturn(locations); + LocationRefData completePreferredLocation = LocationRefData.builder() + .regionId("regionId") + .epimmsId("epimms") + .courtLocationCode("code") + .build(); + when(courtLocationUtils.findPreferredLocationData( + locations, preferredCourt + )).thenReturn(completePreferredLocation); + StateFlow flow = mock(StateFlow.class); + when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(true); + when(stateFlowEngine.evaluate(caseData)).thenReturn(flow); + when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) + .thenReturn(true); + UserInfo userInfo = UserInfo.builder().uid("798").build(); + when(userService.getUserInfo(anyString())).thenReturn(userInfo); + LocalDate whenWillPay = LocalDate.now().plusDays(5); + given(deadlineExtensionCalculatorService.calculateExtendedDeadline(any(), anyInt())).willReturn(whenWillPay); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + AbstractObjectAssert sent2 = assertThat(response.getData()) + .extracting("respondent2DQRequestedCourt"); + sent2.extracting("caseLocation") + .extracting("region") + .isEqualTo(completePreferredLocation.getRegionId()); + sent2.extracting("caseLocation") + .extracting("baseLocation") + .isEqualTo(completePreferredLocation.getEpimmsId()); + sent2.extracting("responseCourtCode") + .isEqualTo(completePreferredLocation.getCourtLocationCode()); + sent2.extracting("reasonForHearingAtSpecificCourt") + .isEqualTo("Reason123"); + } + + @Test + void oneVTwo_SecondDefendantReplies() { + // Given + DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); + DynamicList preferredCourt = DynamicList.builder() + .listItems(locationValues.getListItems()) + .value(locationValues.getListItems().get(0)) + .build(); + Party defendant1 = Party.builder() + .type(Party.Type.COMPANY) + .companyName("company") + .build(); + Party defendant2 = Party.builder() + .type(Party.Type.COMPANY) + .companyName("company 2") + .build(); + CaseData caseData = CaseData.builder() + .caseAccessCategory(SPEC_CLAIM) + .ccdCaseReference(354L) + .respondent1(defendant1) + .respondent1Copy(defendant1) + .respondent2(defendant2) + .respondent2Copy(defendant2) + .respondent1DQ( + Respondent1DQ.builder() + .respondToCourtLocation( + RequestedCourt.builder() + .responseCourtLocations(preferredCourt) + .reasonForHearingAtSpecificCourt("Reason") + .build() + ) + .build() + ) + .respondent2DQ( + Respondent2DQ.builder() + .respondToCourtLocation2( + RequestedCourt.builder() + .responseCourtLocations(preferredCourt) + .reasonForHearingAtSpecificCourt("Reason123") + .build() + ) + .build() + ) + .showConditionFlags(EnumSet.of( + DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1, + DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_2 + )) + .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + List locations = List.of(LocationRefData.builder().build()); + when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) + .thenReturn(locations); + LocationRefData completePreferredLocation = LocationRefData.builder() + .regionId("regionId") + .epimmsId("epimms") + .courtLocationCode("code") + .build(); + when(courtLocationUtils.findPreferredLocationData( + locations, preferredCourt + )).thenReturn(completePreferredLocation); + StateFlow flow = mock(StateFlow.class); + when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(true); + when(stateFlowEngine.evaluate(caseData)).thenReturn(flow); + when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) + .thenReturn(true); + UserInfo userInfo = UserInfo.builder().uid("798").build(); + when(userService.getUserInfo(anyString())).thenReturn(userInfo); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + AbstractObjectAssert sent2 = assertThat(response.getData()) + .extracting("respondent2DQRequestedCourt"); + sent2.extracting("caseLocation") + .extracting("region") + .isEqualTo(completePreferredLocation.getRegionId()); + sent2.extracting("caseLocation") + .extracting("baseLocation") + .isEqualTo(completePreferredLocation.getEpimmsId()); + sent2.extracting("responseCourtCode") + .isEqualTo(completePreferredLocation.getCourtLocationCode()); + sent2.extracting("reasonForHearingAtSpecificCourt") + .isEqualTo("Reason123"); + } + } - Party partyWithPrimaryAddress = PartyBuilder.builder().individual().build(); - partyWithPrimaryAddress.setPrimaryAddress(AddressBuilder.maximal() - .addressLine1("address line 1") - .addressLine2("address line 2") - .addressLine3("address line 3") - .build()); + } - CaseData caseData = CaseDataBuilder.builder().atStateApplicantRespondToDefenceAndProceed() - .respondent2DQ() - .respondent1Copy(PartyBuilder.builder().individual().build()) - .addRespondent2(YES) - .respondent2(PartyBuilder.builder().individual().build()) - .respondent2Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSRespondent2HomeAddressRequired(YES) - .build(); + @Test + void shouldNullDocuments_whenInvokedAndCaseFileEnabled() { + // Given + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isCaseFileViewEnabled()).thenReturn(true); + var testDocument = ResponseDocument.builder() + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); - // When - AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler.handle( - callbackParamsOf(caseData, ABOUT_TO_SUBMIT)); + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder().build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .respondent2ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .ccdCaseReference(354L) + .respondent1SpecDefenceResponseDocument(testDocument) + .respondent2SpecDefenceResponseDocument(testDocument) + .build(); - // Then - assertThat(response.getData()) - .extracting("respondent2") - .extracting("primaryAddress") - .extracting("AddressLine1") - .isEqualTo("address line 1"); - assertThat(response.getData()) - .extracting("respondent2") - .extracting("primaryAddress") - .extracting("AddressLine2") - .isEqualTo("address line 2"); - assertThat(response.getData()) - .extracting("respondent2") - .extracting("primaryAddress") - .extracting("AddressLine3") - .isEqualTo("address line 3"); - } + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getData().get("respondent1SpecDefenceResponseDocument")).isNull(); + assertThat(response.getData().get("respondent2SpecDefenceResponseDocument")).isNull(); } @Test - void defendantResponsePopulatesWitnessesData() { + void shouldUpdateExpertEvents_whenInvokedAndUpdateContactDetailsEnabled_For2DivergeResponse() { // Given LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); - LocalDate date = dateTime.toLocalDate(); when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); - when(time.now()).thenReturn(dateTime); when(mockedStateFlow.isFlagSet(any())).thenReturn(true); when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); - when(toggleService.isHmcEnabled()).thenReturn(true); - - Witnesses res1witnesses = Witnesses.builder().details( - wrapElements( - Witness.builder() - .firstName("Witness") - .lastName("One") - .emailAddress("test-witness-one@example.com") - .phoneNumber("07865456789") - .reasonForWitness("great reasons") - .eventAdded("Defendant Response Event") - .dateAdded(date) - .build()) - ).build(); - - Witnesses res2witnesses = Witnesses.builder().details( - wrapElements( - Witness.builder() - .firstName("Witness") - .lastName("Two") - .emailAddress("test-witness-two@example.com") - .phoneNumber("07532628263") - .reasonForWitness("good reasons") - .eventAdded("Defendant Response Event") - .dateAdded(date) - .build()) - ).build(); - - CaseData caseData = CaseDataBuilder.builder().atStateApplicantRespondToDefenceAndProceed() - .respondent2DQ() + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) .respondent1Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSApplicantCorrespondenceAddressRequired(YES) - .addRespondent2(YES) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQExperts(Experts.builder() + .details(wrapElements(Expert.builder().build())).build()) + .build()) .respondent2(PartyBuilder.builder().individual().build()) .respondent2Copy(PartyBuilder.builder().individual().build()) - .atSpecAoSRespondent2HomeAddressRequired(NO) - .atSpecAoSRespondent2HomeAddressDetails(AddressBuilder.maximal().build()) - .build().toBuilder() - .respondent1DQWitnessesSmallClaim(res1witnesses) - .respondent2DQWitnessesSmallClaim(res2witnesses) - .build().toBuilder() - .respondent2ResponseDate(dateTime) - .respondent1ResponseDate(dateTime).build(); + .respondent2DQ(Respondent2DQ.builder().build()) + .claimant1ClaimResponseTypeForSpec(FULL_DEFENCE) + .claimant2ClaimResponseTypeForSpec(FULL_ADMISSION) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .respondent2SameLegalRepresentative(YES) + .build(); + + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getData().get("respondent1DQExperts")).isNotNull(); + assertThat(response.getData().get("respondent2DQExperts")).isNull(); + + } + + @Test + void shouldUpdateExpertEvents_whenInvokedAndUpdateContactDetailsEnabled_CanAddApplicant2() { + // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQExperts(Experts.builder() + .details(wrapElements(Expert.builder().build())).build()) + .build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .claimant1ClaimResponseTypeForSpec(FULL_DEFENCE) + .claimant2ClaimResponseTypeForSpec(FULL_ADMISSION) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .addApplicant2(YES) + .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); - when(deadlinesCalculator.calculateApplicantResponseDeadlineSpec(any(), any())) - .thenReturn(LocalDateTime.now()); // When AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler .handle(params); - var objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + // Then + assertThat(response.getData().get("respondent1DQExperts")).isNotNull(); + assertThat(response.getData().get("respondent2DQExperts")).isNull(); + + } + + @Test + void shouldUpdateExpertEvents_whenInvokedAndUpdateContactDetailsEnabled_FullAdmission() { + // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQExperts(Experts.builder() + .details(wrapElements(Expert.builder().build())).build()) + .build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_ADMISSION) + .respondent2ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_ADMISSION) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .build(); + + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); // Then + assertThat(response.getData().get("respondent1DQExperts")).isNotNull(); + assertThat(response.getData().get("respondent2DQExperts")).isNull(); + + } + + @Test + void shouldUpdateExpertEvents_whenInvokedAndUpdateContactDetailsEnabled() { + // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQExperts(Experts.builder() + .details(wrapElements(Expert.builder().build())).build()) + .build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .respondent2ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .build(); - Witnesses actualRespondent1DQWitnesses = objectMapper.convertValue(response.getData().get( - "respondent1DQWitnesses"), new TypeReference<>() { - }); - Witness actualRespondent1Witness = unwrapElements(actualRespondent1DQWitnesses.getDetails()).get(0); - assertThat(actualRespondent1Witness.getPartyID()).isNotNull(); - assertThat(actualRespondent1Witness.getFirstName()).isEqualTo("Witness"); - assertThat(actualRespondent1Witness.getLastName()).isEqualTo("One"); - assertThat(actualRespondent1Witness.getEmailAddress()).isEqualTo("test-witness-one@example.com"); - assertThat(actualRespondent1Witness.getPhoneNumber()).isEqualTo("07865456789"); - assertThat(actualRespondent1Witness.getReasonForWitness()).isEqualTo("great reasons"); - assertThat(actualRespondent1Witness.getEventAdded()).isEqualTo("Defendant Response Event"); - assertThat(actualRespondent1Witness.getDateAdded()).isEqualTo(date); - - Witnesses actualRespondent2DQWitnesses = objectMapper.convertValue(response.getData().get( - "respondent2DQWitnesses"), new TypeReference<>() { - }); - Witness respondent2Witness = unwrapElements(actualRespondent2DQWitnesses.getDetails()).get(0); - assertThat(respondent2Witness.getPartyID()).isNotNull(); - assertThat(respondent2Witness.getFirstName()).isEqualTo("Witness"); - assertThat(respondent2Witness.getLastName()).isEqualTo("Two"); - assertThat(respondent2Witness.getEmailAddress()).isEqualTo("test-witness-two@example.com"); - assertThat(respondent2Witness.getPhoneNumber()).isEqualTo("07532628263"); - assertThat(respondent2Witness.getReasonForWitness()).isEqualTo("good reasons"); - assertThat(respondent2Witness.getEventAdded()).isEqualTo("Defendant Response Event"); - assertThat(respondent2Witness.getDateAdded()).isEqualTo(date); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getData().get("respondent1DQExperts")).isNotNull(); + assertThat(response.getData().get("respondent2DQExperts")).isNull(); } - @Nested - class HandleLocations { + @Test + void shouldUpdateExpertEvents_whenInvokedAndUpdateContactDetailsEnabled_V2DraftDirections() { + // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); - @Test - void oneVOne() { - // Given - DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); - DynamicList preferredCourt = DynamicList.builder() - .listItems(locationValues.getListItems()) - .value(locationValues.getListItems().get(0)) - .build(); - Party defendant1 = Party.builder() - .type(Party.Type.COMPANY) - .companyName("company") - .build(); - CaseData caseData = CaseData.builder() - .caseAccessCategory(SPEC_CLAIM) - .ccdCaseReference(354L) - .respondent1(defendant1) - .respondent1Copy(defendant1) - .respondent1DQ( - Respondent1DQ.builder() - .respondToCourtLocation( - RequestedCourt.builder() - .responseCourtLocations(preferredCourt) - .reasonForHearingAtSpecificCourt("Reason") - .build() - ) - .build() - ) - .showConditionFlags(EnumSet.of( - DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1 - )) - .build(); - CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQExperts(Experts.builder() + .details(wrapElements(Expert.builder().build())).build()) + .build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder() + .respondent2DQDraftDirections(Document.builder().build()).build()) + .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .respondent2ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .build(); - List locations = List.of(LocationRefData.builder().build()); - when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) - .thenReturn(locations); - LocationRefData completePreferredLocation = LocationRefData.builder() - .regionId("regionId") - .epimmsId("epimms") - .courtLocationCode("code") - .build(); - when(courtLocationUtils.findPreferredLocationData( - locations, preferredCourt - )).thenReturn(completePreferredLocation); - StateFlow flow = mock(StateFlow.class); - when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(false); - when(stateFlowEngine.evaluate(caseData)) - .thenReturn(flow); - when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) - .thenReturn(true); - UserInfo userInfo = UserInfo.builder().uid("798").build(); - when(userService.getUserInfo(anyString())).thenReturn(userInfo); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); - // When - AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler - .handle(params); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); - // Then - AbstractObjectAssert sent1 = assertThat(response.getData()) - .extracting("respondent1DQRequestedCourt"); - sent1.extracting("caseLocation") - .extracting("region") - .isEqualTo(completePreferredLocation.getRegionId()); - sent1.extracting("caseLocation") - .extracting("baseLocation") - .isEqualTo(completePreferredLocation.getEpimmsId()); - sent1.extracting("responseCourtCode") - .isEqualTo(completePreferredLocation.getCourtLocationCode()); - sent1.extracting("reasonForHearingAtSpecificCourt") - .isEqualTo("Reason"); - } + // Then + assertThat(response.getData().get("respondent1DQExperts")).isNotNull(); + assertThat(response.getData().get("respondent2DQExperts")).isNull(); - @Test - void oneVTwo_SecondDefendantRepliesSameLegalRep() { - // Given - DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); - DynamicList preferredCourt = DynamicList.builder() - .listItems(locationValues.getListItems()) - .value(locationValues.getListItems().get(0)) - .build(); - Party defendant1 = Party.builder() - .type(Party.Type.COMPANY) - .companyName("company") - .build(); - CaseData caseData = CaseData.builder() - .respondent2SameLegalRepresentative(YES) - .caseAccessCategory(SPEC_CLAIM) - .ccdCaseReference(354L) - .defenceAdmitPartPaymentTimeRouteRequired(IMMEDIATELY) - .respondent2ClaimResponseTypeForSpec(FULL_ADMISSION) - .respondent1(defendant1) - .respondent1Copy(defendant1) - .respondent1DQ( - Respondent1DQ.builder() - .respondToCourtLocation( - RequestedCourt.builder() - .responseCourtLocations(preferredCourt) - .reasonForHearingAtSpecificCourt("Reason") - .build() - ) - .build() - ) - .respondent2DQ( - Respondent2DQ.builder() - .respondToCourtLocation2( - RequestedCourt.builder() - .responseCourtLocations(preferredCourt) - .reasonForHearingAtSpecificCourt("Reason123") - .build() - ) - .build() - ) - .showConditionFlags(EnumSet.of( - DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1, - DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_2 - )) - .build(); + } + + @Test + void shouldUpdateWitnessEvents_whenInvokedAndUpdateContactDetailsEnabled() { + // Given + LocalDateTime dateTime = LocalDateTime.of(2023, 6, 6, 6, 6, 6); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(toggleService.isUpdateContactDetailsEnabled()).thenReturn(true); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQWitnesses(Witnesses.builder() + .details(wrapElements(Witness.builder().build())).build()) + .build()) + + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .respondent2ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) + .ccdCaseReference(354L) + .respondent1ResponseDate(dateTime).build().toBuilder() + .build(); + + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getData().get("respondent1DQWitnesses")).isNotNull(); + assertThat(response.getData().get("respondent2DQWitnesses")).isNull(); + + } + + @Test + void shouldUpdateCorrespondence1_whenProvided() { + // Given + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORONE))).thenReturn(true); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(false); + when(toggleService.isCaseFileViewEnabled()).thenReturn(true); + var testDocument = ResponseDocument.builder() + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); + + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .ccdCaseReference(354L) + .respondent1SpecDefenceResponseDocument(testDocument) + .respondent2SpecDefenceResponseDocument(testDocument) + .isRespondent1(YesOrNo.YES) + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress( + Address.builder() + .postCode("new postcode") + .build() + ) + .build(); - List locations = List.of(LocationRefData.builder().build()); - when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) - .thenReturn(locations); - LocationRefData completePreferredLocation = LocationRefData.builder() - .regionId("regionId") - .epimmsId("epimms") - .courtLocationCode("code") - .build(); - when(courtLocationUtils.findPreferredLocationData( - locations, preferredCourt - )).thenReturn(completePreferredLocation); - StateFlow flow = mock(StateFlow.class); - when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(true); - when(stateFlowEngine.evaluate(caseData)).thenReturn(flow); - when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) - .thenReturn(true); - UserInfo userInfo = UserInfo.builder().uid("798").build(); - when(userService.getUserInfo(anyString())).thenReturn(userInfo); - LocalDate whenWillPay = LocalDate.now().plusDays(5); - given(deadlineExtensionCalculatorService.calculateExtendedDeadline(any(), anyInt())).willReturn(whenWillPay); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); - CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); - // When - AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getData().get("specRespondentCorrespondenceAddressdetails")) + .extracting("PostCode") + .isEqualTo("new postcode"); + assertThat(response.getData().get("respondentSolicitor1ServiceAddress")) + .extracting("PostCode") + .isNull(); + } - // Then - AbstractObjectAssert sent2 = assertThat(response.getData()) - .extracting("respondent2DQRequestedCourt"); - sent2.extracting("caseLocation") - .extracting("region") - .isEqualTo(completePreferredLocation.getRegionId()); - sent2.extracting("caseLocation") - .extracting("baseLocation") - .isEqualTo(completePreferredLocation.getEpimmsId()); - sent2.extracting("responseCourtCode") - .isEqualTo(completePreferredLocation.getCourtLocationCode()); - sent2.extracting("reasonForHearingAtSpecificCourt") - .isEqualTo("Reason123"); - } + @Test + void shouldUpdateCorrespondence1_whenProvided1v2ss() { + // Given + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(mockedStateFlow.isFlagSet(any())).thenReturn(true); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORONE))).thenReturn(true); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(false); + when(toggleService.isCaseFileViewEnabled()).thenReturn(true); + var testDocument = ResponseDocument.builder() + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); - @Test - void oneVTwo_SecondDefendantReplies() { - // Given - DynamicList locationValues = DynamicList.fromList(List.of("Value 1")); - DynamicList preferredCourt = DynamicList.builder() - .listItems(locationValues.getListItems()) - .value(locationValues.getListItems().get(0)) - .build(); - Party defendant1 = Party.builder() - .type(Party.Type.COMPANY) - .companyName("company") - .build(); - CaseData caseData = CaseData.builder() - .caseAccessCategory(SPEC_CLAIM) - .ccdCaseReference(354L) - .respondent1(defendant1) - .respondent1Copy(defendant1) - .respondent1DQ( - Respondent1DQ.builder() - .respondToCourtLocation( - RequestedCourt.builder() - .responseCourtLocations(preferredCourt) - .reasonForHearingAtSpecificCourt("Reason") - .build() - ) - .build() - ) - .respondent2DQ( - Respondent2DQ.builder() - .respondToCourtLocation2( - RequestedCourt.builder() - .responseCourtLocations(preferredCourt) - .reasonForHearingAtSpecificCourt("Reason123") - .build() - ) - .build() - ) - .showConditionFlags(EnumSet.of( - DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_1, - DefendantResponseShowTag.CAN_ANSWER_RESPONDENT_2 - )) - .build(); - CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + CaseData caseData = CaseData.builder() + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder().build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .ccdCaseReference(354L) + .respondent1SpecDefenceResponseDocument(testDocument) + .respondent2SpecDefenceResponseDocument(testDocument) + .isRespondent1(YesOrNo.YES) + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress( + Address.builder() + .postCode("new postcode") + .build() + ) + .respondent2(Party.builder() + .type(Party.Type.COMPANY) + .companyName("Company 3") + .build()) + .respondent2SameLegalRepresentative(YES) + .build(); - List locations = List.of(LocationRefData.builder().build()); - when(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) - .thenReturn(locations); - LocationRefData completePreferredLocation = LocationRefData.builder() - .regionId("regionId") - .epimmsId("epimms") - .courtLocationCode("code") - .build(); - when(courtLocationUtils.findPreferredLocationData( - locations, preferredCourt - )).thenReturn(completePreferredLocation); - StateFlow flow = mock(StateFlow.class); - when(flow.isFlagSet(FlowFlag.TWO_RESPONDENT_REPRESENTATIVES)).thenReturn(true); - when(stateFlowEngine.evaluate(caseData)).thenReturn(flow); - when(coreCaseUserService.userHasCaseRole(anyString(), anyString(), any(CaseRole.class))) - .thenReturn(true); - UserInfo userInfo = UserInfo.builder().uid("798").build(); - when(userService.getUserInfo(anyString())).thenReturn(userInfo); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); - // When - AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler - .handle(params); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); - // Then - AbstractObjectAssert sent2 = assertThat(response.getData()) - .extracting("respondent2DQRequestedCourt"); - sent2.extracting("caseLocation") - .extracting("region") - .isEqualTo(completePreferredLocation.getRegionId()); - sent2.extracting("caseLocation") - .extracting("baseLocation") - .isEqualTo(completePreferredLocation.getEpimmsId()); - sent2.extracting("responseCourtCode") - .isEqualTo(completePreferredLocation.getCourtLocationCode()); - sent2.extracting("reasonForHearingAtSpecificCourt") - .isEqualTo("Reason123"); - } + // Then + assertThat(response.getData().get("specRespondentCorrespondenceAddressdetails")) + .extracting("PostCode") + .isEqualTo("new postcode"); + assertThat(response.getData().get("respondentSolicitor1ServiceAddress")) + .extracting("PostCode") + .isNull(); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressdetails"), + response.getData().get("specRespondent2CorrespondenceAddressdetails") + ); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressRequired"), + response.getData().get("specRespondent2CorrespondenceAddressRequired") + ); } @Test - void shouldNullDocuments_whenInvokedAndCaseFileEnabled() { + void shouldUpdateCorrespondence1_whenProvided1v2ss_withSameResponse() { // Given when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); when(mockedStateFlow.isFlagSet(any())).thenReturn(true); when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); - when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORONE))).thenReturn(true); + when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(false); when(toggleService.isCaseFileViewEnabled()).thenReturn(true); var testDocument = ResponseDocument.builder() - .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl( - "binary-url").build()).build(); + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); CaseData caseData = CaseData.builder() .respondent1(PartyBuilder.builder().individual().build()) @@ -1231,6 +1598,19 @@ void shouldNullDocuments_whenInvokedAndCaseFileEnabled() { .ccdCaseReference(354L) .respondent1SpecDefenceResponseDocument(testDocument) .respondent2SpecDefenceResponseDocument(testDocument) + .isRespondent1(YesOrNo.YES) + .respondentResponseIsSame(YES) + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress( + Address.builder() + .postCode("new postcode") + .build() + ) + .respondent2(Party.builder() + .type(Party.Type.COMPANY) + .companyName("Company 3") + .build()) + .respondent2SameLegalRepresentative(YES) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -1240,12 +1620,24 @@ void shouldNullDocuments_whenInvokedAndCaseFileEnabled() { .handle(params); // Then - assertThat(response.getData().get("respondent1SpecDefenceResponseDocument")).isNull(); - assertThat(response.getData().get("respondent2SpecDefenceResponseDocument")).isNull(); + assertThat(response.getData().get("specRespondentCorrespondenceAddressdetails")) + .extracting("PostCode") + .isEqualTo("new postcode"); + assertThat(response.getData().get("respondentSolicitor1ServiceAddress")) + .extracting("PostCode") + .isNull(); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressdetails"), + response.getData().get("specRespondent2CorrespondenceAddressdetails") + ); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressRequired"), + response.getData().get("specRespondent2CorrespondenceAddressRequired") + ); } @Test - void shouldUpdateCorrespondence1_whenProvided() { + void shouldUpdateCorrespondence1_whenProvided1v2ss_withSameResponse_withv2copy() { // Given when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); when(mockedStateFlow.isFlagSet(any())).thenReturn(true); @@ -1254,8 +1646,7 @@ void shouldUpdateCorrespondence1_whenProvided() { when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(false); when(toggleService.isCaseFileViewEnabled()).thenReturn(true); var testDocument = ResponseDocument.builder() - .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl( - "binary-url").build()).build(); + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); CaseData caseData = CaseData.builder() .respondent1(PartyBuilder.builder().individual().build()) @@ -1266,12 +1657,19 @@ void shouldUpdateCorrespondence1_whenProvided() { .respondent1SpecDefenceResponseDocument(testDocument) .respondent2SpecDefenceResponseDocument(testDocument) .isRespondent1(YesOrNo.YES) - .specAoSRespondentCorrespondenceAddressRequired(YesOrNo.NO) - .specAoSRespondentCorrespondenceAddressdetails( + .respondentResponseIsSame(YES) + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress( Address.builder() .postCode("new postcode") .build() ) + .respondent2(Party.builder() + .type(Party.Type.COMPANY) + .companyName("Company 3") + .build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) + .respondent2SameLegalRepresentative(YES) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -1284,13 +1682,21 @@ void shouldUpdateCorrespondence1_whenProvided() { assertThat(response.getData().get("specRespondentCorrespondenceAddressdetails")) .extracting("PostCode") .isEqualTo("new postcode"); - assertThat(response.getData().get("specAoSRespondentCorrespondenceAddressdetails")) + assertThat(response.getData().get("respondentSolicitor1ServiceAddress")) .extracting("PostCode") .isNull(); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressdetails"), + response.getData().get("specRespondent2CorrespondenceAddressdetails") + ); + assertEquals( + response.getData().get("specRespondentCorrespondenceAddressRequired"), + response.getData().get("specRespondent2CorrespondenceAddressRequired") + ); } @Test - void shouldUpdateCorrespondence1_whenProvided1v2ss() { + void shouldUpdateCorrespondence1_whenProvided1v2ss_withSameResponse_withv2copyAndNoTempAdr() { // Given when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); when(mockedStateFlow.isFlagSet(any())).thenReturn(true); @@ -1299,8 +1705,7 @@ void shouldUpdateCorrespondence1_whenProvided1v2ss() { when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(false); when(toggleService.isCaseFileViewEnabled()).thenReturn(true); var testDocument = ResponseDocument.builder() - .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl( - "binary-url").build()).build(); + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); CaseData caseData = CaseData.builder() .respondent1(PartyBuilder.builder().individual().build()) @@ -1311,8 +1716,9 @@ void shouldUpdateCorrespondence1_whenProvided1v2ss() { .respondent1SpecDefenceResponseDocument(testDocument) .respondent2SpecDefenceResponseDocument(testDocument) .isRespondent1(YesOrNo.YES) - .specAoSRespondentCorrespondenceAddressRequired(YesOrNo.NO) - .specAoSRespondentCorrespondenceAddressdetails( + .respondentResponseIsSame(YES) + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress( Address.builder() .postCode("new postcode") .build() @@ -1321,7 +1727,9 @@ void shouldUpdateCorrespondence1_whenProvided1v2ss() { .type(Party.Type.COMPANY) .companyName("Company 3") .build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) .respondent2SameLegalRepresentative(YES) + .tempAddress2Required(NO) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -1334,7 +1742,7 @@ void shouldUpdateCorrespondence1_whenProvided1v2ss() { assertThat(response.getData().get("specRespondentCorrespondenceAddressdetails")) .extracting("PostCode") .isEqualTo("new postcode"); - assertThat(response.getData().get("specAoSRespondentCorrespondenceAddressdetails")) + assertThat(response.getData().get("respondentSolicitor1ServiceAddress")) .extracting("PostCode") .isNull(); assertEquals( @@ -1356,20 +1764,21 @@ void shouldUpdateCorrespondence2_whenProvided() { when(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).thenReturn(true); when(toggleService.isCaseFileViewEnabled()).thenReturn(true); var testDocument = ResponseDocument.builder() - .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl( - "binary-url").build()).build(); + .file(Document.builder().documentUrl("fake-url").documentFileName("file-name").documentBinaryUrl("binary-url").build()).build(); CaseData caseData = CaseData.builder() .respondent1(PartyBuilder.builder().individual().build()) .respondent1Copy(PartyBuilder.builder().individual().build()) .respondent1DQ(Respondent1DQ.builder().build()) + .respondent2(PartyBuilder.builder().individual().build()) + .respondent2Copy(PartyBuilder.builder().individual().build()) .respondent2DQ(Respondent2DQ.builder().build()) .ccdCaseReference(354L) .respondent1SpecDefenceResponseDocument(testDocument) .respondent2SpecDefenceResponseDocument(testDocument) .isRespondent2(YesOrNo.YES) - .specAoSRespondent2CorrespondenceAddressRequired(YesOrNo.NO) - .specAoSRespondent2CorrespondenceAddressdetails( + .respondentSolicitor2ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor2ServiceAddress( Address.builder() .postCode("new postcode") .build() @@ -1386,7 +1795,7 @@ void shouldUpdateCorrespondence2_whenProvided() { assertThat(response.getData().get("specRespondent2CorrespondenceAddressdetails")) .extracting("PostCode") .isEqualTo("new postcode"); - assertThat(response.getData().get("specAoSRespondent2CorrespondenceAddressdetails")) + assertThat(response.getData().get("respondentSolicitor2ServiceAddress")) .extracting("PostCode") .isNull(); } @@ -1416,6 +1825,58 @@ void shouldPopulateRespondent2Flag_WhenInvoked() { assertThat(response.getData().get("respondent2DocumentGeneration")).isEqualTo("userRespondent2"); } + @Test + void shouldPopulateRespondent2Flag_WhenInvokedWithSmallClaimExperts_1DQ() { + // Given + when(toggleService.isCaseFileViewEnabled()).thenReturn(true); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + given(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).willReturn(true); + given(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORONE))).willReturn(false); + CaseData caseData = CaseDataBuilder.builder() + .atStateClaimDetailsNotified() + .respondent2(PartyBuilder.builder().individual().build()) + .addRespondent2(YES) + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent1DQ(Respondent1DQ.builder() + .respondToClaimExperts(ExpertDetails.builder().build()).build()) + .respondent2DQ(Respondent2DQ.builder().build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + // Given + assertThat(response.getData().get("respondent2DocumentGeneration")).isEqualTo("userRespondent2"); + } + + @Test + void shouldPopulateRespondent2Flag_WhenInvokedWithSmallClaimExperts_2DQ() { + // Given + when(toggleService.isCaseFileViewEnabled()).thenReturn(true); + when(userService.getUserInfo(anyString())).thenReturn(UserInfo.builder().uid("uid").build()); + when(stateFlowEngine.evaluate(any(CaseData.class))).thenReturn(mockedStateFlow); + given(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORTWO))).willReturn(true); + given(coreCaseUserService.userHasCaseRole(any(), any(), eq(RESPONDENTSOLICITORONE))).willReturn(false); + CaseData caseData = CaseDataBuilder.builder() + .atStateClaimDetailsNotified() + .respondent2(PartyBuilder.builder().individual().build()) + .addRespondent2(YES) + .respondent1(PartyBuilder.builder().individual().build()) + .respondent1Copy(PartyBuilder.builder().individual().build()) + .respondent2DQ(Respondent2DQ.builder() + .respondToClaimExperts2(ExpertDetails.builder().build()).build()) + .respondent1DQ(Respondent1DQ.builder().build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + // Given + assertThat(response.getData().get("respondent2DocumentGeneration")).isEqualTo("userRespondent2"); + } + @Test void shouldNotPopulateRespondent2Flag_WhenInvoked() { // Given @@ -1478,6 +1939,26 @@ void shouldSetMultiPartyResponseTypeFlags_Counter_Admit_OR_Admit_Part_combinatio .isEqualTo("COUNTER_ADMIT_OR_ADMIT_PART"); } + @Test + void shouldSetMultiPartyResponseTypeFlags_Counter_Admit_OR_Admit_Part_combination2_CanAddApplicant2() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateRespondent2v1BothNotFullDefence_CounterClaimX2() + .addApplicant2(YES) + .respondent1ClaimResponseTypeForSpec(FULL_ADMISSION) + .respondent1ClaimResponseTypeForSpec(FULL_ADMISSION) + .build(); + + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getData()).extracting("multiPartyResponseTypeFlags") + .isEqualTo("COUNTER_ADMIT_OR_ADMIT_PART"); + } + + /** * if solicitor says that each defendant gets their response but then chooses the same * option from full defence/part admit/full admit/counterclaim, then it is not different response. @@ -1568,7 +2049,6 @@ void shouldReturnError_whenWitnessRequiredAndNullDetails() { void shouldReturnNoError_whenWitnessRequiredAndDetailsProvided() { // Given List> testWitness = wrapElements(Witness.builder().name("test witness").build()); - Witnesses witnesses = Witnesses.builder().witnessesToAppear(YES).details(testWitness).build(); CaseData caseData = CaseDataBuilder.builder() .respondent1DQ(Respondent1DQ.builder().build()) .respondent1DQWitnessesRequiredSpec(YES) @@ -1657,9 +2137,6 @@ void specificSummary_whenPartialAdmitNotPay() { // When SubmittedCallbackResponse response = (SubmittedCallbackResponse) handler.handle(params); - LocalDateTime responseDeadline = caseData.getApplicant1ResponseDeadline(); - String claimNumber = caseData.getLegacyCaseReference(); - // Then assertThat(response.getConfirmationBody()) .contains(caseData.getApplicant1().getPartyName()) @@ -2067,12 +2544,12 @@ void whenProvided_thenValidateCorrespondence1() { CaseData caseData = CaseDataBuilder.builder().atStateClaimDetailsNotified().build() .toBuilder() .isRespondent1(YES) - .specAoSRespondentCorrespondenceAddressRequired(YesOrNo.NO) - .specAoSRespondentCorrespondenceAddressdetails(Address.builder() + .respondentSolicitor1ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor1ServiceAddress(Address.builder() .postCode("postal code") .build()) .build(); - CallbackParams params = callbackParamsOf(caseData, MID, "confirm-details"); + CallbackParams params = callbackParamsOf(caseData, MID, "specCorrespondenceAddress"); when(postcodeValidator.validate("postal code")).thenReturn(Collections.emptyList()); // When @@ -2089,12 +2566,12 @@ void whenProvided_thenValidateCorrespondence2() { CaseData caseData = CaseDataBuilder.builder().atStateClaimDetailsNotified().build() .toBuilder() .isRespondent2(YES) - .specAoSRespondent2CorrespondenceAddressRequired(YesOrNo.NO) - .specAoSRespondent2CorrespondenceAddressdetails(Address.builder() - .postCode("postal code") - .build()) + .respondentSolicitor2ServiceAddressRequired(YesOrNo.NO) + .respondentSolicitor2ServiceAddress(Address.builder() + .postCode("postal code") + .build()) .build(); - CallbackParams params = callbackParamsOf(caseData, MID, "confirm-details"); + CallbackParams params = callbackParamsOf(caseData, MID, "specCorrespondenceAddress"); when(postcodeValidator.validate("postal code")).thenReturn(Collections.emptyList()); // When @@ -2324,10 +2801,55 @@ public void shouldThrowError_whenValidateRespondentExpertsMultipartyWithNoUnavai // Then assertThat(response.getErrors()).isNotEmpty(); } + + @Test + public void shouldThrowError_whenValidateRespondentExpertsMultipartyWithNoUnavailableDates_DisputesTheClaim() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateClaimDetailsNotified() + .responseClaimTrack(SpecJourneyConstantLRSpec.DISPUTES_THE_CLAIM) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQHearingSmallClaim(SmallClaimHearing.builder().unavailableDatesRequired( + YES).build()).build()) + .build(); + List errors = Collections.singletonList("error 1"); + Mockito.when(dateValidator.validateFastClaimHearing(any())).thenReturn(errors); + CallbackParams params = callbackParamsOf(caseData, MID, "validate-unavailable-dates"); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getErrors()).isNotEmpty(); + } + + @Test + public void shouldThrowError_whenValidateRespondentExpertsMultipartyWithNoUnavailableDates_V2() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateClaimDetailsNotified() + .responseClaimTrack(SpecJourneyConstantLRSpec.SMALL_CLAIM) + .respondent1DQ(Respondent1DQ.builder() + .respondent1DQHearingSmallClaim(SmallClaimHearing.builder().unavailableDatesRequired( + YES).build()).build()) + .respondent2DQ(Respondent2DQ.builder() + .respondent2DQHearingSmallClaim(SmallClaimHearing.builder().unavailableDatesRequired( + YES).build()).build()) + .isRespondent2(YES) + .build(); + List errors = Collections.singletonList("error 1"); + Mockito.when(dateValidator.validateSmallClaimsHearing(any())).thenReturn(errors); + CallbackParams params = callbackParamsOf(caseData, MID, "validate-unavailable-dates"); + // When + AboutToStartOrSubmitCallbackResponse response = (AboutToStartOrSubmitCallbackResponse) handler + .handle(params); + + // Then + assertThat(response.getErrors()).isNotEmpty(); + } } @Test void handleEventsReturnsTheExpectedCallbackEvents() { assertThat(handler.handledEvents()).containsOnly(DEFENDANT_RESPONSE_SPEC); } + } From ef0198c18dede00f5cc2950e0510ee462fea8b33 Mon Sep 17 00:00:00 2001 From: UshaPanneerselvam1 <122611188+UshaPanneerselvam1@users.noreply.github.com> Date: Tue, 14 Nov 2023 14:08:43 +0000 Subject: [PATCH 4/4] CIV-8923 Refactoring tempAddress to tempCorrespondence (#3568) CIV-8923 specAoSApplicantCorrespondenceAddressdetails is being updated when defendant updates address --- .../RespondToClaimSpecCallbackHandler.java | 8 +++---- .../reform/civil/model/CaseDataParent.java | 12 +++++----- ...RespondToClaimSpecCallbackHandlerTest.java | 22 +++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java index 701d9c1c912..df862ffbf82 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandler.java @@ -1363,9 +1363,9 @@ private CallbackResponse setApplicantResponseDeadline(CallbackParams callbackPar AllocatedTrack allocatedTrack = caseData.getAllocatedTrack(); Party updatedRespondent1; - if (NO.equals(caseData.getTempAddress1Required())) { + if (NO.equals(caseData.getTempCorrespondenceAddress1Required())) { updatedRespondent1 = caseData.getRespondent1().toBuilder() - .primaryAddress(caseData.getTempAddress1()).build(); + .primaryAddress(caseData.getTempCorrespondenceAddress1()).build(); } else { updatedRespondent1 = caseData.getRespondent1().toBuilder() .primaryAddress(caseData.getRespondent1Copy().getPrimaryAddress()) @@ -1578,9 +1578,9 @@ && isAwaitingAnotherDefendantResponse(caseData)) { private static Party applyRespondent2Address(CaseData caseData, CaseData.CaseDataBuilder updatedData) { Party updatedRespondent2; - if (NO.equals(caseData.getTempAddress2Required())) { + if (NO.equals(caseData.getTempCorrespondenceAddress2Required())) { updatedRespondent2 = caseData.getRespondent2().toBuilder() - .primaryAddress(caseData.getTempAddress2()).build(); + .primaryAddress(caseData.getTempCorrespondenceAddress2()).build(); } else { updatedRespondent2 = caseData.getRespondent2().toBuilder() .primaryAddress(caseData.getRespondent2Copy().getPrimaryAddress()).build(); diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java index 08b9556caf8..5db7728550f 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataParent.java @@ -726,19 +726,19 @@ public boolean isApplicantNotRepresented() { /** * used to temporary hold addresses. */ - private final Address tempAddress1; + private final Address tempCorrespondenceAddress1; /** - * used with tempAddress1. + * used with tempCorrespondenceAddress1. */ - private final YesOrNo tempAddress1Required; + private final YesOrNo tempCorrespondenceAddress1Required; /** * used to temporary hold addresses. */ - private final Address tempAddress2; + private final Address tempCorrespondenceAddress2; /** - * used with tempAddress1. + * used with tempCorrespondenceAddress2. */ - private final YesOrNo tempAddress2Required; + private final YesOrNo tempCorrespondenceAddress2Required; @JsonIgnore public boolean isResponseAcceptedByClaimant() { diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java index 1ae04095de2..73040deeb42 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/RespondToClaimSpecCallbackHandlerTest.java @@ -789,8 +789,8 @@ void updateRespondent1AddressWhenUpdated() { .respondent1(PartyBuilder.builder().individual().build()) .atStateApplicantRespondToDefenceAndProceed() .build().toBuilder() - .tempAddress1Required(NO) - .tempAddress1(AddressBuilder.maximal().build()) + .tempCorrespondenceAddress1Required(NO) + .tempCorrespondenceAddress1(AddressBuilder.maximal().build()) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -829,11 +829,11 @@ void updateRespondent2AddressWhenUpdated() { .respondent2(PartyBuilder.builder().individual().build()) .respondent2Copy(PartyBuilder.builder().individual().build()) .build().toBuilder() - .tempAddress1Required(YES) - .tempAddress1(Address.builder().build()) + .tempCorrespondenceAddress1Required(YES) + .tempCorrespondenceAddress1(Address.builder().build()) .build().toBuilder() - .tempAddress2Required(NO) - .tempAddress2(newAddress2) + .tempCorrespondenceAddress2Required(NO) + .tempCorrespondenceAddress2(newAddress2) .respondentSolicitor2ServiceAddressRequired(NO) .respondentSolicitor2ServiceAddress(newAddress2) .build(); @@ -906,12 +906,12 @@ void defendantResponsePopulatesWitnessesData() { .respondent1DQWitnessesSmallClaim(res1witnesses) .respondent2DQWitnessesSmallClaim(res2witnesses) .build().toBuilder() - .tempAddress1Required(YES) - .tempAddress1(Address.builder().build()) + .tempCorrespondenceAddress1Required(YES) + .tempCorrespondenceAddress1(Address.builder().build()) .respondent2ResponseDate(dateTime) .respondent1ResponseDate(dateTime).build().toBuilder() - .tempAddress2Required(NO) - .tempAddress2(AddressBuilder.maximal().build()) + .tempCorrespondenceAddress2Required(NO) + .tempCorrespondenceAddress2(AddressBuilder.maximal().build()) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); @@ -1729,7 +1729,7 @@ void shouldUpdateCorrespondence1_whenProvided1v2ss_withSameResponse_withv2copyAn .build()) .respondent2Copy(PartyBuilder.builder().individual().build()) .respondent2SameLegalRepresentative(YES) - .tempAddress2Required(NO) + .tempCorrespondenceAddress2Required(NO) .build(); CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT);