111 lines
3.3 KiB
Dart
111 lines
3.3 KiB
Dart
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, '');
|
||
});
|
||
});
|
||
}
|