64 lines
1.8 KiB
Dart
64 lines
1.8 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:kooltap/app/app_lifecycle_lock.dart';
|
|
|
|
void main() {
|
|
late DateTime now;
|
|
late int lockCount;
|
|
|
|
AppLifecycleLockObserver observer({bool Function()? shouldLock}) {
|
|
return AppLifecycleLockObserver(
|
|
onLock: () => lockCount++,
|
|
shouldLock: shouldLock,
|
|
clock: () => now,
|
|
);
|
|
}
|
|
|
|
setUp(() {
|
|
now = DateTime(2026, 1, 1, 20);
|
|
lockCount = 0;
|
|
});
|
|
|
|
test('locks when the app returns after the grace period', () {
|
|
final lock = observer();
|
|
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.inactive);
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.hidden);
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.paused);
|
|
now = now.add(const Duration(seconds: 30));
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.resumed);
|
|
|
|
expect(lockCount, 1);
|
|
});
|
|
|
|
test('does not lock after a short trip to the background', () {
|
|
final lock = observer();
|
|
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.paused);
|
|
now = now.add(const Duration(seconds: 10));
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.resumed);
|
|
|
|
expect(lockCount, 0);
|
|
});
|
|
|
|
test('does not lock when only inactive', () {
|
|
final lock = observer();
|
|
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.inactive);
|
|
now = now.add(const Duration(minutes: 5));
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.resumed);
|
|
|
|
expect(lockCount, 0);
|
|
});
|
|
|
|
test('does not lock when auto-lock is disabled', () {
|
|
final lock = observer(shouldLock: () => false);
|
|
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.paused);
|
|
now = now.add(const Duration(minutes: 5));
|
|
lock.didChangeAppLifecycleState(AppLifecycleState.resumed);
|
|
|
|
expect(lockCount, 0);
|
|
});
|
|
}
|