feat(explore): Explore tab with catalog detail, search, and Seerr requests

This commit is contained in:
edde746
2026-07-10 07:10:15 +02:00
parent f94b8c6586
commit 04daf89a20
25 changed files with 3403 additions and 250 deletions
+35
View File
@@ -41,5 +41,40 @@ void main() {
NavigationTabId.discover,
);
});
test('online falls back to Home when preferred Explore is unavailable', () {
expect(
NavigationTab.resolveDefaultTab(isOffline: false, hasLiveTv: false, preferredStartup: NavigationTabId.explore),
NavigationTabId.discover,
);
expect(
NavigationTab.resolveDefaultTab(
isOffline: false,
hasLiveTv: false,
hasExplore: true,
preferredStartup: NavigationTabId.explore,
),
NavigationTabId.explore,
);
});
});
group('NavigationTab.getVisibleTabs', () {
test('hides Explore until a catalog source is connected', () {
final without = NavigationTab.getVisibleTabs(isOffline: false);
expect(without.map((tab) => tab.id), isNot(contains(NavigationTabId.explore)));
final with_ = NavigationTab.getVisibleTabs(isOffline: false, hasExplore: true, hasLiveTv: true);
final ids = with_.map((tab) => tab.id).toList();
expect(ids, contains(NavigationTabId.explore));
// Explore sits after Live TV, directly before Search.
expect(ids.indexOf(NavigationTabId.explore), ids.indexOf(NavigationTabId.liveTv) + 1);
expect(ids.indexOf(NavigationTabId.explore), ids.indexOf(NavigationTabId.search) - 1);
});
test('Explore is online-only', () {
final offline = NavigationTab.getVisibleTabs(isOffline: true, hasExplore: true);
expect(offline.map((tab) => tab.id), isNot(contains(NavigationTabId.explore)));
});
});
}