Files
plezy/test/screens/startup_bind_recovery_test.dart
2026-06-23 05:11:39 +02:00

141 lines
4.4 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/main.dart';
import 'package:plezy/navigation/navigation_tabs.dart';
import 'package:plezy/screens/main_screen.dart';
List<NavigationTabId> _ids(List<NavigationTab> tabs) => tabs.map((tab) => tab.id).toList();
void main() {
group('startup bind recovery', () {
test('enters offline mode only when initial bind failed with no online servers', () {
expect(shouldEnterOfflineModeAfterStartupBind(bindingSucceeded: false, hasOnlineServers: false), isTrue);
expect(shouldEnterOfflineModeAfterStartupBind(bindingSucceeded: true, hasOnlineServers: false), isFalse);
expect(shouldEnterOfflineModeAfterStartupBind(bindingSucceeded: false, hasOnlineServers: true), isFalse);
});
test('retries active profile bind when reconnect has no visible servers', () {
expect(
shouldRetryActiveProfileBindAfterReconnect(
hasActiveProfile: true,
hasVisibleConnectedServers: false,
hasManagerOnlineServers: true,
hasKnownOfflineServers: false,
),
isTrue,
);
expect(
shouldRetryActiveProfileBindAfterReconnect(
hasActiveProfile: true,
hasVisibleConnectedServers: false,
hasManagerOnlineServers: false,
hasKnownOfflineServers: false,
),
isTrue,
);
expect(
shouldRetryActiveProfileBindAfterReconnect(
hasActiveProfile: true,
hasVisibleConnectedServers: true,
hasManagerOnlineServers: true,
hasKnownOfflineServers: false,
),
isFalse,
);
expect(
shouldRetryActiveProfileBindAfterReconnect(
hasActiveProfile: false,
hasVisibleConnectedServers: false,
hasManagerOnlineServers: true,
hasKnownOfflineServers: false,
),
isFalse,
);
expect(
shouldRetryActiveProfileBindAfterReconnect(
hasActiveProfile: true,
hasVisibleConnectedServers: false,
hasManagerOnlineServers: false,
hasKnownOfflineServers: true,
),
isFalse,
);
});
test('explicit offline startup stays offline until a visible server connects', () {
expect(
shouldRenderMainScreenOffline(
providerOffline: false,
startupOfflineUntilConnected: true,
hasVisibleConnectedServers: false,
),
isTrue,
);
expect(
shouldRenderMainScreenOffline(
providerOffline: false,
startupOfflineUntilConnected: true,
hasVisibleConnectedServers: true,
),
isFalse,
);
expect(
shouldRenderMainScreenOffline(
providerOffline: true,
startupOfflineUntilConnected: false,
hasVisibleConnectedServers: true,
),
isTrue,
);
});
});
group('main screen bottom navigation tabs', () {
test('mobile online hides Settings when another tab is active', () {
final tabs = mainScreenBottomNavigationTabs(
visibleTabs: allNavigationTabs,
isMobile: true,
isOffline: false,
currentTab: NavigationTabId.discover,
);
expect(_ids(tabs), isNot(contains(NavigationTabId.settings)));
});
test('mobile offline includes Downloads and Settings', () {
final offlineTabs = allNavigationTabs
.where((tab) => tab.id == NavigationTabId.downloads || tab.id == NavigationTabId.settings)
.toList();
final tabs = mainScreenBottomNavigationTabs(
visibleTabs: offlineTabs,
isMobile: true,
isOffline: true,
currentTab: NavigationTabId.downloads,
);
expect(_ids(tabs), [NavigationTabId.downloads, NavigationTabId.settings]);
});
test('mobile online keeps Settings visible when it is selected', () {
final tabs = mainScreenBottomNavigationTabs(
visibleTabs: allNavigationTabs,
isMobile: true,
isOffline: false,
currentTab: NavigationTabId.settings,
);
expect(_ids(tabs), contains(NavigationTabId.settings));
});
test('non-mobile returns all visible tabs unchanged', () {
final tabs = mainScreenBottomNavigationTabs(
visibleTabs: allNavigationTabs,
isMobile: false,
isOffline: false,
currentTab: NavigationTabId.discover,
);
expect(tabs, same(allNavigationTabs));
});
});
}