Files
nat-as-server/tests/Integration/AppQuestionnairesTest.php
tom.hempel 06fc134299
Some checks failed
Tests / test (push) Has been cancelled
just testing the environment
2026-05-20 07:10:08 +02:00

79 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Integration;
use Tests\Support\ApiTestCase;
use Tests\Support\DatabaseFixture;
final class AppQuestionnairesTest extends ApiTestCase
{
public function testListActiveQuestionnaires(): void
{
$this->loginAs(DatabaseFixture::COACH1_USERNAME);
$res = $this->api('GET', 'app_questionnaires');
$this->assertOk($res);
$this->assertIsArray($res['body']['data']);
$ids = array_column($res['body']['data'], 'id');
$this->assertContains(DatabaseFixture::QUESTIONNAIRE_ID, $ids);
$first = $res['body']['data'][0];
$this->assertArrayHasKey('name', $first);
$this->assertArrayHasKey('showPoints', $first);
$this->assertArrayHasKey('condition', $first);
}
public function testFetchQuestionnaireDetail(): void
{
$this->loginAs(DatabaseFixture::COACH1_USERNAME);
$res = $this->api('GET', 'app_questionnaires', null, null, [
'id' => DatabaseFixture::QUESTIONNAIRE_ID,
]);
$this->assertOk($res);
$this->assertSame(DatabaseFixture::QUESTIONNAIRE_ID, $res['body']['data']['meta']['id']);
$this->assertNotEmpty($res['body']['data']['questions']);
$q = $res['body']['data']['questions'][0];
$this->assertSame('q1', $q['id']);
$this->assertSame('radio_question', $q['layout']);
}
public function testCoachCannotUploadForOtherCoachesClient(): void
{
$this->loginAs(DatabaseFixture::COACH1_USERNAME);
$res = $this->api('POST', 'app_questionnaires', [
'questionnaireID' => DatabaseFixture::QUESTIONNAIRE_ID,
'clientCode' => DatabaseFixture::CLIENT_COACH2,
'answers' => [
['questionID' => 'q1', 'answerOptionKey' => 'consent_signed'],
],
]);
$this->assertError($res, 'NOT_FOUND');
}
public function testUploadAnswersMapsShortQuestionIds(): void
{
$this->loginAs(DatabaseFixture::COACH1_USERNAME);
$res = $this->api('POST', 'app_questionnaires', [
'questionnaireID' => DatabaseFixture::QUESTIONNAIRE_ID,
'clientCode' => DatabaseFixture::CLIENT_COACH1,
'completedAt' => time(),
'answers' => [
['questionID' => 'q1', 'answerOptionKey' => 'consent_signed', 'answeredAt' => time()],
],
]);
$this->assertOk($res);
$this->assertTrue($res['body']['data']['submitted']);
$this->assertSame(5, $res['body']['data']['sumPoints']);
}
public function testCoachClientsList(): void
{
$this->loginAs(DatabaseFixture::COACH1_USERNAME);
$res = $this->api('GET', 'app_questionnaires', null, null, ['clients' => '1']);
$this->assertOk($res);
$codes = array_column($res['body']['data']['clients'], 'clientCode');
$this->assertContains(DatabaseFixture::CLIENT_COACH1, $codes);
$this->assertNotContains(DatabaseFixture::CLIENT_COACH2, $codes);
}
}