“mitao”
2026-03-27 cde5977f64ff1dfa928d1076c059e8865c02d70b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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<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 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());
    }
}