| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- <?php
- /*
- * Copyright 2026 Alessandro Chiapparini <sprint_planer_web@chiapparini.org>
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * See the LICENSE file in the project root for the full license text.
- */
- declare(strict_types=1);
- namespace App\Tests;
- use PDO;
- use PHPUnit\Framework\TestCase as PhpUnitTestCase;
- /**
- * Base TestCase with helpers for building an in-memory SQLite DB loaded with
- * the same migrations the app runs. Every test gets a fresh isolated database.
- */
- abstract class TestCase extends PhpUnitTestCase
- {
- protected function makeDb(): PDO
- {
- $pdo = new PDO('sqlite::memory:', null, null, [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- PDO::ATTR_EMULATE_PREPARES => false,
- ]);
- $pdo->exec('PRAGMA foreign_keys = ON');
- // Apply every NNN_*.sql in order — matches the production Migrator.
- $dir = __DIR__ . '/../migrations';
- $files = glob($dir . '/*.sql') ?: [];
- sort($files);
- foreach ($files as $file) {
- if (!preg_match('#/\d{3,}_[A-Za-z0-9_\-]+\.sql$#', $file)) {
- continue;
- }
- $sql = file_get_contents($file);
- if ($sql === false) {
- $this->fail("Could not read migration: {$file}");
- }
- $pdo->exec($sql);
- }
- return $pdo;
- }
- }
|