2
0

KernelTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Test\Michel\Framework\Core;
  3. use Michel\Framework\Core\BaseKernel;
  4. use Michel\UniTester\TestCase;
  5. use Psr\Container\ContainerInterface;
  6. use Test\Michel\Framework\Core\Kernel\SampleKernelTest;
  7. use Test\Michel\Framework\Core\Package\MyPackageTest;
  8. class KernelTest extends TestCase
  9. {
  10. protected function setUp(): void
  11. {
  12. $this->initEnv();
  13. }
  14. protected function execute(): void
  15. {
  16. $this->testLoadKernel();
  17. $this->initEnv();
  18. $this->testLoadConfigurationIfExists();
  19. $this->initEnv();
  20. $this->testDefaultValue();
  21. $this->initEnv();
  22. $this->testKernelContainer();
  23. }
  24. protected function tearDown(): void
  25. {
  26. $this->initEnv();
  27. }
  28. private function initEnv(): void
  29. {
  30. unset($_ENV['APP_ENV']);
  31. unset($_SERVER['APP_ENV']);
  32. unset($_ENV['APP_TIMEZONE']);
  33. unset($_SERVER['APP_TIMEZONE']);
  34. unset($_ENV['APP_LOCALE']);
  35. unset($_SERVER['APP_LOCALE']);
  36. unset($_ENV['APP_URL']);
  37. unset($_SERVER['APP_URL']);
  38. putenv('APP_ENV');
  39. putenv('APP_TIMEZONE');
  40. putenv('APP_LOCALE');
  41. putenv('APP_URL');
  42. putenv('APP_DEBUG');
  43. date_default_timezone_set('UTC');
  44. }
  45. public function testLoadKernel()
  46. {
  47. $baseKernel = new SampleKernelTest('.env');
  48. $this->assertEquals('dev', $baseKernel->getEnv());
  49. $this->assertEquals(true, $baseKernel->isDebug());
  50. $this->assertEquals('dev', getenv('APP_ENV'));
  51. $this->assertEquals(0, getenv('APP_DEBUG'));
  52. $this->assertEquals('Europe/Paris', getenv('APP_TIMEZONE'));
  53. $this->assertEquals('fr', getenv('APP_LOCALE'));
  54. $this->assertEquals('http://localhost', getenv('APP_URL'));
  55. $this->assertEquals('Europe/Paris', date_default_timezone_get());
  56. }
  57. public function testLoadConfigurationIfExists()
  58. {
  59. $baseKernel = new SampleKernelTest('.env');
  60. $this->assertEquals([], $baseKernel->loadConfigurationIfExists('test.php'));
  61. }
  62. public function testDefaultValue()
  63. {
  64. $baseKernel = new SampleKernelTest('.env.test');
  65. $this->assertEquals('prod', $baseKernel->getEnv());
  66. $this->assertEquals('prod', getenv('APP_ENV'));
  67. $this->assertEquals('UTC', getenv('APP_TIMEZONE'));
  68. $this->assertEquals('en', getenv('APP_LOCALE'));
  69. $this->assertFalse(getenv('APP_URL'));
  70. $this->assertEquals('UTC', date_default_timezone_get());
  71. }
  72. public function testKernelContainer()
  73. {
  74. $baseKernel = new SampleKernelTest('.env');
  75. $container = $baseKernel->getContainer();
  76. $this->assertInstanceOf(ContainerInterface::class, $baseKernel->getContainer());
  77. $packages = $container->get('michel.packages');
  78. $this->assertTrue(is_array($packages));
  79. $this->assertInstanceOf(MyPackageTest::class, $packages[0]);
  80. $this->assertTrue(is_array($container->get('michel.middleware')));
  81. $this->assertTrue(is_array($container->get('michel.commands')));
  82. $this->assertTrue(is_array($container->get('michel.listeners')));
  83. $this->assertTrue(is_array($container->get('michel.routes')));
  84. if (PHP_VERSION_ID >= 80000) {
  85. $this->assertCount(3, $container->get('michel.routes'));
  86. }else {
  87. $this->assertCount(2, $container->get('michel.routes'));
  88. }
  89. $this->assertTrue(is_array($container->get('michel.controllers')));
  90. $this->assertCount(2, $container->get('michel.controllers'));
  91. $this->assertTrue(is_array($container->get('michel.services_ids')));
  92. $this->assertEquals($baseKernel->getEnv(), $container->get('michel.environment'));
  93. $this->assertEquals($baseKernel->getEnv() === 'dev', $container->get('michel.debug'));
  94. $this->assertEquals($baseKernel->getProjectDir(), $container->get('michel.project_dir'));
  95. $this->assertEquals($baseKernel->getCacheDir(), $container->get('michel.cache_dir'));
  96. $this->assertEquals($baseKernel->getLogDir(), $container->get('michel.logs_dir'));
  97. $this->assertEquals($baseKernel->getConfigDir(), $container->get('michel.config_dir'));
  98. $this->assertEquals($baseKernel->getPublicDir(), $container->get('michel.public_dir'));
  99. $this->assertInstanceOf(BaseKernel::class, $container->get(BaseKernel::class));
  100. }
  101. }