import 'package:flutter_test/flutter_test.dart'; import 'package:video_app/models/video_item.dart'; import 'package:video_app/services/upload_service.dart'; /// 上传发布模块模型解析测试(《03-接口文档》5.5/5.6/5.7/5.8) void main() { group('VideoCategory(5.8 分类列表)', () { test('完整字段解析', () { final c = VideoCategory.fromJson({'category_id': 3, 'name': '生活'}); expect(c.categoryId, 3); expect(c.name, '生活'); }); test('缺字段兜底', () { final c = VideoCategory.fromJson(const {}); expect(c.categoryId, 0); expect(c.name, ''); }); }); group('UploadTokenInfo(5.5 上传凭证)', () { test('server 中转模式解析', () { final t = UploadTokenInfo.fromJson({ 'upload_type': 'server', 'object_key': 'upload/tmp/20261015/abc.mp4', 'upload_url': '/videos/upload/file', }); expect(t.uploadType, 'server'); expect(t.objectKey, 'upload/tmp/20261015/abc.mp4'); expect(t.uploadUrl, '/videos/upload/file'); }); test('缺字段兜底', () { final t = UploadTokenInfo.fromJson(const {}); expect(t.uploadType, ''); expect(t.objectKey, ''); expect(t.uploadUrl, ''); }); }); group('UploadFileResult(5.5 中转上传)', () { test('完整字段解析', () { final r = UploadFileResult.fromJson({ 'object_key': 'upload/tmp/20261015/abc.mp4', 'url': '/static/upload/tmp/20261015/abc.mp4', 'file_size': 204800, }); expect(r.objectKey, 'upload/tmp/20261015/abc.mp4'); expect(r.url, '/static/upload/tmp/20261015/abc.mp4'); expect(r.fileSize, 204800); }); test('缺字段兜底', () { final r = UploadFileResult.fromJson(const {}); expect(r.objectKey, ''); expect(r.url, ''); expect(r.fileSize, 0); }); }); group('PublishResult(5.6 发布结果)', () { test('完整字段解析(待审核 + 会员优先)', () { final r = PublishResult.fromJson({ 'video_id': 113, 'status': 1, 'status_text': '待审核', 'is_priority': true, }); expect(r.videoId, 113); expect(r.status, 1); expect(r.statusText, '待审核'); expect(r.isPriority, isTrue); }); test('缺字段兜底', () { final r = PublishResult.fromJson(const {}); expect(r.videoId, 0); expect(r.status, 0); expect(r.statusText, ''); expect(r.isPriority, isFalse); }); }); group('VideoItem 作品状态扩展(5.7 我的作品)', () { Map baseJson() => { 'video_id': 113, 'title': '测试视频', 'author': {'user_id': 4, 'nickname': '作者', 'avatar_url': ''}, }; test('带状态字段解析', () { final v = VideoItem.fromJson({ ...baseJson(), 'status': 3, 'status_text': '拒绝', 'reject_reason': '内容违规', }); expect(v.status, 3); expect(v.statusText, '拒绝'); expect(v.rejectReason, '内容违规'); }); test('无状态字段(Feed/收藏等列表)兜底 -1', () { final v = VideoItem.fromJson(baseJson()); expect(v.status, -1); expect(v.statusText, ''); expect(v.rejectReason, ''); }); }); }