Skip to main content
Glama
ResourcesTest.php5.68 kB
<?php declare(strict_types=1); use GoldenPathDigital\LaravelAscend\Documentation\KnowledgeBaseService; use GoldenPathDigital\LaravelAscend\Resources\BreakingChangesIndexResource; use GoldenPathDigital\LaravelAscend\Resources\KnowledgeBaseSummaryResource; use GoldenPathDigital\LaravelAscend\Resources\PatternsIndexResource; use GoldenPathDigital\LaravelAscend\Resources\UpgradePathsResource; beforeEach(function () { $this->knowledgeBase = KnowledgeBaseService::createDefault(); }); test('knowledge base summary resource has correct name', function () { $resource = new KnowledgeBaseSummaryResource($this->knowledgeBase); expect($resource->name())->toBe('ascend://knowledge-base/summary'); }); test('knowledge base summary resource returns array structure', function () { $resource = new KnowledgeBaseSummaryResource($this->knowledgeBase); $array = $resource->toArray(); expect($array)->toBeArray() ->toHaveKey('uri') ->toHaveKey('name') ->toHaveKey('description') ->toHaveKey('mimeType') ->toHaveKey('content'); expect($array['mimeType'])->toBe('application/json'); expect($array['uri'])->toBe('ascend://knowledge-base/summary'); }); test('knowledge base summary resource has valid json content', function () { $resource = new KnowledgeBaseSummaryResource($this->knowledgeBase); $array = $resource->toArray(); $decoded = json_decode($array['content'], true); expect($decoded)->toBeArray() ->and(json_last_error())->toBe(JSON_ERROR_NONE); }); test('breaking changes index resource has correct name', function () { $resource = new BreakingChangesIndexResource($this->knowledgeBase); expect($resource->name())->toBe('ascend://knowledge-base/breaking-changes'); }); test('breaking changes index resource returns valid structure', function () { $resource = new BreakingChangesIndexResource($this->knowledgeBase); $array = $resource->toArray(); expect($array)->toBeArray() ->toHaveKey('uri') ->toHaveKey('name') ->toHaveKey('description') ->toHaveKey('mimeType') ->toHaveKey('content'); $decoded = json_decode($array['content'], true); expect($decoded)->toBeArray() ->toHaveKey('total') ->toHaveKey('versions'); }); test('breaking changes index contains version data', function () { $resource = new BreakingChangesIndexResource($this->knowledgeBase); $array = $resource->toArray(); $decoded = json_decode($array['content'], true); expect($decoded['total'])->toBeGreaterThan(0) ->and($decoded['versions'])->toBeArray(); if (!empty($decoded['versions'])) { $firstVersion = $decoded['versions'][0]; expect($firstVersion)->toHaveKeys(['slug', 'version', 'title', 'change_count', 'uri']); } }); test('patterns index resource has correct name', function () { $resource = new PatternsIndexResource($this->knowledgeBase); expect($resource->name())->toBe('ascend://knowledge-base/patterns'); }); test('patterns index resource returns valid structure', function () { $resource = new PatternsIndexResource($this->knowledgeBase); $array = $resource->toArray(); expect($array)->toBeArray() ->toHaveKey('content'); $decoded = json_decode($array['content'], true); expect($decoded)->toBeArray() ->toHaveKey('total') ->toHaveKey('patterns'); }); test('patterns index contains pattern data', function () { $resource = new PatternsIndexResource($this->knowledgeBase); $array = $resource->toArray(); $decoded = json_decode($array['content'], true); expect($decoded['total'])->toBeGreaterThan(0) ->and($decoded['patterns'])->toBeArray(); if (!empty($decoded['patterns'])) { $firstPattern = $decoded['patterns'][0]; expect($firstPattern)->toHaveKeys(['id', 'name', 'description', 'versions_affected', 'uri']); } }); test('upgrade paths resource has correct name', function () { $resource = new UpgradePathsResource($this->knowledgeBase); expect($resource->name())->toBe('ascend://knowledge-base/upgrade-paths'); }); test('upgrade paths resource returns valid structure', function () { $resource = new UpgradePathsResource($this->knowledgeBase); $array = $resource->toArray(); expect($array)->toBeArray() ->toHaveKey('content'); $decoded = json_decode($array['content'], true); expect($decoded)->toBeArray() ->toHaveKey('total') ->toHaveKey('paths'); }); test('all resources implement ResourceInterface', function () { $resources = [ new KnowledgeBaseSummaryResource($this->knowledgeBase), new BreakingChangesIndexResource($this->knowledgeBase), new PatternsIndexResource($this->knowledgeBase), new UpgradePathsResource($this->knowledgeBase), ]; foreach ($resources as $resource) { expect($resource)->toBeInstanceOf(\GoldenPathDigital\LaravelAscend\Server\Mcp\Contracts\ResourceInterface::class); } }); test('all resources return valid json', function () { $resources = [ new KnowledgeBaseSummaryResource($this->knowledgeBase), new BreakingChangesIndexResource($this->knowledgeBase), new PatternsIndexResource($this->knowledgeBase), new UpgradePathsResource($this->knowledgeBase), ]; foreach ($resources as $resource) { $array = $resource->toArray(); $decoded = json_decode($array['content'], true); expect(json_last_error())->toBe( JSON_ERROR_NONE, 'Resource ' . $resource->name() . ' should return valid JSON', ); } });

Latest Blog Posts

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/aarongrtech/laravel-ascend'

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