| OLD | NEW |
| (Empty) | |
| 1 library angular.playback.playback_http; |
| 2 |
| 3 import 'dart:async'; |
| 4 import 'dart:convert' show JSON; |
| 5 import 'dart:html'; |
| 6 |
| 7 import 'package:angular/core_dom/module.dart'; |
| 8 import 'package:angular/mock/module.dart' as mock; |
| 9 |
| 10 import 'playback_data.dart' as playback_data; |
| 11 |
| 12 class PlaybackHttpBackendConfig { |
| 13 requestKey(String url, |
| 14 {String method, bool withCredentials, String responseType, |
| 15 String mimeType, Map<String, String> requestHeaders, sendData, |
| 16 void onProgress(ProgressEvent e)}) { |
| 17 return JSON.encode({ |
| 18 "url": url, |
| 19 "method": method, |
| 20 "requestHeaders": requestHeaders, |
| 21 "data": sendData |
| 22 }); |
| 23 } |
| 24 } |
| 25 |
| 26 // HELP! The DI system is getting in the way. We want |
| 27 // the HttpBackend, but it will be implemented by ourselves. |
| 28 class HttpBackendWrapper { |
| 29 HttpBackend backend; |
| 30 HttpBackendWrapper(HttpBackend this.backend); |
| 31 } |
| 32 |
| 33 class RecordingHttpBackend implements HttpBackend { |
| 34 |
| 35 HttpBackend _prodBackend; |
| 36 PlaybackHttpBackendConfig _config; |
| 37 |
| 38 RecordingHttpBackend(HttpBackendWrapper wrapper, this._config) { |
| 39 this._prodBackend = wrapper.backend; |
| 40 } |
| 41 |
| 42 Future request(String url, |
| 43 {String method, bool withCredentials, String responseType, |
| 44 String mimeType, Map<String, String> requestHeaders, sendData, |
| 45 void onProgress(ProgressEvent e)}) { |
| 46 return _prodBackend.request(url, |
| 47 method: method, |
| 48 withCredentials: withCredentials, |
| 49 responseType: responseType, |
| 50 mimeType: mimeType, |
| 51 requestHeaders: requestHeaders, |
| 52 sendData: sendData, |
| 53 onProgress: onProgress).then((HttpRequest r) { |
| 54 |
| 55 var key = _config.requestKey(url, |
| 56 method: method, |
| 57 withCredentials: withCredentials, |
| 58 responseType: responseType, |
| 59 mimeType: mimeType, |
| 60 requestHeaders: requestHeaders, |
| 61 sendData: sendData, |
| 62 onProgress: onProgress); |
| 63 |
| 64 assert(key is String); |
| 65 _prodBackend.request('/record', //TODO make this URL configurable. |
| 66 method: 'POST', sendData: JSON.encode({ |
| 67 "key": key, "data": JSON.encode({ |
| 68 "status": r.status, |
| 69 "headers": r.getAllResponseHeaders(), |
| 70 "data": r.responseText}) |
| 71 })); |
| 72 return r; |
| 73 }); |
| 74 } |
| 75 } |
| 76 |
| 77 class PlaybackHttpBackend implements HttpBackend { |
| 78 |
| 79 PlaybackHttpBackendConfig _config; |
| 80 |
| 81 PlaybackHttpBackend(this._config); |
| 82 |
| 83 Map data = playback_data.playbackData; |
| 84 |
| 85 Future request(String url, |
| 86 {String method, bool withCredentials, String responseType, |
| 87 String mimeType, Map<String, String> requestHeaders, sendData, |
| 88 void onProgress(ProgressEvent e)}) { |
| 89 var key = _config.requestKey(url, |
| 90 method: method, |
| 91 withCredentials: withCredentials, |
| 92 responseType: responseType, |
| 93 mimeType: mimeType, |
| 94 requestHeaders: requestHeaders, |
| 95 sendData: sendData, |
| 96 onProgress: onProgress); |
| 97 |
| 98 if (!data.containsKey(key)) { |
| 99 throw ["Request is not recorded $key"]; |
| 100 } |
| 101 var playback = data[key]; |
| 102 return new Future.value( |
| 103 new mock.MockHttpRequest( |
| 104 playback['status'], |
| 105 playback['data'], |
| 106 playback['headers'])); |
| 107 } |
| 108 } |
| OLD | NEW |