test(subscribe): cover subscription calendar (#541)

This commit is contained in:
InfinityPacer
2026-07-17 16:14:24 +08:00
committed by GitHub
parent 36bb99cf06
commit 20f80d0f1f
5 changed files with 500 additions and 3 deletions

View File

@@ -1,7 +1,22 @@
import type { MediaInfo } from '@/api/types'
import type { MediaInfo, TmdbEpisode } from '@/api/types'
let episodeSeed = 0
let mediaSeed = 0
export function createTmdbEpisode(overrides: Partial<TmdbEpisode> = {}): TmdbEpisode {
episodeSeed += 1
return {
air_date: '2026-01-01',
crew: [],
episode_number: episodeSeed,
guest_stars: [],
name: `测试剧集 ${episodeSeed}`,
runtime: 45,
season_number: 1,
...overrides,
}
}
export function createMediaInfo(overrides: Partial<MediaInfo> = {}): MediaInfo {
mediaSeed += 1
return {

View File

@@ -0,0 +1,29 @@
import type { MediaInfo, TmdbEpisode } from '@/api/types'
import { HttpResponse, http, type JsonBodyType } from 'msw'
const API_BASE_URL = 'http://localhost/api/v1/'
export function mediaDetailsHandler(
tmdbId: number,
response: MediaInfo,
status = 200,
onRequest: (url: URL) => void = () => {},
) {
return http.get(new URL(`media/tmdb:${tmdbId}`, API_BASE_URL).href, ({ request }) => {
onRequest(new URL(request.url))
return HttpResponse.json(response as unknown as JsonBodyType, { status })
})
}
export function tmdbSeasonEpisodesHandler(
tmdbId: number,
season: number,
response: TmdbEpisode[],
status = 200,
onRequest: (url: URL) => void = () => {},
) {
return http.get(new URL(`tmdb/${tmdbId}/${season}`, API_BASE_URL).href, ({ request }) => {
onRequest(new URL(request.url))
return HttpResponse.json(response as unknown as JsonBodyType, { status })
})
}