public string SendRequest(ServiceEndpoint endpoint, ServiceEndpointUtilisation utilisation, Application application, ApplicationData updateTarget)
        {
            if (this.type == "VALIDATE")
            {
                string validateStr = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.EndpointValidation.VALIDATE-{0}.json", endpoint.Id.PadLeft(2, '0')));

                return validateStr;
            }

            return null;
        }
        public void TestNonExistentEndpoint()
        {
            ApplicationData appData = new ApplicationData
                                      {
                                          { "First_name", "Blah" },
                                          { "Last_name", "McR&D" }
                                      };

            ServiceEndpointUtilisation endpointUtilisation = new ServiceEndpointUtilisation { ServiceEndpointId = "0" };

            ServiceEndpointValidator validator = new ServiceEndpointValidator(endpointUtilisation, this.endpointList, this.communicator);
            ValidationResults results = validator.Validate(new Application(appData));
            Assert.AreEqual(true, results.IsValid);
        }
        public void TestMultipleErrorArray()
        {
            ApplicationData appData = new ApplicationData
                                      {
                                          { "First_name", "Blah" },
                                          { "Last_name", "McR&D" }
                                      };

            ServiceEndpointUtilisation endpointUtilisation = new ServiceEndpointUtilisation { ServiceEndpointId = "1" };

            ServiceEndpointValidator validator = new ServiceEndpointValidator(endpointUtilisation, this.endpointList, this.communicator);
            ValidationResults results = validator.Validate(new Application(appData));
            Assert.AreEqual(false, results.IsValid);
            Assert.AreEqual(2, results.Count(x => x.Key == "First_name"));
            Assert.AreEqual(0, results.Count(x => x.Key == "Last_name"));
        }
 /// <summary>
 /// Sends a request to a service endpoint and returns the response
 /// mapped to a JSON string.
 /// </summary>
 /// <param name="communicator">The endpoint communicator.</param>
 /// <param name="endpoint">The endpoint definition.</param>
 /// <param name="utilisation">Provides a data field mapping for the request / response.</param>
 /// <param name="applicationData">The application data.</param>
 /// <param name="updateTarget">The update target.</param>
 /// <returns>
 /// A mapped JSON string of the response from the service endpoint.
 /// </returns>
 public static string SendRequest(this IServiceEndpointCommunicator communicator, ServiceEndpoint endpoint, ServiceEndpointUtilisation utilisation, ApplicationData applicationData, ApplicationData updateTarget)
 {
     return communicator.SendRequest(endpoint, utilisation, new Application(applicationData), updateTarget);
 }
 /// <summary>
 /// Sends a request to a service endpoint and returns the response
 /// mapped to a JSON string.
 /// </summary>
 /// <param name="communicator">The endpoint communicator.</param>
 /// <param name="endpoint">The endpoint definition.</param>
 /// <param name="utilisation">Provides a data field mapping for the request / response.</param>
 /// <param name="applicationData">The application data, which is also the target when mapping back.</param>
 /// <returns>
 /// A mapped JSON string of the response from the service endpoint.
 /// </returns>
 public static string SendRequest(this IServiceEndpointCommunicator communicator, ServiceEndpoint endpoint, ServiceEndpointUtilisation utilisation, ApplicationData applicationData)
 {
     return communicator.SendRequest(endpoint, utilisation, applicationData, applicationData);
 }
 public string SendRequest(ServiceEndpoint endpoint, ServiceEndpointUtilisation utilisation, Application application, ApplicationData updateTarget)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Sends a request to a service endpoint and returns the response
        /// mapped to a JSON string.
        /// </summary>
        /// <param name="endpoint">The endpoint definition.</param>
        /// <param name="utilisation">Provides a data field mapping for the request / response.</param>
        /// <param name="application">The application to map.</param>
        /// <param name="updateTarget">The update target.</param>
        /// <returns>A mapped JSON string of the response from the service endpoint.</returns>
        public string SendRequest(ServiceEndpoint endpoint, ServiceEndpointUtilisation utilisation, Application application, ApplicationData updateTarget)
        {
            MappedFieldList consolidatedMap = new MappedFieldList(endpoint.RequestFieldMap);
            consolidatedMap.MergeOnTarget(utilisation.RequestFieldMap);
            if (utilisation.MapAllFieldsInRequest)
            {
                MappedFieldList allFieldMap = new MappedFieldList();
                allFieldMap.AddRange(application.ApplicationData.Select(val => new MappedField { MapType = MapType.Field, Target = val.Key, Source = val.Key }));
                consolidatedMap.MergeOnTarget(allFieldMap);
            }

            bool cached = consolidatedMap.Count == 0 && this.cachedResponse.ContainsKey(endpoint.Url);

            HttpEndpointCommunication commsEvent = new HttpEndpointCommunicationMapper().ToHttpEndpointCommunication(endpoint);
            HttpWebResponse response = null;
            string responseBody = string.Empty;

            try
            {
                if (cached)
                {
                    response = this.cachedResponse[endpoint.Url];
                    responseBody = this.cachedResponseBody[endpoint.Url];
                }
                else
                {
                    response = this.DoSendRequest(endpoint, commsEvent, application, consolidatedMap);
                    responseBody = this.ReadResponseContent(response);
                    if (consolidatedMap.Count == 0)
                    {
                        this.cachedResponse.Add(endpoint.Url, response);
                        this.cachedResponseBody.Add(endpoint.Url, responseBody);
                    }
                }

                JToken token = new HttpWebResponseReader().ConvertToJson(responseBody, endpoint.ResponseFormat, endpoint.ResponseRoot);
                if (utilisation.ResponseFieldsMatchRequest)
                {
                    MappedFieldList allFieldMap = new MappedFieldList();
                    allFieldMap.AddRange(consolidatedMap.Select(mappedField => new MappedField { MapType = MapType.Content, Source = mappedField.Target, Target = mappedField.Source }));
                    utilisation.ResponseFieldMap.MergeOnTarget(allFieldMap);
                }

                if (utilisation.ResponseFieldMap != null && utilisation.ResponseFieldMap.Count > 0)
                {
                    token = new HttpEndpointResponseMapper().MapToken(token, response, utilisation.ResponseFieldMap, updateTarget, utilisation.MaxResults);
                }

                return (token ?? string.Empty).ToString();
            }
            catch (WebException e)
            {
                response = (HttpWebResponse)e.Response;
                responseBody = this.ReadResponseContent(response);
                commsEvent.ExceptionMessage = e.Message;
                throw;
            }
            catch (Exception e)
            {
                commsEvent.ExceptionMessage = e.Message;
                throw;
            }
            finally
            {
                if (response != null)
                {
                    commsEvent.ResponseStatusCode = (int)response.StatusCode;
                    commsEvent.ResponseContent = responseBody;
                    response.Close();
                }

                if (!cached)
                {
                    this.logger.LogCommunication(commsEvent);
                }
            }
        }