1
0

AppSettingsRepositoryTest.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Repositories;
  4. use App\Repositories\AppSettingsRepository;
  5. use App\Tests\TestCase;
  6. /**
  7. * Phase 18: app_settings KV store. The migration seeds
  8. * task_status_enabled='0', so the boolean reader has a known starting point.
  9. */
  10. final class AppSettingsRepositoryTest extends TestCase
  11. {
  12. public function testSeededFlagDefaultsToOff(): void
  13. {
  14. $pdo = $this->makeDb();
  15. $repo = new AppSettingsRepository($pdo);
  16. $this->assertSame('0', $repo->get('task_status_enabled'));
  17. $this->assertFalse($repo->getBool('task_status_enabled', false));
  18. }
  19. public function testSetReturnsBeforeAndAfter(): void
  20. {
  21. $pdo = $this->makeDb();
  22. $repo = new AppSettingsRepository($pdo);
  23. $r = $repo->set('task_status_enabled', '1');
  24. $this->assertSame('0', $r['before']);
  25. $this->assertSame('1', $r['after']);
  26. $this->assertTrue($repo->getBool('task_status_enabled'));
  27. }
  28. public function testSetWithSameValueIsRecognisedAsNoop(): void
  29. {
  30. $pdo = $this->makeDb();
  31. $repo = new AppSettingsRepository($pdo);
  32. $r = $repo->set('task_status_enabled', '0');
  33. $this->assertSame('0', $r['before']);
  34. $this->assertSame('0', $r['after']);
  35. }
  36. public function testGetReturnsDefaultForUnknownKey(): void
  37. {
  38. $pdo = $this->makeDb();
  39. $repo = new AppSettingsRepository($pdo);
  40. $this->assertNull($repo->get('does_not_exist'));
  41. $this->assertSame('fallback', $repo->get('does_not_exist', 'fallback'));
  42. $this->assertFalse($repo->getBool('does_not_exist'));
  43. $this->assertTrue($repo->getBool('does_not_exist', true));
  44. }
  45. public function testInsertNewKeyOnFirstWrite(): void
  46. {
  47. $pdo = $this->makeDb();
  48. $repo = new AppSettingsRepository($pdo);
  49. $r = $repo->set('new_flag', '1');
  50. $this->assertNull($r['before']);
  51. $this->assertSame('1', $r['after']);
  52. $this->assertSame('1', $repo->get('new_flag'));
  53. }
  54. public function testGetIntReadsNumericStringsAndFallsBackOnMissing(): void
  55. {
  56. $pdo = $this->makeDb();
  57. $repo = new AppSettingsRepository($pdo);
  58. $this->assertSame(10, $repo->getInt('assignment_slider_max', 10));
  59. $repo->set('assignment_slider_max', '20');
  60. $this->assertSame(20, $repo->getInt('assignment_slider_max', 10));
  61. $repo->set('garbage_value', 'not-a-number');
  62. $this->assertSame(7, $repo->getInt('garbage_value', 7));
  63. }
  64. }