import 'package:flutter_test/flutter_test.dart'; import 'package:worldhopper/models/server.dart'; import 'package:worldhopper/services/server_software/server_software_type.dart'; // Kavita URL detection regex — extracted from KavitaServerSoftware for // isolated testing without needing to construct the full dependency tree. final _kavitaUrlPattern = RegExp( r'/api/opds/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}', ); /// Lightweight detection that mirrors ServerSoftwareService.detect() logic. ServerSoftwareType _detect(Server server) { if (_kavitaUrlPattern.hasMatch(server.url)) return ServerSoftwareType.kavita; return ServerSoftwareType.generic; } Server _server({ String url = 'https://example.com/opds', ServerSoftwareType? softwareType, }) { return Server( id: 's1', name: 'Test Server', url: url, createdAt: DateTime(2024), softwareType: softwareType, ); } void main() { group('detect', () { test('detects Kavita from URL pattern', () { final server = _server( url: 'https://kavita.example.com/api/opds/12345678-1234-1234-1234-123456789abc', ); expect(_detect(server), ServerSoftwareType.kavita); }); test('returns generic for plain OPDS URL', () { final server = _server(url: 'https://example.com/opds'); expect(_detect(server), ServerSoftwareType.generic); }); test('returns generic for non-matching URL', () { final server = _server(url: 'https://example.com/feed.xml'); expect(_detect(server), ServerSoftwareType.generic); }); }); group('getImplementation dispatch', () { test('null softwareType dispatches to generic', () { final server = _server(softwareType: null); final type = server.softwareType ?? ServerSoftwareType.generic; expect(type, ServerSoftwareType.generic); }); test('generic softwareType dispatches to generic', () { final server = _server(softwareType: ServerSoftwareType.generic); final type = server.softwareType ?? ServerSoftwareType.generic; expect(type, ServerSoftwareType.generic); }); test('kavita softwareType dispatches to kavita', () { final server = _server(softwareType: ServerSoftwareType.kavita); final type = server.softwareType ?? ServerSoftwareType.generic; expect(type, ServerSoftwareType.kavita); }); }); }