Skip to main content
Glama

CTX: Context as Code (CaC) tool

by context-hub
MIT License
235
  • Apple
  • Linux
DotEnvVariableProviderTest.php3.53 kB
<?php declare(strict_types=1); namespace Tests\Unit\Lib\Variable\Provider; use Butschster\ContextGenerator\Lib\Variable\Provider\DotEnvVariableProvider; use Dotenv\Repository\RepositoryInterface; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; #[CoversClass(DotEnvVariableProvider::class)] class DotEnvVariableProviderTest extends TestCase { private RepositoryInterface $repository; #[Test] public function it_should_check_repository_for_variable_existence(): void { // Setup repository mock $this->repository ->method('has') ->with('TEST_VAR') ->willReturn(true); $provider = new DotEnvVariableProvider($this->repository); $this->assertTrue($provider->has('TEST_VAR')); } #[Test] public function it_should_get_variable_from_repository(): void { // Setup repository mock $this->repository ->method('has') ->with('TEST_VAR') ->willReturn(true); $this->repository ->method('get') ->with('TEST_VAR') ->willReturn('test_value'); $provider = new DotEnvVariableProvider($this->repository); $this->assertSame('test_value', $provider->get('TEST_VAR')); } #[Test] public function it_should_return_null_for_missing_variable(): void { // Setup repository mock $this->repository ->method('has') ->with('MISSING_VAR') ->willReturn(false); $this->repository ->method('get') ->with('MISSING_VAR') ->willReturn(null); $provider = new DotEnvVariableProvider($this->repository); $this->assertFalse($provider->has('MISSING_VAR')); $this->assertNull($provider->get('MISSING_VAR')); } #[Test] public function it_should_load_env_file_when_path_provided(): void { // Create temporary .env file in system temp directory $tempDir = \sys_get_temp_dir(); $envPath = $tempDir . '/.env.test'; \file_put_contents($envPath, "TEST_ENV_VAR=from_env_file\n"); // We need to use a real repository for this test // This requires us to have phpdotenv package installed // If this was a real project, we'd create a proper test fixture // This is a simplified test that verifies the rootPath is used // by checking if the constructor tries to create a Dotenv instance // Setup repository mock that expects at least one has/get call // Just to make sure our constructor logic works $repository = $this->createMock(RepositoryInterface::class); // We need to capture the fact that when rootPath is provided, // the DotEnv class attempts to load environment variables try { // This might fail in test environment without dotenv properly set up // But we're just testing that the constructor uses the rootPath new DotEnvVariableProvider($repository, $tempDir, '.env.test'); // If it didn't throw, we consider it a success for this test $this->addToAssertionCount(1); } finally { // Clean up temp file if (\file_exists($envPath)) { \unlink($envPath); } } } protected function setUp(): void { $this->repository = $this->createMock(RepositoryInterface::class); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/context-hub/generator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server