shinnosuke
2026-09-18 c2f0ec3b3891bc177bdc58c2a111ab9c4fea911d
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
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.Mockito.when;
 
import java.util.LinkedHashMap;
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 MedicalPackagePortalServiceTests {
 
    @Mock
    private JdbcTemplate jdbc;
 
    @InjectMocks
    private MedicalPackagePortalService service;
 
    @Test
    void detailUsesFirstUploadedDetailImageInsteadOfCover() {
        givenPackageRow("[\"/uploads/detail-1.jpg\",\"/uploads/detail-2.jpg\"]", "/uploads/cover.jpg");
 
        assertThat(service.detail(38L)).containsEntry("heroImage", "/uploads/detail-1.jpg");
    }
 
    @Test
    void detailFallsBackToCoverWhenDetailImagesAreEmpty() {
        givenPackageRow("[]", "/uploads/cover.jpg");
 
        assertThat(service.detail(38L)).containsEntry("heroImage", "/uploads/cover.jpg");
    }
 
    @Test
    void detailFallsBackToCoverWhenDetailImagesAreNotConfigured() {
        givenPackageRow(null, "/uploads/cover.jpg");
 
        assertThat(service.detail(38L)).containsEntry("heroImage", "/uploads/cover.jpg");
    }
 
    private void givenPackageRow(String productImages, String coverUrl) {
        Map<String, Object> row = new LinkedHashMap<>();
        row.put("package_id", 38L);
        row.put("merchant_id", 126L);
        row.put("package_name", "查血");
        row.put("hero_image", coverUrl);
        row.put("product_images", productImages);
        row.put("free_status", 0);
        row.put("applicable_cards", "");
        row.put("open_time", "");
        row.put("stock", 10);
        row.put("status", 1);
        row.put("unavailable_reason", "");
        row.put("detail_text", "[{\"name\":\"查血\",\"meaning\":\"检查血脂\",\"gender\":[\"男\",\"女\"]}]");
        row.put("hospital_name", "体检医院-卡");
        row.put("hospital_address", "天府新谷");
        row.put("hospital_mobile", "13800000000");
        row.put("hospital_latitude", 26.5);
        row.put("hospital_longitude", 101.7);
        when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of(row));
    }
}