protected Task <JsonResponse> MethodAsync(string url, string method, JsonDict body = null)
        {
            RequestAndResponse rar = _recording[_playbackIndex];

            RecordedRequest request = new RecordedRequest
            {
                Url    = url,
                Method = method,
                Body   = body
            };

            if (!request.Matches(rar.Request))
            {
                throw new Exception($"Actual request doesn't match recorded at index {_playbackIndex}");
            }

            _playbackIndex++;
            return(Task.FromResult(rar.Response));
        }
 internal bool Matches(RecordedRequest other)
 {
     if (Url != other.Url || Method != other.Method)
     {
         return(false);
     }
     if (Body == null)
     {
         if (other.Body != null)
         {
             return(false);
         }
     }
     else
     {
         if (!Body.ShallowEquals(other.Body))
         {
             return(false);
         }
     }
     return(true);
 }