|
10 | 10 | use Laravel\Boost\Mcp\Tools\BrowserLogs; |
11 | 11 | use Laravel\Boost\Middleware\InjectBoost; |
12 | 12 | use Laravel\Boost\Services\BrowserLogger; |
13 | | -use Laravel\Mcp\Server\Tools\ToolResult; |
14 | 13 |
|
15 | 14 | beforeEach(function () { |
16 | 15 | // Clean up any existing browser.log file before each test |
|
36 | 35 | $tool = new BrowserLogs; |
37 | 36 | $result = $tool->handle(['entries' => 2]); |
38 | 37 |
|
39 | | - expect($result)->toBeInstanceOf(ToolResult::class); |
| 38 | + expect($result)->isToolResult() |
| 39 | + ->toolHasNoError() |
| 40 | + ->toolTextContains('browser.WARNING: Warning message', 'browser.ERROR: JavaScript error occurred') |
| 41 | + ->toolTextDoesNotContain('browser.DEBUG: console log message'); |
40 | 42 |
|
41 | 43 | $data = $result->toArray(); |
42 | | - expect($data['isError'])->toBeFalse(); |
43 | 44 | expect($data['content'][0]['type'])->toBe('text'); |
44 | | - |
45 | | - $text = $data['content'][0]['text']; |
46 | | - expect($text)->toContain('browser.WARNING: Warning message'); |
47 | | - expect($text)->toContain('browser.ERROR: JavaScript error occurred'); |
48 | | - expect($text)->not->toContain('browser.DEBUG: console log message'); |
49 | 45 | }); |
50 | 46 |
|
51 | 47 | test('it returns error when entries argument is invalid', function () { |
52 | 48 | $tool = new BrowserLogs; |
53 | 49 |
|
54 | 50 | // Test with zero |
55 | 51 | $result = $tool->handle(['entries' => 0]); |
56 | | - expect($result)->toBeInstanceOf(ToolResult::class); |
57 | | - |
58 | | - $data = $result->toArray(); |
59 | | - expect($data['isError'])->toBeTrue(); |
60 | | - expect($data['content'][0]['text'])->toBe('The "entries" argument must be greater than 0.'); |
| 52 | + expect($result)->isToolResult() |
| 53 | + ->toolHasError() |
| 54 | + ->toolTextContains('The "entries" argument must be greater than 0.'); |
61 | 55 |
|
62 | 56 | // Test with negative |
63 | 57 | $result = $tool->handle(['entries' => -5]); |
64 | | - expect($result)->toBeInstanceOf(ToolResult::class); |
65 | | - |
66 | | - $data = $result->toArray(); |
67 | | - expect($data['isError'])->toBeTrue(); |
68 | | - expect($data['content'][0]['text'])->toBe('The "entries" argument must be greater than 0.'); |
| 58 | + expect($result)->isToolResult() |
| 59 | + ->toolHasError() |
| 60 | + ->toolTextContains('The "entries" argument must be greater than 0.'); |
69 | 61 | }); |
70 | 62 |
|
71 | 63 | test('it returns error when log file does not exist', function () { |
72 | 64 | $tool = new BrowserLogs; |
73 | 65 | $result = $tool->handle(['entries' => 10]); |
74 | 66 |
|
75 | | - expect($result)->toBeInstanceOf(ToolResult::class); |
76 | | - |
77 | | - $data = $result->toArray(); |
78 | | - expect($data['isError'])->toBeTrue(); |
79 | | - expect($data['content'][0]['text'])->toBe('No log file found, probably means no logs yet.'); |
| 67 | + expect($result)->isToolResult() |
| 68 | + ->toolHasError() |
| 69 | + ->toolTextContains('No log file found, probably means no logs yet.'); |
80 | 70 | }); |
81 | 71 |
|
82 | 72 | test('it returns error when log file is empty', function () { |
|
88 | 78 | $tool = new BrowserLogs; |
89 | 79 | $result = $tool->handle(['entries' => 5]); |
90 | 80 |
|
91 | | - expect($result)->toBeInstanceOf(ToolResult::class); |
92 | | - |
93 | | - $data = $result->toArray(); |
94 | | - expect($data['isError'])->toBeFalse(); |
95 | | - expect($data['content'][0]['text'])->toBe('Unable to retrieve log entries, or no logs'); |
| 81 | + expect($result)->isToolResult() |
| 82 | + ->toolHasNoError() |
| 83 | + ->toolTextContains('Unable to retrieve log entries, or no logs'); |
96 | 84 | }); |
97 | 85 |
|
98 | 86 | test('@boostJs blade directive renders browser logger script', function () { |
|
106 | 94 |
|
107 | 95 | // Test that the script contains expected content |
108 | 96 | $script = BrowserLogger::getScript(); |
109 | | - expect($script)->toContain('browser-logger-active'); |
110 | | - expect($script)->toContain('/_boost/browser-logs'); |
111 | | - expect($script)->toContain('console.log'); |
112 | | - expect($script)->toContain('console.error'); |
113 | | - expect($script)->toContain('window.onerror'); |
| 97 | + expect($script)->toContain('browser-logger-active') |
| 98 | + ->and($script)->toContain('/_boost/browser-logs') |
| 99 | + ->and($script)->toContain('console.log') |
| 100 | + ->and($script)->toContain('console.error') |
| 101 | + ->and($script)->toContain('window.onerror'); |
114 | 102 | }); |
115 | 103 |
|
116 | 104 | test('browser logs endpoint processes logs correctly', function () { |
|
215 | 203 | }); |
216 | 204 |
|
217 | 205 | $content = $result->getContent(); |
218 | | - expect($content)->toContain('browser-logger-active'); |
219 | | - expect($content)->toContain('</head>'); |
220 | | - expect(substr_count($content, 'browser-logger-active'))->toBe(1); // Should not inject twice |
| 206 | + expect($content)->toContain('browser-logger-active') |
| 207 | + ->and($content)->toContain('</head>') |
| 208 | + // Should not inject twice |
| 209 | + ->and(substr_count($content, 'browser-logger-active'))->toBe(1); |
221 | 210 | }); |
222 | 211 |
|
223 | 212 | test('InjectBoost middleware does not inject into non-HTML responses', function () { |
|
233 | 222 | }); |
234 | 223 |
|
235 | 224 | $content = $result->getContent(); |
236 | | - expect($content)->toBe($json); |
237 | | - expect($content)->not->toContain('browser-logger-active'); |
| 225 | + expect($content)->toBe($json) |
| 226 | + ->and($content)->not->toContain('browser-logger-active'); |
238 | 227 | }); |
239 | 228 |
|
240 | 229 | test('InjectBoost middleware does not inject script twice', function () { |
|
284 | 273 | }); |
285 | 274 |
|
286 | 275 | $content = $result->getContent(); |
287 | | - expect($content)->toContain('browser-logger-active'); |
288 | | - expect($content)->toMatch('/<script[^>]*browser-logger-active[^>]*>.*<\/script>\s*<\/body>/s'); |
| 276 | + expect($content)->toContain('browser-logger-active') |
| 277 | + ->and($content)->toMatch('/<script[^>]*browser-logger-active[^>]*>.*<\/script>\s*<\/body>/s'); |
289 | 278 | }); |
0 commit comments