public function createProject($input_settings, $update = false) { require_once 'models/project.php'; if ($update) { // Updating an existing project. if (!array_key_exists('Id', $input_settings)) { $this->fail("Project Id must be set"); return false; } // Load its current settings. $project = new Project(); $project->Id = $input_settings['Id']; $project->Fill(); $settings = get_object_vars($project); $submit_button = 'Update'; } else { // Create a new project. if (!array_key_exists('Name', $input_settings)) { $this->fail("Project name must be set"); return false; } // Specify some default settings. $settings = array('AutoremoveMaxBuilds' => 500, 'AutoremoveTimeframe' => 60, 'CoverageThreshold' => 70, 'CvsViewerType' => 'viewcvs', 'EmailBrokenSubmission' => 1, 'EmailMaxChars' => 255, 'EmailMaxItems' => 5, 'NightlyTime' => '01:00:00 UTC', 'Public' => 1, 'ShowCoverageCode' => 1, 'TestTimeMaxStatus' => 3, 'TestTimeStd' => 4, 'TestTimeStdThreshold' => 1, 'UploadQuota' => 1); $submit_button = 'Submit'; } // Override default/existing settings with those we wish to change. foreach ($input_settings as $k => $v) { $settings[$k] = $v; } // Login as admin. $client = new GuzzleHttp\Client(['cookies' => true]); global $CDASH_BASE_URL; try { $response = $client->request('POST', $CDASH_BASE_URL . '/user.php', ['form_params' => ['login' => 'simpletest@localhost', 'passwd' => 'simpletest', 'sent' => 'Login >>']]); } catch (GuzzleHttp\Exception\ClientException $e) { $this->fail($e->getMessage()); return false; } // Create project. try { $response = $client->request('POST', $CDASH_BASE_URL . '/api/v1/project.php', ['json' => [$submit_button => true, 'project' => $settings]]); } catch (GuzzleHttp\Exception\ClientException $e) { $this->fail($e->getMessage()); return false; } $response_array = json_decode($response->getBody(), true); $projectid = $response_array['project']['Id']; // Make sure all of our settings were applied successfully. $project = new Project(); $project->Id = $projectid; $project->Fill(); if (!$project->Exists()) { $this->fail("Project does not exist after it should have been created"); } foreach ($input_settings as $k => $v) { if ($k === 'repositories') { // Special handling for repositories as these aren't // simple project properties. $added_repos = $v; $num_added_repos = count($added_repos); $project_repos = $project->GetRepositories(); $matches_found = 0; foreach ($project_repos as $project_repo) { foreach ($added_repos as $added_repo) { if ($project_repo['url'] === $added_repo['url'] && $project_repo['branch'] === $added_repo['branch'] && $project_repo['username'] === $added_repo['username'] && $project_repo['password'] === $added_repo['password']) { $matches_found++; } } } if ($matches_found != count($added_repos)) { $this->fail("Attempted to add {$num_added_repos} but only found {$matches_found}"); } } else { $found_value = $project->{$k}; if ($found_value != $v) { $this->fail("Expected {$v} but found {$found_value} for {$k}"); } } } return $projectid; }
} $available_projects[] = $available_project; } $response['availableprojects'] = $available_projects; $project_response = array(); if ($projectid > 0) { $Project->Fill(); $project_response = $Project->ConvertToJSON(); // Get the spam list $spambuilds = $Project->GetBlockedBuilds(); $blocked_builds = array(); foreach ($spambuilds as $spambuild) { $blocked_builds[] = $spambuild; } $project_response['blockedbuilds'] = $blocked_builds; $repositories = $Project->GetRepositories(); foreach ($repositories as $repository) { $repository_response = array(); $repository_response['url'] = $repository['url']; $repository_response['username'] = $repository['username']; $repository_response['password'] = $repository['password']; $repository_response['branch'] = $repository['branch']; $repositories_response[] = $repository_response; $nRepositories++; } } else { // Initialize some variables for project creation. $project_response['AutoremoveMaxBuilds'] = 500; $project_response['AutoremoveTimeframe'] = 60; $project_response['CoverageThreshold'] = 70; $project_response['EmailBrokenSubmission'] = 1;