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.system.dto.AppVersionCreateRequest; import com.tcm.training.admin.system.entity.AppVersionConfig; import com.tcm.training.admin.system.mapper.AppVersionConfigMapper; import com.tcm.training.admin.system.vo.AppVersionCheckVO; import com.tcm.training.admin.system.vo.AppVersionDetailVO; 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.ArgumentCaptor; import org.mockito.Captor; 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.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class AppVersionSettingsAppServiceTest { @BeforeAll static void initLambdaCache() { MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), ""); TableInfoHelper.initTableInfo(assistant, AppVersionConfig.class); } @Mock private AppVersionConfigMapper appVersionConfigMapper; @InjectMocks private AppVersionSettingsAppService appVersionSettingsAppService; @Captor private ArgumentCaptor appVersionCaptor; @Test void createShouldIncrementVersionCodeFromLatestRecord() { AppVersionConfig latest = new AppVersionConfig(); latest.setId(9L); latest.setVersionCode(3); when(appVersionConfigMapper.selectOne(any())).thenReturn(latest); AppVersionCreateRequest request = new AppVersionCreateRequest(); request.setVersionNo("1.0.3"); request.setAndroidFileUrl("https://cdn.test/app-android.apk"); request.setAndroidFileName("app-android.apk"); request.setIosFileUrl("https://cdn.test/app-ios.ipa"); request.setIosFileName("app-ios.ipa"); request.setForceUpdate(Boolean.TRUE); request.setUpdateNotice("修复已知问题"); AppVersionDetailVO result = appVersionSettingsAppService.create(request); verify(appVersionConfigMapper).insert(appVersionCaptor.capture()); assertEquals(Integer.valueOf(4), appVersionCaptor.getValue().getVersionCode()); assertEquals(Integer.valueOf(4), result.getVersionCode()); assertTrue(result.getForceUpdate()); } @Test void checkUpdateShouldReturnLatestDownloadForAndroid() { AppVersionConfig latest = new AppVersionConfig(); latest.setVersionNo("1.0.5"); latest.setVersionCode(5); latest.setAndroidFileUrl("https://cdn.test/app-android.apk"); latest.setIosFileUrl("https://cdn.test/app-ios.ipa"); latest.setForceUpdate(1); latest.setUpdateNotice("新增版本内容"); when(appVersionConfigMapper.selectOne(any())).thenReturn(latest); AppVersionCheckVO result = appVersionSettingsAppService.checkUpdate("android", 3); assertTrue(result.getHasUpdate()); assertEquals("1.0.5", result.getLatestVersionNo()); assertEquals(Integer.valueOf(5), result.getLatestVersionCode()); assertEquals("https://cdn.test/app-android.apk", result.getDownloadUrl()); assertTrue(result.getForceUpdate()); } @Test void checkUpdateShouldReturnFalseWhenCurrentVersionIsLatest() { AppVersionConfig latest = new AppVersionConfig(); latest.setVersionNo("1.0.5"); latest.setVersionCode(5); latest.setAndroidFileUrl("https://cdn.test/app-android.apk"); latest.setIosFileUrl("https://cdn.test/app-ios.ipa"); latest.setForceUpdate(0); latest.setUpdateNotice("新增版本内容"); when(appVersionConfigMapper.selectOne(any())).thenReturn(latest); AppVersionCheckVO result = appVersionSettingsAppService.checkUpdate("IOS", 5); assertFalse(result.getHasUpdate()); assertEquals("https://cdn.test/app-ios.ipa", result.getDownloadUrl()); } }