Files
video/app/test/upload_models_test.dart
2026-10-15 20:36:59 +08:00

111 lines
3.3 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<String, dynamic> 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, '');
});
});
}