package com.tcm.training.admin.app.home.service;
|
|
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
import com.tcm.training.admin.app.home.vo.AppHomeLiveCourseVO;
|
import com.tcm.training.admin.app.live.support.AppLiveCourseDisplaySupport;
|
import com.tcm.training.admin.live.entity.LiveCourse;
|
import com.tcm.training.admin.live.entity.LiveSession;
|
import com.tcm.training.admin.live.mapper.LiveCourseMapper;
|
import com.tcm.training.admin.live.mapper.LiveSessionMapper;
|
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
import java.time.LocalDateTime;
|
import java.util.Arrays;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.when;
|
|
/**
|
* APP 首页养生直播聚合服务测试。
|
*/
|
@ExtendWith(MockitoExtension.class)
|
class AppHomeLiveCourseServiceTest {
|
|
@BeforeAll
|
static void initLambdaCache() {
|
MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), "");
|
TableInfoHelper.initTableInfo(assistant, LiveCourse.class);
|
TableInfoHelper.initTableInfo(assistant, LiveSession.class);
|
}
|
|
@Mock
|
private LiveCourseMapper liveCourseMapper;
|
|
@Mock
|
private LiveSessionMapper liveSessionMapper;
|
|
private AppHomeLiveCourseService appHomeLiveCourseService;
|
|
/**
|
* 每个用例前重建被测首页服务。
|
*/
|
@BeforeEach
|
void setUp() {
|
appHomeLiveCourseService = new AppHomeLiveCourseService(
|
liveCourseMapper,
|
liveSessionMapper,
|
new AppLiveCourseDisplaySupport()
|
);
|
}
|
|
/**
|
* 首页课程状态应忽略历史残留的直播中场次,只认时间线上的当前有效场次。
|
*/
|
@Test
|
void listHomeLiveCoursesShouldIgnoreHistoricalLivingSession() {
|
LiveCourse endedCourse = buildCourse(2L, "养生直播课程2");
|
LiveCourse livingCourse = buildCourse(1L, "这里是养生功法直播间");
|
LiveSession endedCourseStaleLiving = buildSession(2001L, 2L, LocalDateTime.now().minusDays(1),
|
AppLiveCourseDisplaySupport.SESSION_STATUS_LIVING, "https://cdn.example/stale.m3u8");
|
LiveSession endedCourseLatestEnded = buildSession(2002L, 2L, LocalDateTime.now().minusHours(2),
|
AppLiveCourseDisplaySupport.SESSION_STATUS_ENDED, "https://cdn.example/ended.m3u8");
|
endedCourseLatestEnded.setActualEndTime(LocalDateTime.now().minusHours(1));
|
LiveSession livingCourseCurrent = buildSession(1001L, 1L, LocalDateTime.now().minusMinutes(5),
|
AppLiveCourseDisplaySupport.SESSION_STATUS_LIVING, "https://cdn.example/current.m3u8");
|
|
when(liveCourseMapper.selectList(any())).thenReturn(Arrays.asList(endedCourse, livingCourse));
|
when(liveSessionMapper.selectList(any())).thenReturn(Arrays.asList(
|
endedCourseStaleLiving,
|
endedCourseLatestEnded,
|
livingCourseCurrent
|
));
|
|
List<AppHomeLiveCourseVO> cards = appHomeLiveCourseService.listHomeLiveCourses();
|
|
assertEquals(2, cards.size());
|
assertEquals(Long.valueOf(1L), cards.get(0).getCourseId());
|
assertEquals("LIVING", cards.get(0).getDisplayStatus());
|
assertEquals(Long.valueOf(1001L), cards.get(0).getCurrentSessionId());
|
assertEquals("https://cdn.example/current.m3u8", cards.get(0).getVideoUrl());
|
|
assertEquals(Long.valueOf(2L), cards.get(1).getCourseId());
|
assertEquals("ENDED", cards.get(1).getDisplayStatus());
|
assertNull(cards.get(1).getCurrentSessionId());
|
assertNull(cards.get(1).getVideoUrl());
|
}
|
|
/**
|
* 构造首页直播课程测试数据。
|
*/
|
private LiveCourse buildCourse(Long courseId, String title) {
|
LiveCourse course = new LiveCourse();
|
course.setId(courseId);
|
course.setTitle(title);
|
course.setCoverImg("https://cdn.example/cover-" + courseId + ".png");
|
course.setBannerImgs(Arrays.asList("https://cdn.example/live-" + courseId + ".png"));
|
course.setStatus(1);
|
course.setDeleted(0);
|
return course;
|
}
|
|
/**
|
* 构造首页直播场次测试数据。
|
*/
|
private LiveSession buildSession(Long sessionId, Long courseId, LocalDateTime startTime, Integer liveStatus, String videoUrl) {
|
LiveSession session = new LiveSession();
|
session.setId(sessionId);
|
session.setLiveCourseId(courseId);
|
session.setStartTime(startTime);
|
session.setLiveStatus(liveStatus);
|
session.setVideoUrl(videoUrl);
|
return session;
|
}
|
}
|