[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

+95
View File
@@ -0,0 +1,95 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:reelbox/data/api_service.dart';
import 'package:reelbox/data/models.dart';
import 'package:shared_preferences/shared_preferences.dart';
class _LiveNetwork extends HttpOverrides {}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test(
'deployed Iran Catalogue works through the real app API client',
() async {
// Explicit opt-in live test; only local preferences are mocked.
// ignore: invalid_use_of_visible_for_testing_member
SharedPreferences.setMockInitialValues({});
await HttpOverrides.runWithHttpOverrides(() async {
final api = ApiService();
await api.setBaseUrl('https://reelbox.dartty.top/api/');
await api.initialize();
expect(api.baseUrl, 'https://reelbox.dartty.top/api/');
final home = await api.home();
final genres = await api.genres();
final countries = await api.countries();
final movies = await api.catalog();
final series = await api.catalog(kind: 'serie');
expect(home['genres'], isNotEmpty);
expect(genres, isNotEmpty);
expect(countries, isNotEmpty);
expect(movies, isNotEmpty);
expect(series, isNotEmpty);
TitleRecord? film;
for (final candidate in movies.take(5)) {
final detail = await api.poster(candidate.id);
if (detail.sources.isNotEmpty) {
film = detail;
break;
}
}
expect(film, isNotNull);
final seasons = await api.seasons(series.first.id);
expect(seasons, isNotEmpty);
final episodeSources = seasons
.expand((s) => s.episodes)
.expand((e) => e.sources);
expect(episodeSources, isNotEmpty);
final allSources = [...film!.sources, ...episodeSources];
for (final source in allSources) {
final uri = Uri.parse(source.url);
expect(uri.scheme, anyOf('http', 'https'));
expect(uri.host, isNot('reelbox.dartty.top'));
expect(uri.host, isNot('87.107.110.187'));
}
final search = await api.search('Matrix', english: true);
final recommendations = await api.bestRandom();
final curated = await api.curatedLinks();
expect(search, isNotEmpty);
expect(recommendations, isNotEmpty);
if (curated.isNotEmpty) {
expect(
await api.curatedContent(curated.first['link'] as String),
isNotEmpty,
);
}
expect(await api.comments(film.id), isEmpty);
final restored = ApiService();
await restored.initialize(discover: false);
expect(restored.baseUrl, api.baseUrl);
stdout.writeln(
jsonEncode({
'api_base': api.baseUrl,
'genre_count': genres.length,
'country_count': countries.length,
'movie_page_count': movies.length,
'series_page_count': series.length,
'movie_id': film.id,
'movie_sources': film.sources.length,
'series_id': series.first.id,
'season_count': seasons.length,
'episode_sources': episodeSources.length,
'search_count': search.length,
'recommendations': recommendations.length,
'curated_groups': curated.length,
'all_media_sources_direct': true,
'api_choice_restored': true,
'media_downloaded': false,
}),
);
}, _LiveNetwork());
},
timeout: const Timeout(Duration(minutes: 3)),
);
}