102 lines
3.1 KiB
Dart
102 lines
3.1 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:fruitshorts/core/data/models/account_device.dart';
|
|
import 'package:fruitshorts/core/data/models/account_profile.dart';
|
|
import 'package:fruitshorts/pages/account/account_deactivate_logic.dart';
|
|
import 'package:fruitshorts/pages/account/account_devices_logic.dart';
|
|
import 'package:fruitshorts/pages/account/account_export_logic.dart';
|
|
import 'package:fruitshorts/pages/account/account_profile_logic.dart';
|
|
|
|
import '../support/fake_account_repository.dart';
|
|
|
|
void main() {
|
|
test('should_update_profile_and_notify_auth_when_saved', () async {
|
|
final repository = FakeAccountRepository();
|
|
AccountProfile? applied;
|
|
final logic = AccountProfileLogic(
|
|
repository,
|
|
onProfileUpdated: (profile) async => applied = profile,
|
|
);
|
|
await logic.load();
|
|
|
|
final ok = await logic.save(
|
|
nickname: ' Nadia Baru ',
|
|
gender: 'unknown',
|
|
birthday: '1999-01-02',
|
|
);
|
|
|
|
expect(ok, isTrue);
|
|
expect(repository.lastUpdate?.nickname, 'Nadia Baru');
|
|
expect(repository.lastUpdate?.gender, 'unknown');
|
|
expect(repository.lastUpdate?.birthday, '1999-01-02');
|
|
expect(applied?.nickname, 'Nadia Baru');
|
|
});
|
|
|
|
test('should_load_devices_and_keep_the_page_read_only', () async {
|
|
final repository = FakeAccountRepository(
|
|
devices: const [
|
|
AccountDevice(
|
|
id: '1',
|
|
deviceId: 'd-device-1234',
|
|
platform: 'IOS',
|
|
deviceModel: 'iPhone 15',
|
|
status: 'active',
|
|
),
|
|
],
|
|
);
|
|
final logic = AccountDevicesLogic(repository);
|
|
|
|
await logic.load();
|
|
|
|
expect(logic.devices.single.deviceModel, 'iPhone 15');
|
|
expect(logic.loading, isFalse);
|
|
expect(logic.error, isNull);
|
|
});
|
|
|
|
test('should_copy_complete_export_json_when_requested', () async {
|
|
final repository = FakeAccountRepository();
|
|
String copied = '';
|
|
final logic = AccountExportLogic(
|
|
repository,
|
|
copyText: (value) async => copied = value,
|
|
);
|
|
await logic.load();
|
|
|
|
final ok = await logic.copy();
|
|
|
|
expect(ok, isTrue);
|
|
expect(copied, contains('"credentials"'));
|
|
expect(copied, contains('n***@example.com'));
|
|
});
|
|
|
|
test(
|
|
'should_clear_session_and_keep_schedule_when_deactivation_succeeds',
|
|
() async {
|
|
final repository = FakeAccountRepository();
|
|
var cleared = false;
|
|
final logic = AccountDeactivateLogic(
|
|
repository,
|
|
clearSession: () async => cleared = true,
|
|
);
|
|
|
|
final ok = await logic.request('不再使用');
|
|
|
|
expect(ok, isTrue);
|
|
expect(repository.lastDeactivateReason, '不再使用');
|
|
expect(logic.scheduledAt, DateTime(2026, 11, 3, 9, 30));
|
|
expect(cleared, isTrue);
|
|
},
|
|
);
|
|
|
|
test('should_show_backend_message_when_cancel_deactivation_fails', () async {
|
|
final repository = FakeAccountRepository()..failCancel = true;
|
|
final logic = AccountDeactivateLogic(repository, clearSession: () async {});
|
|
|
|
final ok = await logic.cancel();
|
|
|
|
expect(ok, isFalse);
|
|
expect(logic.actionMessage, '没有待处理的注销申请');
|
|
});
|
|
}
|