mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-06-11 02:50:29 +00:00
✨ Add SearchMeetupsTool for duplication prevention
- 🔍 Introduced `SearchMeetupsTool` to find existing meetups by name or city before creating new ones. - ☑️ Updated `CreateMeetupTool` description and logic to enforce pre-checks for existing meetups. - 🛠️ Adjusted `EinundzwanzigServer` to include `SearchMeetupsTool` in tools list. - ✅ Added feature tests to verify meetup search functionality and ensure duplication avoidance.
This commit is contained in:
@@ -17,7 +17,7 @@ it('registers every domain tool on the server', function () {
|
||||
$property = (new ReflectionClass(EinundzwanzigServer::class))->getProperty('tools');
|
||||
$tools = $property->getDefaultValue();
|
||||
|
||||
expect($tools)->toHaveCount(30)
|
||||
expect($tools)->toHaveCount(31)
|
||||
->and($tools)->toContain(CreateMeetupTool::class)
|
||||
->and($tools)->toContain(UpdateCourseEventTool::class)
|
||||
->and($tools)->toContain(SearchCitiesTool::class);
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use App\Mcp\Servers\EinundzwanzigServer;
|
||||
use App\Mcp\Tools\Search\SearchMeetupsTool;
|
||||
use App\Models\City;
|
||||
use App\Models\Meetup;
|
||||
use App\Models\User;
|
||||
|
||||
it('finds an existing meetup by its name', function () {
|
||||
Meetup::factory()->create(['name' => 'Einundzwanzig München']);
|
||||
|
||||
EinundzwanzigServer::actingAs(User::factory()->create())
|
||||
->tool(SearchMeetupsTool::class, ['search' => 'münchen'])
|
||||
->assertOk()
|
||||
->assertSee('Einundzwanzig München');
|
||||
});
|
||||
|
||||
it('finds an existing meetup by its city name', function () {
|
||||
$city = City::factory()->create(['name' => 'Nürnberg']);
|
||||
Meetup::factory()->create(['name' => 'Bitcoin Treff', 'city_id' => $city->id]);
|
||||
|
||||
EinundzwanzigServer::actingAs(User::factory()->create())
|
||||
->tool(SearchMeetupsTool::class, ['search' => 'Nürnberg'])
|
||||
->assertOk()
|
||||
->assertSee('Bitcoin Treff');
|
||||
});
|
||||
|
||||
it('returns no match for an unknown city so a new meetup can be proposed', function () {
|
||||
Meetup::factory()->create(['name' => 'Einundzwanzig München']);
|
||||
|
||||
$response = EinundzwanzigServer::actingAs(User::factory()->create())
|
||||
->tool(SearchMeetupsTool::class, ['search' => 'Gibtsnichtstadt']);
|
||||
|
||||
$response->assertOk()->assertDontSee('Einundzwanzig München');
|
||||
});
|
||||
Reference in New Issue
Block a user