enhanced submission handling with deccision trees
Some checks failed
PHPUnit / test (push) Has been cancelled
Some checks failed
PHPUnit / test (push) Has been cancelled
This commit is contained in:
@ -9,6 +9,94 @@ use Tests\Support\QdbTestCase;
|
||||
|
||||
final class AppSubmitExtendedTest extends QdbTestCase
|
||||
{
|
||||
public function testResubmitClearsOmittedOptionalAnswers(): void
|
||||
{
|
||||
$login = $this->api()->loginMobileAndGetToken(
|
||||
DatabaseSeeder::COACH_USERNAME,
|
||||
DatabaseSeeder::PASSWORD
|
||||
);
|
||||
$f = $this->fixture();
|
||||
|
||||
$this->assertApiOk($this->submitQuestionnaireAs($login['token'], $f->questionnaireId, $f->clientCode, [
|
||||
['questionID' => $f->questionShortId, 'answerOptionKey' => 'yes'],
|
||||
['questionID' => $f->freeTextShortId, 'freeTextValue' => 'Old notes'],
|
||||
['questionID' => $f->glassSymptomKey, 'freeTextValue' => 'moderate'],
|
||||
['questionID' => 'fatigue', 'freeTextValue' => 'severe'],
|
||||
]));
|
||||
|
||||
$res = $this->submitQuestionnaireAs($login['token'], $f->questionnaireId, $f->clientCode, [
|
||||
['questionID' => $f->questionShortId, 'answerOptionKey' => 'yes'],
|
||||
]);
|
||||
$this->assertApiOk($res);
|
||||
|
||||
[$pdo, $tmpDb, $lockFp] = qdb_open(false);
|
||||
|
||||
$ft = $pdo->prepare(
|
||||
'SELECT freeTextValue FROM client_answer WHERE clientCode = :cc AND questionID = :qid'
|
||||
);
|
||||
$ft->execute([':cc' => $f->clientCode, ':qid' => $f->freeTextQuestionId]);
|
||||
$this->assertFalse($ft->fetchColumn());
|
||||
|
||||
$glass = $pdo->prepare(
|
||||
'SELECT freeTextValue FROM client_answer WHERE clientCode = :cc AND questionID = :qid'
|
||||
);
|
||||
$glass->execute([':cc' => $f->clientCode, ':qid' => $f->glassQuestionId]);
|
||||
$this->assertFalse($glass->fetchColumn());
|
||||
|
||||
$sub = $pdo->prepare(
|
||||
'SELECT submissionID FROM questionnaire_submission
|
||||
WHERE clientCode = :cc AND questionnaireID = :qn ORDER BY version DESC LIMIT 1'
|
||||
);
|
||||
$sub->execute([':cc' => $f->clientCode, ':qn' => $f->questionnaireId]);
|
||||
$submissionId = (string)$sub->fetchColumn();
|
||||
|
||||
$archived = $pdo->prepare(
|
||||
'SELECT freeTextValue FROM client_answer_submission
|
||||
WHERE submissionID = :sid AND questionID = :qid'
|
||||
);
|
||||
$archived->execute([':sid' => $submissionId, ':qid' => $f->freeTextQuestionId]);
|
||||
$this->assertFalse($archived->fetchColumn());
|
||||
|
||||
$archivedGlass = $pdo->prepare(
|
||||
'SELECT freeTextValue FROM client_answer_submission
|
||||
WHERE submissionID = :sid AND questionID = :qid'
|
||||
);
|
||||
$archivedGlass->execute([':sid' => $submissionId, ':qid' => $f->glassQuestionId]);
|
||||
$this->assertFalse($archivedGlass->fetchColumn());
|
||||
|
||||
qdb_discard($tmpDb, $lockFp);
|
||||
}
|
||||
|
||||
public function testResubmitReplacesGlassSymptomsInsteadOfMerging(): void
|
||||
{
|
||||
$login = $this->api()->loginMobileAndGetToken(
|
||||
DatabaseSeeder::COACH_USERNAME,
|
||||
DatabaseSeeder::PASSWORD
|
||||
);
|
||||
$f = $this->fixture();
|
||||
|
||||
$this->assertApiOk($this->submitQuestionnaireAs($login['token'], $f->questionnaireId, $f->clientCode, [
|
||||
['questionID' => $f->questionShortId, 'answerOptionKey' => 'yes'],
|
||||
['questionID' => $f->glassSymptomKey, 'freeTextValue' => 'moderate'],
|
||||
['questionID' => 'fatigue', 'freeTextValue' => 'severe'],
|
||||
]));
|
||||
|
||||
$res = $this->submitQuestionnaireAs($login['token'], $f->questionnaireId, $f->clientCode, [
|
||||
['questionID' => $f->questionShortId, 'answerOptionKey' => 'yes'],
|
||||
['questionID' => $f->glassSymptomKey, 'freeTextValue' => 'mild'],
|
||||
]);
|
||||
$this->assertApiOk($res);
|
||||
|
||||
[$pdo, $tmpDb, $lockFp] = qdb_open(false);
|
||||
$glass = $pdo->prepare(
|
||||
'SELECT freeTextValue FROM client_answer WHERE clientCode = :cc AND questionID = :qid'
|
||||
);
|
||||
$glass->execute([':cc' => $f->clientCode, ':qid' => $f->glassQuestionId]);
|
||||
$decoded = json_decode((string)$glass->fetchColumn(), true);
|
||||
$this->assertSame(['pain' => 'mild'], $decoded);
|
||||
qdb_discard($tmpDb, $lockFp);
|
||||
}
|
||||
|
||||
public function testResubmitCreatesSecondSubmissionVersion(): void
|
||||
{
|
||||
$login = $this->api()->loginMobileAndGetToken(
|
||||
|
||||
@ -30,6 +30,15 @@ final class AppAnswersTest extends TestCase
|
||||
$this->assertSame(['one', 'two'], qdb_decode_multi_check_values('one, two'));
|
||||
}
|
||||
|
||||
public function testBuildGlassSymptomJsonOmitsEmptyAndReturnsNullForNoSymptoms(): void
|
||||
{
|
||||
require_once dirname(__DIR__, 2) . '/lib/app_answers.php';
|
||||
$this->assertNull(qdb_build_glass_symptom_json([]));
|
||||
$this->assertNull(qdb_build_glass_symptom_json(['pain' => '']));
|
||||
$json = qdb_build_glass_symptom_json(['pain' => 'mild', 'fatigue' => 'severe']);
|
||||
$this->assertSame(['pain' => 'mild', 'fatigue' => 'severe'], json_decode((string)$json, true));
|
||||
}
|
||||
|
||||
public function testGroupAppSubmitAnswersMergesMultiCheck(): void
|
||||
{
|
||||
$answers = [
|
||||
|
||||
Reference in New Issue
Block a user