import 'package:flutter_test/flutter_test.dart'; import 'package:jiu_client/core/config/license_copy.dart'; import 'package:jiu_client/models/license.dart'; LicenseInfo _lic(String phase, {int expiredDays = 0, bool permanent = false}) => LicenseInfo( id: 1, type: 'annual', isActive: true, maxDevices: 3, phase: phase, expiresAt: permanent ? null : DateTime.now().subtract(Duration(days: expiredDays)), ); void main() { group('writeBlockedToast', () { test('readonly 阶段文案含过期天数并引导续费', () { final s = LicenseCopy.writeBlockedToast(_lic('readonly', expiredDays: 10)); expect(s, contains('10')); expect(s, contains('只读')); expect(s, contains('设置 → 授权')); }); test('locked 阶段文案标注已锁定', () { final s = LicenseCopy.writeBlockedToast(_lic('locked', expiredDays: 20)); expect(s, contains('20')); expect(s, contains('锁定')); }); }); group('banner', () { test('normal 阶段返回空串', () { expect(LicenseCopy.banner(_lic('normal', permanent: true)), isEmpty); }); test('grace/readonly/locked 各阶段含过期天数', () { expect(LicenseCopy.banner(_lic('grace', expiredDays: 2)), contains('2')); expect( LicenseCopy.banner(_lic('readonly', expiredDays: 9)), contains('只读')); expect( LicenseCopy.banner(_lic('locked', expiredDays: 30)), contains('锁定')); }); }); group('statusText / statusBar', () { test('normal 永久授权', () { final lic = _lic('normal', permanent: true); expect(LicenseCopy.statusText(lic), contains('永久')); expect(LicenseCopy.statusBar(lic, '2099-01-01'), contains('永久')); }); test('readonly 阶段标注只读', () { final lic = _lic('readonly', expiredDays: 9); expect(LicenseCopy.statusText(lic), contains('只读')); expect(LicenseCopy.statusBar(lic, '2024-01-01'), contains('只读')); }); }); group('degradationNotes', () { test('三条说明随阈值联动(含 7 与 15)', () { final notes = LicenseCopy.degradationNotes(); expect(notes.length, 3); expect(notes.join(), contains('${LicenseCopy.graceDays}')); expect(notes.join(), contains('${LicenseCopy.readonlyDays}')); }); }); group('readonlyUserToast', () { test('只读账号提示固定文案', () { expect(LicenseCopy.readonlyUserToast, contains('只读')); }); }); }