Files
SpotiFLAC-Mobile/test/download_start_policy_test.dart
T

93 lines
2.5 KiB
Dart

import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/services/platform_bridge.dart';
void main() {
group('download storage recovery', () {
test('requires reauthorization instead of redirecting SAF downloads', () {
expect(
storageWriteRecoveryFor(useSaf: true),
StorageWriteRecovery.requestSafAccess,
);
});
test('keeps automatic fallback for app-managed folders', () {
expect(
storageWriteRecoveryFor(useSaf: false),
StorageWriteRecovery.useAppFolderFallback,
);
});
});
group('foreground download start policy', () {
test('allows service launch only while the app is resumed', () {
expect(
canStartForegroundDownloadForLifecycle(AppLifecycleState.resumed),
isTrue,
);
expect(
canStartForegroundDownloadForLifecycle(AppLifecycleState.inactive),
isFalse,
);
expect(
canStartForegroundDownloadForLifecycle(AppLifecycleState.paused),
isFalse,
);
expect(canStartForegroundDownloadForLifecycle(null), isFalse);
});
test('recognizes the typed platform denial', () {
expect(
isForegroundServiceStartNotAllowed(
PlatformException(code: foregroundServiceStartNotAllowedCode),
),
isTrue,
);
expect(
isForegroundServiceStartNotAllowed(PlatformException(code: 'ERROR')),
isFalse,
);
});
});
group('native worker stop recovery', () {
test('requeues every in-flight snapshot state after the worker stops', () {
for (final status in const ['preparing', 'downloading', 'finalizing']) {
expect(
nativeWorkerStatusAfterSnapshotStop(
workerRunning: false,
status: status,
),
'queued',
);
}
});
test('preserves terminal states and live worker progress', () {
expect(
nativeWorkerStatusAfterSnapshotStop(
workerRunning: false,
status: 'completed',
),
'completed',
);
expect(
nativeWorkerStatusAfterSnapshotStop(
workerRunning: false,
status: 'failed',
),
'failed',
);
expect(
nativeWorkerStatusAfterSnapshotStop(
workerRunning: true,
status: 'downloading',
),
'downloading',
);
});
});
}