package com.talentcard.server.business.portal; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import java.lang.reflect.Method; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.jdbc.core.JdbcTemplate; @ExtendWith(MockitoExtension.class) class ParkingMerchantPortalServiceTests { @Mock private JdbcTemplate jdbc; @InjectMocks private ParkingMerchantPortalService service; @Test @SuppressWarnings("unchecked") void freeAndPaidParkingUseDifferentTagRules() throws Exception { when(jdbc.queryForObject(anyString(), eq(Integer.class), any(Object[].class))).thenReturn(0); Method method = ParkingMerchantPortalService.class.getDeclaredMethod( "parkingBenefitTags", Long.class, Map.class); method.setAccessible(true); List freeTags = (List) method.invoke(service, 1L, Map.of( "enabled", true, "parkingType", "free")); List paidTags = (List) method.invoke(service, 1L, Map.of( "enabled", true, "parkingType", "paid", "storeConsume", true, "consumeEnabled", false, "discount", "8.50")); assertThat(freeTags).containsExactly("免费"); assertThat(paidTags).containsExactly("8.5折"); } @Test void parkingScopeDecidesWhetherThePlatePageNeedsAParkingLot() throws Exception { Method method = ParkingMerchantPortalService.class.getDeclaredMethod( "requiresParkingLotSelection", Map.class, Map.class); method.setAccessible(true); // 后台选“停车场全部可选”时只需要填车牌,不再让小程序挑停车场。 assertThat(method.invoke(service, Map.of("parkingScope", "all"), Map.of("plateFormMode", "withParking"))) .isEqualTo(false); assertThat(method.invoke(service, Map.of("parkingScope", "ALL"), Map.of())) .isEqualTo(false); // 后台选“停车场只选其一”时保留停车场搜索。 assertThat(method.invoke(service, Map.of("parkingScope", "selected"), Map.of("plateFormMode", "simple"))) .isEqualTo(true); assertThat(method.invoke(service, Map.of("parkingScope", "ONE"), Map.of())) .isEqualTo(true); // 老数据没配范围时沿用停车权益表的 plate_form_mode。 assertThat(method.invoke(service, Map.of(), Map.of("plateFormMode", "withParking"))) .isEqualTo(true); assertThat(method.invoke(service, Map.of(), Map.of("plateFormMode", "simple"))) .isEqualTo(false); } }