141 lines
4.4 KiB
Dart
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));
|
|
});
|
|
});
|
|
}
|