in synergy/server/controller/RunCtrl.php [200:297]
public function saveAssignmentProgress($data, $json, $id) {
// update record in test_assignment - number_of_cases, number_of_cases_completed, failed_cases, passed_cases, skipped_cases
$numberOfCases = 0;
$numberOfCasesCompleted = 0;
$failedCases = 0;
$passedCases = 0;
$skippedCases = 0;
$issues = array();
$c_id = "";
$durations = array();
foreach ($data->specification->testSuites as $ts) {// each suite
foreach ($ts->testCases as $c) { // each case
if (intval($c->issue) > 0) {
$issues["_" . intval($c->id)] = $c->issue;
}
if (intval($c->duration) > 0 && intval($c->finished) === 1) {
$c_id = $c_id . " id=" . intval($c->id) . " OR";
$durations["_" . intval($c->id)] = intval($c->duration);
}
$numberOfCases++;
if (intval($c->finished) === 1) {
$numberOfCasesCompleted++;
}
switch ($c->result) {
case "passed":
$passedCases++;
break;
case "skipped":
$skippedCases++;
break;
case "failed":
$failedCases++;
break;
default:
break;
}
}
}
if ($numberOfCases < 1 || $numberOfCasesCompleted < 1) {
throw new CorruptedAssignmentException("Corrupted assignment", "Number of all cases is " . $numberOfCases . ", number of completed cases is " . $numberOfCasesCompleted);
}
// save blob data
$this->saveBlob($data);
if ($numberOfCases === $numberOfCasesCompleted) {
$this->deleteAssignmentProgress($id);
$lockCtrl = new SpecificationLockCtrl();
$lockCtrl->removeLockForAssignment($id);
} else if ($numberOfCases > $numberOfCasesCompleted) {
$this->saveProgress($json, $id);
}
$totalTime = 0;
// add new issues
// update estimated time for cases
$issuesString = "";
if (strlen($c_id) > 0) {
$c_id = substr($c_id, 0, strlen($c_id) - 3);
$c_id = "(" . $c_id . ")";
$caseCtrl = new CaseCtrl();
$cases = $caseCtrl->getCasesDuration($c_id);
for ($i = 0, $maxi = count($cases); $i < $maxi; $i++) {
if (isset($durations["_" . $cases[$i]->id]) && intval($durations["_" . $cases[$i]->id]) > 0) {
$newDurationInMinutes = intval(round($durations["_" . $cases[$i]->id] / (1000 * 60)));
$newDurationFloat = ($durations["_" . $cases[$i]->id] / (1000 * 60));
if ($newDurationInMinutes < 1) {
$newDurationInMinutes = 1;
}
$totalTime += $newDurationFloat;
$caseCtrl->updateDuration($cases[$i]->id, $newDurationInMinutes);
}
if (isset($issues["_" . $cases[$i]->id])) {
for ($m = 0, $maxm = count($issues["_" . $cases[$i]->id]); $m < $maxm; $m++) {
$caseCtrl->addIssue($issues["_" . $cases[$i]->id][$m], $cases[$i]->id);
$issuesString = $issuesString . ";" . $issues["_" . $cases[$i]->id][$m];
}
}
}
}
$totalTime = round($totalTime);
if ($totalTime < 1) {
$totalTime = 1;
}
$this->updateAssignment($id, $numberOfCases, $numberOfCasesCompleted, $failedCases, $skippedCases, $passedCases, $totalTime);
$this->addIssues($id, $this->getIssues($issuesString));
$ctrl = new AssignmentCommentsCtrl();
$ctrl->replaceComments($id, $data);
Mediator::emit("assignmentProgressUpdated", $id);
}