import 'dart:async'; import 'package:angel3_client/base_angel_client.dart'; import 'dart:convert'; import 'package:http/src/base_client.dart' as http; import 'package:http/src/base_request.dart' as http; import 'package:http/src/streamed_response.dart' as http; Future read(Stream> stream) => stream.transform(utf8.decoder).join(); class MockAngel extends BaseAngelClient { @override final SpecClient client = SpecClient(); MockAngel() : super(SpecClient(), 'http://localhost:3000'); @override Stream authenticateViaPopup(String url, {String eventName = 'token'}) { throw UnsupportedError('Nope'); } } class SpecClient extends http.BaseClient { Spec? _spec; Spec? get spec => _spec; @override Future send(http.BaseRequest request) { _spec = Spec(request, request.method, request.url.path, request.headers, request.contentLength); dynamic data = {'text': 'Clean your room!', 'completed': true}; if (request.url.path.contains('auth')) { data = { 'token': '', 'data': {'username': 'password'} }; } else if (request.url.path == '/api/todos' && request.method == 'GET') { data = [data]; } return Future.value(http.StreamedResponse( Stream>.fromIterable([utf8.encode(json.encode(data))]), 200, headers: { 'content-type': 'application/json', }, )); } } class Spec { final http.BaseRequest request; final String method, path; final Map headers; final int? contentLength; Spec(this.request, this.method, this.path, this.headers, this.contentLength); @override String toString() { return { 'method': method, 'path': path, 'headers': headers, 'content_length': contentLength, }.toString(); } }