Files
barometer-server/tests/Unit/ProgramSessionsTest.php
tom.hempel 7fefc264f4
Some checks failed
PHPUnit / test (push) Has been cancelled
session cylces and adjustments
2026-06-29 13:26:08 +02:00

56 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
use Tests\Support\DatabaseSeeder;
use Tests\Support\TestFilesystem;
final class ProgramSessionsTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
TestFilesystem::resetUploads();
if (defined('QDB_PATH') && is_file(QDB_PATH)) {
@unlink(QDB_PATH);
}
[$pdo, $tmpDb, $lockFp] = qdb_open(true);
DatabaseSeeder::seed($pdo);
require_once dirname(__DIR__, 2) . '/lib/program_sessions.php';
$sessionID = bin2hex(random_bytes(8));
$now = time();
$pdo->prepare(
'INSERT INTO program_session
(sessionID, name, description, sessionNumber, orderIndex, isActive, createdAt, updatedAt)
VALUES (:id, :name, "", 1, 0, 1, :t, :t)'
)->execute([':id' => $sessionID, ':name' => 'S1', ':t' => $now]);
qdb_sync_program_session_questionnaires($pdo, $sessionID, [
['questionnaireID' => 'qn-test', 'orderIndex' => 0],
]);
qdb_save($tmpDb, $lockFp);
}
public function testAdvanceCycleWhenSessionComplete(): void
{
[$pdo, $tmpDb, $lockFp] = qdb_open(true);
require_once dirname(__DIR__, 2) . '/lib/program_sessions.php';
qdb_program_session_settings_save($pdo, ['autoRepeatSessions' => true]);
$now = time();
$pdo->prepare(
"INSERT INTO completed_questionnaire
(clientCode, questionnaireID, status, completedAt, sumPoints)
VALUES ('CLIENT-TEST-001', 'qn-test', 'completed', :t, 0)"
)->execute([':t' => $now]);
$this->assertTrue(qdb_maybe_advance_program_cycle($pdo, 'CLIENT-TEST-001'));
$cycle = qdb_client_program_cycle_get($pdo, 'CLIENT-TEST-001');
$this->assertSame(2, $cycle['cycleNumber']);
qdb_save($tmpDb, $lockFp);
}
}