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.assertNull;
|
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<AppVersionConfig> 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 checkUpdateShouldUseVersionNoWhenVersionCodeIsNotAligned() {
|
AppVersionConfig latest = new AppVersionConfig();
|
latest.setVersionNo("1.0.12");
|
latest.setVersionCode(12);
|
latest.setAndroidFileUrl("https://cdn.test/app-android.apk");
|
latest.setForceUpdate(0);
|
latest.setUpdateNotice("新增版本内容");
|
when(appVersionConfigMapper.selectOne(any())).thenReturn(latest);
|
|
AppVersionCheckVO result = appVersionSettingsAppService.checkUpdate("ANDROID", 111, "1.0.11");
|
|
assertTrue(result.getHasUpdate());
|
assertEquals("1.0.12", result.getLatestVersionNo());
|
assertEquals("https://cdn.test/app-android.apk", result.getDownloadUrl());
|
}
|
|
@Test
|
void checkUpdateShouldReturnFalseWhenPlatformPackageIsMissing() {
|
AppVersionConfig latest = new AppVersionConfig();
|
latest.setVersionNo("1.0.12");
|
latest.setVersionCode(12);
|
latest.setAndroidFileUrl("https://cdn.test/app-android.apk");
|
latest.setForceUpdate(0);
|
latest.setUpdateNotice("新增版本内容");
|
when(appVersionConfigMapper.selectOne(any())).thenReturn(latest);
|
|
AppVersionCheckVO result = appVersionSettingsAppService.checkUpdate("IOS", 1, "1.0.1");
|
|
assertFalse(result.getHasUpdate());
|
assertNull(result.getDownloadUrl());
|
}
|
|
@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());
|
assertNull(result.getDownloadUrl());
|
}
|
}
|