[verified] Publish ReelBox source under GPLv3

This commit is contained in:
Hermes committed 2026-11-12 23:41:13 +00:00
commit db2b505ca3
445 files changed
+105274

No files matched your search

+114
View File
@@ -0,0 +1,114 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:reelbox/data/models.dart';
import 'package:reelbox/ui/catalog.dart';
import 'catalog_widget_test.dart' show CatalogApi, mountCatalog;
class DiscoveryApi extends CatalogApi {
@override
Future<List<Map<String, dynamic>>> actors({
int page = 1,
String search = '',
}) async => [];
@override
Future<List<Map<String, dynamic>>> playlists({
bool mine = false,
String userId = '',
int page = 1,
}) async => [];
@override
Future<List<Map<String, dynamic>>> curatedLinks({bool best = false}) async =>
[];
@override
Future<List<TitleRecord>> bestRandom({
bool byYear = false,
int page = 1,
}) async => [];
}
Future<void> openDirectory(WidgetTester tester) async {
await tester.tap(find.byTooltip('Explore more'));
await tester.pumpAndSettle();
}
void main() {
for (final preset in [
('Best titles', 'mixed', 0, 'rating'),
('Newest titles', 'mixed', 0, 'created'),
('Popular titles', 'mixed', 0, 'rating'),
('Top 250 movies', 'movie', 0, 'imdb'),
('Top 250 series', 'serie', 0, 'imdb'),
('Korean series', 'serie', 36, 'created'),
('Chinese / Japanese series', 'serie', 37, 'created'),
('Turkish series', 'serie', 35, 'created'),
('Indian series', 'serie', 38, 'created'),
('Indian movies', 'movie', 38, 'created'),
('Most-viewed movies', 'movie', 0, 'views'),
('Most-viewed series', 'serie', 0, 'views'),
]) {
testWidgets(
'${preset.$1} ${preset.$4 == 'views' ? 'is unavailable on Iran' : 'uses the Iran catalog contract'}',
(tester) async {
final api = DiscoveryApi();
await mountCatalog(tester, api, const DiscoverPage());
await openDirectory(tester);
if (preset.$4 == 'views') {
final list = tester.widget<ListView>(find.byType(ListView));
final children =
(list.childrenDelegate as SliverChildListDelegate).children;
expect(
children.whereType<ListTile>().map(
(tile) => (tile.title as Text).data,
),
isNot(contains(preset.$1)),
);
expect(api.catalogCalls, isEmpty);
} else {
await tester.scrollUntilVisible(find.text(preset.$1), 300);
await tester.ensureVisible(find.text(preset.$1));
await tester.pumpAndSettle();
await tester.tap(find.text(preset.$1));
await tester.pumpAndSettle();
expect(api.catalogCalls, [
for (final page in [0, 1, 2])
{
'kind': preset.$2,
'genre': preset.$3,
'country': 0,
'order': preset.$4,
'page': page,
},
]);
}
},
);
}
for (final entry in [
('Actors', ActorsPage),
('Editor picks', CuratedPage),
('Best collections', CuratedPage),
('Best by year', RecommendationsPage),
]) {
testWidgets('Discover reaches ${entry.$1}', (tester) async {
await mountCatalog(tester, DiscoveryApi(), const DiscoverPage());
await openDirectory(tester);
await tester.scrollUntilVisible(find.text(entry.$1), 300);
await tester.ensureVisible(find.text(entry.$1));
await tester.pumpAndSettle();
await tester.tap(find.text(entry.$1));
await tester.pumpAndSettle();
expect(find.byType(entry.$2), findsOneWidget);
if (entry.$1 == 'Best by year') {
expect(
tester
.widget<RecommendationsPage>(find.byType(RecommendationsPage))
.byYear,
isTrue,
);
}
});
}
}