package com.tcm.training.admin.system.service; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.tcm.training.admin.app.system.controller.AppStartupPageController; import com.tcm.training.admin.app.system.vo.AppStartupPageVO; import com.tcm.training.admin.system.dto.SystemSettingsSaveRequest; import com.tcm.training.admin.system.entity.SystemSettings; import com.tcm.training.admin.system.mapper.SystemSettingsMapper; import org.apache.ibatis.builder.MapperBuilderAssistant; import org.junit.jupiter.api.BeforeAll; 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 static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class SystemSettingsAppServiceTest { @BeforeAll static void initLambdaCache() { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), SystemSettings.class); } @Mock private SystemSettingsMapper mapper; @InjectMocks private SystemSettingsAppService service; @Test void publicStartupPageShouldDefaultToDisabledWithoutSettingsOrImage() { AppStartupPageController controller = new AppStartupPageController(service); AppStartupPageVO empty = controller.current().getData(); assertFalse(empty.isEnabled()); assertEquals("", empty.getImageUrl()); SystemSettings settings = new SystemSettings(); settings.setStartupPageEnabled(true); settings.setStartupPageImageUrl(" "); when(mapper.selectOne(any())).thenReturn(settings); AppStartupPageVO missingImage = controller.current().getData(); assertFalse(missingImage.isEnabled()); assertEquals("", missingImage.getImageUrl()); settings.setStartupPageImageUrl(" https://example.com/start.png "); AppStartupPageVO enabled = controller.current().getData(); assertTrue(enabled.isEnabled()); assertEquals("https://example.com/start.png", enabled.getImageUrl()); } @Test void saveShouldRejectEnabledPageWithoutImage() { SystemSettingsSaveRequest request = new SystemSettingsSaveRequest(); request.setStartupPageEnabled(true); request.setStartupPageImageUrl(" "); assertThrows(IllegalArgumentException.class, () -> service.saveCurrent(request)); verify(mapper, never()).insert(any()); } @Test void saveShouldPersistDisabledDefaultAndEmptyImage() { SystemSettingsSaveRequest request = new SystemSettingsSaveRequest(); request.setServicePhone(" 123 "); request.setServiceOnlineTime(" 09:00-18:00 "); request.setBackupCycleDays(7); request.setMemberExpireRemindDays(3); service.saveCurrent(request); org.mockito.ArgumentCaptor captor = org.mockito.ArgumentCaptor.forClass(SystemSettings.class); verify(mapper).insert(captor.capture()); assertFalse(captor.getValue().getStartupPageEnabled()); assertEquals("", captor.getValue().getStartupPageImageUrl()); } }