public override string GetResponse <T>(Identity identity, List <MockResponseEntry <T> > responseEntries, CSOMRequest request)
        {
            if (identity is ObjectPathMethod)
            {
                ObjectPathMethod objectPathMethod      = identity as ObjectPathMethod;
                Identity         parentIdentity        = request.ObjectPaths.FirstOrDefault(parent => parent.Id == objectPathMethod.ParentId);
                List <string>    parentMethodParameter = new List <string>();
                if (parentIdentity is ObjectPathMethod)
                {
                    ObjectPathMethod parentMethod = parentIdentity as ObjectPathMethod;
                    if (parentMethod.Parameters.Count > 0)
                    {
                        parentMethodParameter.AddRange(parentMethod.Parameters.Select(param => param.Value as String));
                    }
                }
                //TODO: refactor it as after one day I don't understand it!
                MockResponseEntry <T> contextEntry = responseEntries.First(entry =>
                                                                           entry.Method == objectPathMethod.Name &&
                                                                           (parentMethodParameter.Count == 0 ||
                                                                            entry.ParentParameterValues.All(parentValue => parentMethodParameter.Any(parentParam => parentParam == parentValue)) &&
                                                                            entry.NameValueParameters.All(
                                                                                methodParam => (objectPathMethod.Parameters.Any(
                                                                                                    param => param.Value == methodParam.Value)) ||
                                                                                objectPathMethod.Parameters.Any(param => param.Properties.Any(paramProp => paramProp.Value == methodParam.Value && paramProp.Name == methodParam.Key)))));

                return(contextEntry.SerializedReturnValue);
            }
            else if (identity is Property)
            {
                Property associatedProperty        = identity as Property;
                MockResponseEntry <T> contextEntry = responseEntries.First(entry =>
                                                                           entry.PropertyName == associatedProperty.Name);
                return(contextEntry.SerializedReturnValue);
            }
            else if (identity is StaticMethod)
            {
                StaticMethod          associatedProperty = identity as StaticMethod;
                MockResponseEntry <T> contextEntry       = responseEntries.First(entry =>
                                                                                 entry.Method == associatedProperty.Name);
                return(contextEntry.SerializedReturnValue);
            }
            else if (identity is ObjectPathMethod)
            {
                ObjectPathMethod      pathMethod   = identity as ObjectPathMethod;
                MockResponseEntry <T> contextEntry = responseEntries.First(entry =>
                                                                           entry.Method == pathMethod.Name);
                return(contextEntry.SerializedReturnValue);
            }
            return(base.GetResponse <T>(identity, responseEntries, request));
        }
 public override string GetResponse <T>(Identity identity, List <MockResponseEntry <T> > responseEntries, CSOMRequest request)
 {
     if (identity is ObjectPathMethod)
     {
         ObjectPathMethod      objectPathMethod = identity as ObjectPathMethod;
         MockResponseEntry <T> contextEntry     = responseEntries.FirstOrDefault(entry =>
                                                                                 entry.Method == objectPathMethod.Name);
         if (contextEntry == null)
         {
             return(base.GetResponse <T>(identity, responseEntries, request));
         }
         return(contextEntry.SerializedReturnValue);
     }
     return($"{{\"_ObjectIdentity_\":\"{identity.Name}\"}}");
 }