import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:get_it/get_it.dart'; import 'package:holzleitner_api/holzleitner_api.dart'; import 'package:hl_lieferservice/data/network/backend_config.dart'; import 'package:hl_lieferservice/data/network/network_locator.dart'; import 'package:hl_lieferservice/data/network/backend_environment.dart'; void main() { ServerCatalog load() => ServerCatalog.fromJson( jsonDecode(File('assets/hl_server_config.json').readAsStringSync()) as Map, ); test('ausgelieferte Config enthält Produktion (Default) und Test', () { final catalog = load(); expect(catalog.defaultEnvironment.id, 'production'); expect(catalog.byId('production')!.hostAndPort, '192.168.1.9:3000'); expect(catalog.byId('test')!.hostAndPort, '192.168.1.9:3001'); expect(catalog.keycloakClientId, 'holzleitner-app'); }); test('configFor übernimmt Umgebung und globale Keycloak-Daten', () { final catalog = load(); final config = catalog.configFor(catalog.byId('test')!); expect(config.apiBaseUrl, 'http://192.168.1.9:3001'); expect(config.keycloakRedirectUrl, 'holzleitner://oauth2redirect'); }); test('unbekannte Default-Umgebung wird abgelehnt', () { expect( () => ServerCatalog.fromJson({ 'defaultEnvironment': 'nope', 'keycloak': {'clientId': 'c', 'redirectUrl': 'r://x'}, 'environments': [ { 'id': 'a', 'name': 'A', 'apiBaseUrl': 'http://h:1/', 'keycloakIssuerUrl': 'http://k/realms/x', }, ], }), throwsFormatException, ); }); test('registerNetworking ersetzt beim Umgebungswechsel die Instanzen', () { TestWidgetsFlutterBinding.ensureInitialized(); final catalog = load(); final locator = GetIt.asNewInstance(); registerNetworking( locator: locator, config: catalog.configFor(catalog.byId('production')!), ); final firstApi = locator(); registerNetworking( locator: locator, config: catalog.configFor(catalog.byId('test')!), ); expect(locator().apiBaseUrl, 'http://192.168.1.9:3001'); expect(identical(locator(), firstApi), isFalse); expect(locator().dio.options.baseUrl, 'http://192.168.1.9:3001'); }); }