Skip to main content
Glama

CTX: Context as Code (CaC) tool

by context-hub
MIT License
235
  • Apple
  • Linux
DocumentTest.php6.68 kB
<?php declare(strict_types=1); namespace Tests\Unit\Document; use Butschster\ContextGenerator\Document\Document; use Butschster\ContextGenerator\Modifier\Modifier; use Butschster\ContextGenerator\Modifier\ModifiersApplierInterface; use Butschster\ContextGenerator\Source\SourceInterface; use Butschster\ContextGenerator\SourceParserInterface; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; #[CoversClass(Document::class)] final class DocumentTest extends TestCase { private Document $document; private string $fixturesDir; #[Test] public function it_should_create_document_with_basic_properties(): void { $document = Document::create( description: 'Test Description', outputPath: '/path/to/output.txt', overwrite: true, ); $this->assertEquals('Test Description', $document->description); $this->assertEquals('/path/to/output.txt', $document->outputPath); $this->assertTrue($document->overwrite); $this->assertEmpty($document->getModifiers()); $this->assertEmpty($document->getTags()); $this->assertEmpty($document->getSources()); } #[Test] public function it_should_add_sources(): void { $source = $this->createMock(SourceInterface::class); $document = $this->document->addSource($source); $this->assertSame($this->document, $document); $this->assertCount(1, $document->getSources()); $this->assertSame($source, $document->getSources()[0]); } #[Test] public function it_should_add_modifiers(): void { $modifier = new Modifier(name: 'some-modifier'); $document = $this->document->addModifier($modifier); $this->assertSame($this->document, $document); $this->assertCount(1, $document->getModifiers()); $this->assertSame($modifier, $document->getModifiers()[0]); } #[Test] public function it_should_add_tags(): void { $document = $this->document->addTag('tag1', 'tag2'); $this->assertSame($this->document, $document); $this->assertCount(2, $document->getTags()); $this->assertTrue($document->hasTags()); } #[Test] public function it_should_include_source_tags_when_getting_tags(): void { $source = $this->createMock(SourceInterface::class); $source->method('getTags')->willReturn(['source-tag']); $document = $this->document->addSource($source); $tags = $document->getTags(true); $this->assertCount(1, $tags); $this->assertContains('source-tag', $tags); } #[Test] public function it_should_not_include_source_tags_when_getting_tags(): void { $source = $this->createMock(SourceInterface::class); $source->method('getTags')->willReturn(['source-tag']); $document = $this->document->addSource($source); $tags = $document->getTags(false); $this->assertEmpty($tags); } #[Test] public function it_should_json_serialize_correctly(): void { $source = $this->createMock(SourceInterface::class); $modifier = new Modifier(name: 'some-modifier'); $document = $this->document ->addSource($source) ->addModifier($modifier) ->addTag('tag1'); $json = $document->jsonSerialize(); $this->assertArrayHasKey('description', $json); $this->assertArrayHasKey('outputPath', $json); $this->assertArrayHasKey('overwrite', $json); $this->assertArrayHasKey('sources', $json); $this->assertArrayHasKey('modifiers', $json); $this->assertArrayHasKey('tags', $json); } #[Test] public function it_should_handle_modifiers_with_context(): void { $modifier = new Modifier( name: 'test-modifier', context: ['key' => 'value'], ); $document = $this->document->addModifier($modifier); $modifiers = $document->getModifiers(); $this->assertCount(1, $modifiers); $this->assertEquals('test-modifier', $modifiers[0]->name); $this->assertEquals(['key' => 'value'], $modifiers[0]->context); } #[Test] public function it_should_handle_modifiers_from_array(): void { $modifier = Modifier::from([ 'name' => 'test-modifier', 'options' => ['key' => 'value'], ]); $document = $this->document->addModifier($modifier); $modifiers = $document->getModifiers(); $this->assertCount(1, $modifiers); $this->assertEquals('test-modifier', $modifiers[0]->name); $this->assertEquals(['key' => 'value'], $modifiers[0]->context); } #[Test] public function it_should_handle_modifiers_from_string(): void { $modifier = Modifier::from('test-modifier'); $document = $this->document->addModifier($modifier); $modifiers = $document->getModifiers(); $this->assertCount(1, $modifiers); $this->assertEquals('test-modifier', $modifiers[0]->name); $this->assertEmpty($modifiers[0]->context); } #[Test] public function it_should_handle_source_parsing(): void { $parser = $this->createMock(SourceParserInterface::class); $modifiersApplier = $this->createMock(ModifiersApplierInterface::class); $source = $this->createMock(SourceInterface::class); $source ->method('parseContent') ->with($parser, $modifiersApplier) ->willReturn('parsed content'); $document = $this->document->addSource($source); $sources = $document->getSources(); $this->assertCount(1, $sources); $this->assertSame($source, $sources[0]); } #[Test] public function it_should_handle_source_description(): void { $source = $this->createMock(SourceInterface::class); $source->method('getDescription')->willReturn('source description'); $source->method('hasDescription')->willReturn(true); $document = $this->document->addSource($source); $sources = $document->getSources(); $this->assertCount(1, $sources); $this->assertEquals('source description', $sources[0]->getDescription()); $this->assertTrue($sources[0]->hasDescription()); } protected function setUp(): void { $this->fixturesDir = \dirname(__DIR__, 3) . '/fixtures/Document'; $this->document = Document::create( description: 'Test Document', outputPath: $this->fixturesDir . '/output.txt', ); } }

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