Files
kooltab/test/app_lifecycle_lock_test.dart
T
2026-10-19 21:41:34 +02:00

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);
});
}