// Author: fruit.com.cn import 'package:flutter_test/flutter_test.dart'; import 'package:fruitshorts/core/data/models/play_ticket.dart'; void main() { test('should_parse_all_qualities_when_ticket_returns_multiple_tracks', () { final ticket = PlayTicket.fromJson(const { 'episodeId': '12', 'accessible': true, 'accessType': 'FREE', 'playUrl': '/files/episode/12.m3u8?e=1&s=abc', 'qualities': ['AUTO', '720p', '1080p'], 'tracks': [ {'quality': 'AUTO', 'playUrl': '/files/episode/12.m3u8?e=1&s=abc'}, {'quality': '720p', 'playUrl': '/files/transcoded/12/720p/index.m3u8?s=1'}, ], 'likeCount': '17', 'commentCount': 5, }); expect(ticket.qualities, ['AUTO', '720p', '1080p']); expect(ticket.tracks[1].playUrl, contains('/720p/index.m3u8')); expect(ticket.likeCount, 17); expect(ticket.commentCount, 5); expect( siblingRenditionUrl(ticket.playUrl, '720P'), isNull, ); expect( siblingRenditionUrl( '/files/transcoded/9/master.m3u8?e=1&s=abc', '720P', ), '/files/transcoded/9/720p/index.m3u8?e=1&s=abc', ); }); test('should_default_to_empty_qualities_when_field_is_missing', () { final ticket = PlayTicket.fromJson(const { 'episodeId': '12', 'accessible': true, 'accessType': 'FREE', 'playUrl': '/files/episode/12.mp4', }); expect(ticket.qualities, isEmpty); }); }