| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- namespace Test\Michel\DependencyInjection;
- use Michel\DependencyInjection\Container;
- use Michel\DependencyInjection\Exception\NotFoundException;
- use Psr\Container\ContainerInterface;
- use Test\Michel\DependencyInjection\TestClass\Database;
- use Test\Michel\DependencyInjection\TestClass\LazyService;
- use Michel\UniTester\TestCase;
- /**
- * Class AutoWireTest
- * @package Test\Michel\DependencyInjection
- */
- class ContainerTest extends TestCase
- {
- protected function setUp(): void
- {
- // TODO: Implement setUp() method.
- }
- protected function tearDown(): void
- {
- // TODO: Implement tearDown() method.
- }
- protected function execute(): void
- {
- $this->testDefinition();
- $this->testNotFoundClass();
- $this->testNotFoundParameter();
- $this->testVariableExtractionAndReplacement();
- $this->testVariableReplacementWithMissingValues();
- $this->testNestedVariableReplacement();
- $this->testVariableReplacementWithSpecialCharacters();
- $this->testNoVariableToReplace();
- }
- public function testDefinition()
- {
- $container = new Container([
- 'database.host' => '127.0.0.1',
- 'database.port' => null,
- Database::class => static function (ContainerInterface $container) {
- return new Database();
- },
- LazyService::class => static function (ContainerInterface $container) {
- return new LazyService($container->get(Database::class));
- }
- ]);
- $database = $container->get(Database::class);
- /**
- * @var LazyService $service
- */
- $service = $container->get(LazyService::class);
- $this->assertEquals('127.0.0.1', $container->get('database.host'));
- $this->assertEquals(null, $container->get('database.port'));
- $this->assertInstanceOf(Database::class, $database);
- $this->assertInstanceOf(LazyService::class, $service);
- $this->assertStrictEquals($database, $service->getDatabase());
- $this->assertTrue($container->has(LazyService::class));
- $this->assertFalse($container->has('database.user'));
- }
- public function testNotFoundClass()
- {
- $container = new Container([]);
- $this->expectException(NotFoundException::class, function () use ($container) {
- $container->get(LazyService::class);
- });
- }
- public function testNotFoundParameter()
- {
- $container = new Container([]);
- $this->expectException(NotFoundException::class, function () use ($container) {
- $container->get('database.user');
- });
- }
- public function testVariableExtractionAndReplacement()
- {
- $container = new Container([
- 'database.host' => '127.0.0.1',
- 'database.port' => '3306',
- 'database.user' => 'root',
- 'database.dsn' => 'mysql://#{database.user}@#{database.host}:#{database.port}/mydb'
- ]);
- $this->assertEquals('mysql://root@127.0.0.1:3306/mydb', $container->get('database.dsn'));
- }
- public function testVariableReplacementWithMissingValues()
- {
- $container = new Container([
- 'database.host' => '127.0.0.1',
- 'database.dsn' => 'mysql://#{database.user}@#{database.host}:#{database.port}/mydb'
- ]);
- $this->expectException(NotFoundException::class, function () use ($container) {
- $container->get('database.dsn');
- });
- }
- public function testNestedVariableReplacement()
- {
- $container = new Container([
- 'base.url' => '127.0.0.1',
- 'api.url' => 'http://#{base.url}/api',
- 'api.endpoint' => '#{api.url}/v1/resource'
- ]);
- $this->assertEquals('http://127.0.0.1/api/v1/resource', $container->get('api.endpoint'));
- }
- public function testVariableReplacementWithSpecialCharacters()
- {
- $container = new Container([
- 'user.name' => 'admin@domain.com',
- 'database.dsn' => 'mysql://#{user.name}:pass@localhost/db'
- ]);
- $this->assertEquals('mysql://admin@domain.com:pass@localhost/db', $container->get('database.dsn'));
- }
- public function testNoVariableToReplace()
- {
- $container = new Container([
- 'app.name' => 'MySuperApp'
- ]);
- // Aucune substitution ne doit être faite
- $this->assertEquals('MySuperApp', $container->get('app.name'));
- }
- }
|