anchor.diff:      var req = new HttpRequestMock(new Uri(path:'/map/create'));
       req.response.when(callsTo('redirect', anything)).thenReturn(new Future.value(true));
       createMindMap(req).then(expectAsync((_) {
  +      core.getLogs(callsTo('createMap')).verify(happenedOnce);
         req.response.getLogs(callsTo('redirect', new UriMatchingPattern(urls.map, ['1001']))).verify(happenedOnce);
       }));
     });
     test('addNode', () {
  +    print("addNode");
       StringBuffer written;
       core.when(callsTo('addNode')).alwaysReturn(new Future.value(101001));
  -    var req = new HttpRequestMock(Uri.parse('/map/1001/add'), method:'POST');
  -    // TODO mock the request having data
  +    var req = new HttpRequestMock(
  +        Uri.parse('/map/1001/add'),
  +        method:'POST',
  +        body: new JsonCodec().encode({
  +          'contents': 'herbs'
  +        }));
       req.response.when(callsTo('write')).thenCall((data)=>written.write(data));
       req.response.when(callsTo('close')).alwaysReturn(new Future.value(true));
       addNode(req).then(expectAsync((_) {
  -      // TODO expect the call to core.addNode to have the correct data
  +      core.getLogs(callsTo('addNode', 1001, 'herbs')).verify(happenedOnce);
         req.response.getLogs(callsTo('close')).verify(happenedOnce);
         expect(written, new JsonDecoded({'id': 101001}));
       }));
  
positive.code:   Uri uri;
    String method;
    HttpResponseMock response = new HttpResponseMock();
  
    HttpRequestMock(this.uri, {this.method: 'GET'});
  
    noSuchMethod(i) => super.noSuchMethod(i);
  }
  
  class HttpResponseMock extends Mock implements HttpResponse {
  
negative.code: import 'dart:async';
  import 'dart:io';
  import 'dart:convert';
  import 'dart:mirrors';
  import 'package:route/url_pattern.dart';
  
  import '../lib/urls.dart' as urls;
  