diff --git a/server/pifr_server.environment.inc b/server/pifr_server.environment.inc index 4f371f4..b43f745 100644 --- a/server/pifr_server.environment.inc +++ b/server/pifr_server.environment.inc @@ -593,3 +593,22 @@ function pifr_server_environment_save(array $environment) { } return $environment; } + +/** + * Determine whether environment tests should be considered 'advisory'. + * + * Advisory tests are tests which may fail and return their results, but which + * should not cause the overall branch/patch test to be considered a failure. + * Environments are considered 'advisory' if the environment plugin_arguments + * array contains an 'advisory' key with non-empty value. + * + * @param $environment_id Environment Id. + * @return boolean TRUE if considered 'advisory', otherwise FALSE + */ +function pifr_server_environment_is_advisory($environment_id) { + $environment = pifr_server_environment_get($environment_id); + if (!empty($environment['plugin_argument']['advisory'])) { + return TRUE; + } + return FALSE; +} diff --git a/server/pifr_server.test.inc b/server/pifr_server.test.inc index 454fefe..7392360 100644 --- a/server/pifr_server.test.inc +++ b/server/pifr_server.test.inc @@ -905,16 +905,32 @@ abstract class PIFRTest { // Insert a row and status for each relevant environment. $environments = pifr_server_environment_test_get_all($this->test['test_id']); + // Set flag for 'Overall Test Status' + $overallpass = TRUE; foreach ($environments as $environment) { $status = pifr_server_environment_status_get($environment['environment_id'], $this->test['test_id']); $message = t($status['status']); if ($status['status'] == 'result') { $message = pifr_server_review_check_code($environment, $status['code']) ? 'pass' : 'fail'; + if ($message == 'fail') { + // Check if this is an advisory test + if (!pifr_server_environment_is_advisory($environment['environment_id'])) { + $overallpass = FALSE; + } + } } - $rows[] = array($environment['title'], $message); } + // If multiple environments tested, provide an 'overall' result (taking + // advisory environments into account) + if (count($rows) > 1) { + // Add blank line between environment results and 'overall' result + $rows[] = array(" ", " "); + // Add 'overall' result + $rows[] = array(t("Overall Result"), ($overallpass ? 'pass' : 'fail')); + } + $rows = $this->formatTable($rows); // Color environment rows based on result status, if present.