public static ValidationProject CreateValidationProject(string name, string legalEntity)
        {
            ValidationProject validationProject = new ValidationProject();

            validationProject.Name        = name;
            validationProject.LegalEntity = legalEntity;
            return(validationProject);
        }
        public HttpResponseMessage ValidateProject(int projectId, int connectionId = 0)
        {
            try
            {
                var        project = _projectFactory.CreateProject(projectId);
                Connection connection;
                if (connectionId == 0)
                {
                    connection = _dataRepository.ConnectionRepository
                                 .GetDataByProjectId(projectId)
                                 .FirstOrDefault(x => x.IsActive & x.IsDefault & x.ProjectId == projectId);
                    if (connection != null)
                    {
                        connection.ConnectionProvider =
                            _dataRepository.ConnectionProviderRepository.GetDataById(connection.ConnectionProviderId)
                            .FirstOrDefault();
                        connectionId = connection.ConnectionId;
                    }
                }
                else
                {
                    connection = _connectionFactory.CreateConnection(connectionId);
                }

                var validationProject = new ValidationProject(_dataRepository, projectId);
                if (!validationProject.ValidateConnection(connectionId))
                {
                    throw new Exception(ConnectionNotValid);
                }

                foreach (var test in project.Tests)
                {
                    validationProject.ValidationTests.Add(new ValidationTest(connection, test));
                }
                foreach (var testGroup in project.TestGroups)
                {
                    validationProject.ValidationTestGroups.Add(new ValidationTestGroup(connection, testGroup));
                }


                var valCollection = validationProject.Validate();
                PersistValidationResults(valCollection, null, projectId);
                return(Request.CreateResponse(HttpStatusCode.OK, validationProject));
            }
            catch (Exception ex)
            {
                return
                    (Request.CreateErrorResponse(
                         ex.Message == ConnectionNotValid
                            ? HttpStatusCode.BadRequest
                            : HttpStatusCode.InternalServerError, new HttpError(ex.Message)));
            }
        }
        public HttpResponseMessage ValidateGroup(int groupId, int connectionId = 0)
        {
            try
            {
                var testGroup = _testGroupFactory.CreateTestGroup(groupId);

                Connection connection;
                if (connectionId == 0)
                {
                    connection = _dataRepository.ConnectionRepository
                                 .GetDataByProjectId(testGroup.ProjectId)
                                 .FirstOrDefault(x => x.IsActive & x.IsDefault & x.ProjectId == testGroup.ProjectId);
                    if (connection != null)
                    {
                        connection.ConnectionProvider =
                            _dataRepository.ConnectionProviderRepository.GetDataById(connection.ConnectionProviderId)
                            .FirstOrDefault();
                        connectionId = connection.ConnectionId;
                    }
                }
                else
                {
                    connection = _connectionFactory.CreateConnection(connectionId);
                }

                var proj = new ValidationProject(_dataRepository, testGroup.ProjectId);
                if (!proj.ValidateConnection(connectionId))
                {
                    throw new Exception(ConnectionNotValid);
                }

                var valTestGroup = new ValidationTestGroup(connection, testGroup);

                var valCollection = valTestGroup.Validate();
                PersistValidationResults(valCollection, groupId, null);

                return(Request.CreateResponse(HttpStatusCode.OK, valTestGroup));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError(ex.Message)));
            }
        }
        public HttpResponseMessage ValidateTest(int testId, int connectionId = 0)
        {
            var        test       = _testFactory.CreateTest(testId);
            var        valProject = new ValidationProject(_dataRepository, test.ProjectId);
            Connection connection;

            if (connectionId == 0)
            {
                connection = _dataRepository.ConnectionRepository
                             .GetDataByProjectId(test.ProjectId)
                             .FirstOrDefault(x => x.IsActive & x.IsDefault & x.ProjectId == test.ProjectId);
                if (connection != null)
                {
                    connection.ConnectionProvider =
                        _dataRepository.ConnectionProviderRepository.GetDataById(connection.ConnectionProviderId)
                        .FirstOrDefault();
                    connectionId = connection.ConnectionId;
                }
            }
            else
            {
                connection = _connectionFactory.CreateConnection(connectionId);
            }

            if (!valProject.ValidateConnection(connectionId))
            {
                throw new Exception(ConnectionNotValid);
            }

            var valTest = new ValidationTest(connection, test);

            var valResult = new Collection <ValidationResponse> {
                valTest.Validate()
            };

            PersistValidationResults(valResult, null, null);

            return(Request.CreateResponse(HttpStatusCode.OK, valResult));
        }