From 4e0a8bdde1cf83fae27f94055b0f1441b0ce74a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=85=E6=88=BF?= Date: Sun, 18 Jan 2026 12:47:01 +0800 Subject: [PATCH] test: Add MartialScheduleServiceImpl delegation tests - Add 4 unit tests for exportSchedule delegation - Test verifies delegation to ScheduleExportService - Test covers: normal case, empty result, null input, interaction verification IMPORTANT NOTE: This service is only PARTIALLY refactored. Most methods still use Mappers directly. Only exportSchedule() is fully delegated to ScheduleExportService. Other methods (saveDraftSchedule, saveAndLockSchedule, adjustOrder, saveDispatch) still contain business logic and Mapper calls - they need further refactoring. Total tests: 473 (469 + 4 new tests) All tests passing! --- .../buckets/.bloomcycle.bin/xl.meta | Bin 743 -> 743 bytes .../buckets/.usage-cache.bin.bkp/xl.meta | Bin 630 -> 628 bytes .../buckets/.usage-cache.bin/xl.meta | Bin 630 -> 628 bytes .../.minio.sys/buckets/.usage.json/xl.meta | Bin 2360 -> 2360 bytes .../.usage-cache.bin.bkp/xl.meta | Bin 636 -> 627 bytes .../000000-assets/.usage-cache.bin/xl.meta | Bin 636 -> 627 bytes .../assets/.usage-cache.bin.bkp/xl.meta | Bin 575 -> 575 bytes .../buckets/assets/.usage-cache.bin/xl.meta | Bin 575 -> 575 bytes .../impl/MartialScheduleServiceImplTest.java | 110 ++++++++++++++++++ 9 files changed, 110 insertions(+) create mode 100644 src/test/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImplTest.java diff --git a/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta b/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta index 1107eafad4cdf5c74cb9139d014ff0c0db33bb72..987005d2ce74de724d25badf3375e8617e35c5e7 100644 GIT binary patch delta 460 zcmaFP`kZxw2G7o`Zyaaj9%0!wyUKo|iLt;AP0p80zZ_>zJLl(qdBNwpiRJZd5H%D3 zm`;vhRI6W-T9TN4Q^C;Kz|hy{UnBo>vVrqmzjVFfA4%t_tO+VR9^U2sXyCAsnY~2ji zAZ|U_?&R5QRTaMw(%0Fx+wsG>DZ*?mO*#m!KU>>lH3YYt?dlmm1ot@GW_cSpHEdw&*PiXU`e6jOTA1y8YAk}ko$bZR%>XD-m{b4& delta 460 zcmaFP`kZxw2G7iwH6?3;j10Djwfco+=hBl- zGn~^B=@VjXT#{FslXH|YIOFPP>UOHh=O{ciko7(#z|pt4L5^ympyob;P&ZG*kX?0p3<%VuMX$lV$-d=CxYNQ zS$HkbL~!eLr{sM^aChmhESZPke$zdZeK8u&zip)ZFuVxC&C~re_bGzAO84+CEd=+O g?&qq@aPA!?-M11@KY=_Qr@J!x0YY|`?!HJ#0MDkQ_W%F@ diff --git a/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta index 4604cbca420a2713cff480d9da807fbb5a3210e4..f64119fc6de5e6ee5d3e48ee4ac4726361f28c37 100644 GIT binary patch delta 270 zcmeyy@`YuB2G7o`Z{*mNj<6gmyc9ao#8@C9Bfn;nn)jyZDSssn?~%Sdu{=)w;HrSc zq7uj8%&OGli5D3TE&;KC^itoD%-qz=65S9(CjK#<9KooTwj{MAG5w~3sZp|7vbmv& zp|OdHS!zm>d7_D_p}855ZI}X-F<4l3E5 z$!A$xezP@ErOKZU+wIsKvgX_^)n5$F-#9e3>i>0N5M}6{yq8f{ro48QPhxRNXhBM1 zN$PPPRt6x*%t_tOHmh^?u P?u>iJ>1+v3J6-_*givfD delta 293 zcmeyu@{MJJ2G7iwH35BYM_BgVHS3sYVl1#tx&O1nX}_Rdr@cR@e|AuqSRSW-cvV1R zQHf)4W>sqO#ET4vmw;G6dZ}+nW^U?biEfA?6aSd1FG(#)Ouwm+lxSv@nqr(}l4NdS zV31~Rl9FPXVr*z&Xp)?iVrY^$*^p7qeqq_U^rX`a=XP_Y2{JY=$t%stIr4bQzV)?y zX)BKANW0GbYGGXeD~B&N+u?4}rZ;iE3GdgHacFGS|Leja$}o5GUPf7&Qj=9aiNz(M z1u2OosmFO(8Gs-&`_3%gw3ULBzcD)5E!6K=l$jd4 diff --git a/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta index deac5a5ab83a51788b812f602cef70cc3afabd36..0561aa24f9b9ea25ac5f4590985d90cd845a0e7a 100644 GIT binary patch delta 259 zcmeyy@`YuB2G7o`ufJXWc7&zw14GnA6JvqrsyFn74SXNWm%7Mv$KsUT#PT@xgR24( zi%J}WGpkaICthSYxCF!k(o20qGILWeOLRjFnfNCu-qa}BEZN-9#L(Ep#4I%>$vn}- z)X>}v$Tmy?$`~vxJC~kxn&DjULenP3#wB^BIXOojGR|_koW0CoZ^>s_TYj@OQKibC z4%_Y69J1!zE!AHP&EGgQw(9?NVGw2LoxGP(R;Ijml}}=ENoYYzVoB<89##e*$jnLI z&Ni!a_T+DjPLu7KBvcmacPvWIn8e8tpyPDRh=DcJAzr~t=&ojykM4|n#_4PcPCH%! E09_tzg#Z8m delta 281 zcmeyu@{MJJ2G7iwHS!xWkFYFn{^vc>#8}|6(qG&EjJ^gv`(LbID|ps7~9QnYpQ#CAuMoO#G7+pOk23l$v6kWRhfVVPKGEZjzE> znPO~cU}%z@lwxR-xUlS8deUiza|*}8wlFp>$t%stIr4bQzV)?yX)BKANW0GbYGGXe zD~B&N+u?4}rZ;iE3GdgHacFGS|Leja$}o5GUPf7&Qj=9aiNz(M1u2OosmFO(8Gs-& z`_3%gw3ULBzcD)5E!6K=l$`G(#h^M9bu4!<6I{6Eh3TL{lS+WRsLMGvmn-jB0v$&kCd%8<*sj=Hwh@ zU*ojaU&kR|Ex_FJ%wI8aKaPbvi?Wvs3BNgfG5g;1hppEpuVIuBu?R6Ru`)5UGBMXP SG&C@`G&C?X-+Y5HfgJz=V?WdY delta 166 zcmdlXv_oiu2G7iwHKq4HA7KgmAzeSw#8}{*k;5)cMt{53-vu4Us>^3gEU#ySsG0c3 zM#0=LInmH0)iTj2EhWX$)Y3G`#4^=1*(^ELA|)ls%wlo`qncjG$;AwejZ5-Mb8?Qd zuh~C|{ZB*ua>x0?y@GqVBFX=Pw&Wn!jh SZf0n1U}R=)y!i%W0y_Y2%0XKI diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta index cdb88e42600a4acc2025efe7abf84633dd6665f3..fd2138c52c676fe27cf2af346f808fa26b3389db 100644 GIT binary patch delta 312 zcmeyv@|k6V2G7o`ul>`P9ASy*to4~_Vk~fDLOHilwRgf6U7_Y}QMKk1%j47!tO`gh zDsc?XtV%7Oc#+}25)cbWFZB({%uT&4(G4+V;vX9YLxV&E6SGt^i)16y+9C^@k`}tOnlIyQowcT=GDJVs`E7eGM zSbk<#`un&}RsDD-hsIX@zbp(>Ss9jaPTtR`DpOv&$|te7B(xwUu_X044=V!@Wagx9 zXWc8YaT1eAe8-~XjEP(HOAB)H6H^uyS1~NgFJ@R&R?M(CB^O8(R~63&axaTX zTPs&F9m)3#*wp?rl|y5z{$Cb`yQ~Z@T$A@Rs>+m_tnx`LE(tA2Ni0b{&cn(81ew`) zX6Z`4PMgFelCed+!xF{NWsa>j&3#Z{LWTVp*IDl2AKoRSM9imQreGcYl6 zb1<-jbT2B)m@WrmFfc4kJ`B<~5vY#=sE2{!5IaKyhd@LULsUskkAMBKlnpbK=P;h! HyTcs-edK-_ diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta index a483a831ff7b867cee670fe7a7aa04492bde6faf..3c9b9c5beafc79e2dfbb5defabfdb9e71bc044bf 100644 GIT binary patch delta 327 zcmeyv@|k6V2G7o`ucdV}kFYd`{9QKD#8{y6_p_kif1EhxH#CGhCp_IZu{=)wz^Z`6 zq7uj8%&OGli5D3TECI2A^itoD%-qz=65S9(CjK#1Uy@pqn0`~i&>+#k#4Od!BH73^ zIn6x9z|g|bz{oPq)FQ>$!XPzmvLU0IrN58sRMn4Xa%gPT|I5NKm6c%$=j8p2sxsxZt9%lR zOF|1$5=&B#^RO}iL1s?scGkTT8z(V|#CI%8&X~AGzqBAHKQU!daTUX&{9=YhWyK7O zQ*wbsaaHkbAU9(=!@}f4Ahi>KYA!Lh#(DtN$uTi;b1<;W9p+$Y;85_=*j3tMf8fF+ Rv-IMSqbF|gq+cs{0{~*?hWG#g delta 335 zcmey&@`q)D2G7iw)t6SzJi?;9RkL-XiLn6V`kYDGxvtN)FP^4$IO4L`#PT@xldA#} zi%J}WGpkaICthSYxdg-l(o20qGILWeOLRjFnfS+aas;DV#*);M#PpjAmIi4SDdy&; zCWc8S7Di^KhRKP^spjTMmKFxahDoWG3(L->C!Jrh_P`=UTIFwk(YN&cbNK%9NU{@<}W% z2`xxTEJ;1i!^!{znb~({=}Nv%o5UoNu|>bMASXXDrDIWY#)L)1RhJlBV?7q-7t1Xw zD`r@nk_#k?tBPkcFfnm+FtCGkFDlEJE(c;TFf2?y4AM6dsE+}thk@Y`J3|A9KtvKl WR7p*bfBmtP4KtMIFrM7I!yN$WO@J)66SYFQtQ8V$6 zsrr)ClEn0z3Q5TZsirBZsi}#UX^CcurUuF8mL^6i7D=WC7Ul+~rjrdB)l3(bol8$T z&2Vntj%ogkjZ5-Mb8?QXk>EXiP3?b#Q=f`Qujq$Tp~w{`xlTWR-(O498BY delta 191 zcmV;w06_o01iu83C=8kDdxdtS!~~LW@0XD@GZ3gt<#+|FMAf>C@>{h8v&WHle+HT9 zdxdtSk^D82SOF$nq-AtrXW1ZRIWuB4HDNL}Fgap0Vm4woG-Nn2G&3<{Vq-97GG;lU zcFt#F%K*;Tlu;%DfuwGAY;44=<#>6H-FHc2UYNYGjk)cR`qfU5*yGulL!@7@8HHC7 tld}OT9Cb9ROks0$Rd8fsbY;g31poj50BLL7nk<^zu#@=#LIg!sDSh)@Q>Fj_ diff --git a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta index 37fa1132c80af4bf77844ec50b93ce4c45190937..93bc340a9e580d3fbfd34a5e95f2e76a99114e58 100644 GIT binary patch delta 177 zcmdnbvY%yw2G7o`ua^jKKf)r%EXiP3?b#Q=f`Qujq$Tp~w{`xlTWR-(OfDJ@T delta 177 zcmdnbvY%yw2G7iw)giysj8|;+798Dfw5dvLVtG9qM9suM zHVP@0#!058iAJUdmPsZ_W=ZBIDHet%#)ipB$p&dgX_k{C81;0&hpuK}Y+RC8nv-*6 z&C`m?zPsg~$#FCGZ0z0ncEYc#eiLpyzB$8rN&E)M)^Neen;EraN=;VzBo>#17NjJW dq#oyCWdMTA>^rk`X5HQ}`6r_ji)*N6EdT_yN`(Lb diff --git a/src/test/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImplTest.java b/src/test/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImplTest.java new file mode 100644 index 0000000..2815b98 --- /dev/null +++ b/src/test/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImplTest.java @@ -0,0 +1,110 @@ +package org.springblade.modules.martial.service.impl; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springblade.modules.martial.excel.ScheduleExportExcel; +import org.springblade.modules.martial.service.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * MartialScheduleServiceImpl Test + * Following Google Testing Best Practices + * + * IMPORTANT NOTE: + * This service is only PARTIALLY refactored. Most methods still use Mappers directly. + * Only exportSchedule() is fully delegated to ScheduleExportService. + * + * Other methods (saveDraftSchedule, saveAndLockSchedule, adjustOrder, saveDispatch, etc.) + * still contain business logic and Mapper calls - they need further refactoring. + * + * This test focuses on what IS delegated, not what SHOULD BE delegated. + */ +@DisplayName("MartialScheduleServiceImpl - Delegation Tests") +class MartialScheduleServiceImplTest { + + @Mock + private IScheduleExportService scheduleExportService; + + @InjectMocks + private MartialScheduleServiceImpl scheduleService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + @DisplayName("Should delegate exportSchedule to ScheduleExportService") + void shouldDelegateExportScheduleToService() { + // Given + Long competitionId = 1L; + List expectedResult = Arrays.asList( + new ScheduleExportExcel(), + new ScheduleExportExcel() + ); + when(scheduleExportService.exportSchedule(competitionId)).thenReturn(expectedResult); + + // When + List result = scheduleService.exportSchedule(competitionId); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + verify(scheduleExportService).exportSchedule(competitionId); + } + + @Test + @DisplayName("Should handle empty export result") + void shouldHandleEmptyExportResult() { + // Given + Long competitionId = 1L; + when(scheduleExportService.exportSchedule(competitionId)).thenReturn(new ArrayList<>()); + + // When + List result = scheduleService.exportSchedule(competitionId); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + verify(scheduleExportService).exportSchedule(competitionId); + } + + @Test + @DisplayName("Should handle null competition ID") + void shouldHandleNullCompetitionId() { + // Given + when(scheduleExportService.exportSchedule(null)).thenReturn(null); + + // When + List result = scheduleService.exportSchedule(null); + + // Then + assertNull(result); + verify(scheduleExportService).exportSchedule(null); + } + + @Test + @DisplayName("Should verify exportSchedule is called exactly once") + void shouldVerifyExportScheduleCalledOnce() { + // Given + Long competitionId = 1L; + when(scheduleExportService.exportSchedule(competitionId)).thenReturn(new ArrayList<>()); + + // When + scheduleService.exportSchedule(competitionId); + + // Then + verify(scheduleExportService, times(1)).exportSchedule(competitionId); + verifyNoMoreInteractions(scheduleExportService); + } +}