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

74 lines
2.2 KiB
Dart

// 消息通知模块模型解析单测
import 'package:flutter_test/flutter_test.dart';
import 'package:video_app/services/notification_service.dart';
void main() {
group('NotificationItem', () {
test('fromJson 解析(服务端字段)', () {
final n = NotificationItem.fromJson(const {
'id': 701,
'type': 1,
'title': '视频审核通过',
'content': '你发布的《海边日落》已通过审核',
'biz_id': '88001',
'is_read': false,
'created_at': '2026-10-14 15:00:00',
});
expect(n.id, 701);
expect(n.type, 1);
expect(n.typeLabel, '审核');
expect(n.isRead, isFalse);
expect(n.videoId, 88001);
});
test('缺省兜底 + 类型标签', () {
final n = NotificationItem.fromJson(const {'id': 1, 'title': '系统'});
expect(n.type, 3); // 缺省按公告
expect(n.typeLabel, '公告');
expect(n.bizId, '');
expect(n.videoId, isNull);
// 未知类型
final x = NotificationItem.fromJson(const {'id': 2, 'type': 99});
expect(x.typeLabel, '通知');
// 非审核类型不解析 videoId
final w = NotificationItem.fromJson(
const {'id': 3, 'type': 2, 'biz_id': 'W20261014001'},
);
expect(w.videoId, isNull);
});
test('copyWith 标记已读', () {
const n = NotificationItem(id: 1, type: 4, title: '回复');
final read = n.copyWith(isRead: true);
expect(read.isRead, isTrue);
expect(read.typeLabel, '回复');
expect(n.isRead, isFalse); // 原对象不可变
});
});
group('NotificationsPage', () {
test('分页解析', () {
final p = NotificationsPage.fromJson(const {
'total': 42,
'list': [
{'id': 1, 'type': 1, 'title': 'a', 'is_read': true},
{'id': 2, 'type': 4, 'title': 'b', 'is_read': false},
],
});
expect(p.total, 42);
expect(p.items.length, 2);
expect(p.items[0].isRead, isTrue);
expect(p.items[1].typeLabel, '回复');
});
test('空响应兜底', () {
final p = NotificationsPage.fromJson(const {});
expect(p.total, 0);
expect(p.items, isEmpty);
});
});
}