import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:moonwell_launcher/features/launcher/data/launcher_api_client.dart'; void main() { test('requests a Vanilla game ticket with bearer authentication', () async { final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0); addTearDown(() => server.close(force: true)); final client = _LocalLauncherApiClient(server.port); final ticketFuture = client.issueGameTicket('test-launcher-token'); final request = await server.first; expect(request.method, 'POST'); expect(request.uri.path, '/api/launcher/game-ticket'); expect( request.headers.value(HttpHeaders.authorizationHeader), 'Bearer test-launcher-token', ); expect(jsonDecode(await utf8.decoder.bind(request).join()), { 'client_build': 5875, }); request.response.headers.contentType = ContentType.json; request.response.write( jsonEncode({ 'account': 'PLAYERONE', 'ticket': 'A1B2C3D4E5F6G7H8', 'expires_at': DateTime.now() .toUtc() .add(const Duration(seconds: 60)) .toIso8601String(), }), ); await request.response.close(); final ticket = await ticketFuture; expect(ticket.account, 'PLAYERONE'); expect(ticket.ticket, 'A1B2C3D4E5F6G7H8'); }); } class _LocalLauncherApiClient extends LauncherApiClient { _LocalLauncherApiClient(this.port); final int port; @override String get apiBaseUrl => 'http://127.0.0.1:$port'; }