create([ 'slug' => 'm18h1-deferred-comments', ]); ArtworkComment::factory()->count(2)->create(['artwork_id' => $artwork->id]); DB::enableQueryLog(); DB::flushQueryLog(); $response = $this->get(route('art.show', ['id' => $artwork->id, 'slug' => $artwork->slug]))->assertOk(); $queries = collect(DB::getQueryLog()); DB::disableQueryLog(); expect($response->getContent())->not->toContain('"comments"') ->and($queries->filter(fn (array $query): bool => str_contains(strtolower($query['query']), 'artwork_comments'))->count())->toBe(0); }); it('keeps the existing complete comments API contract', function (): void { $artwork = Artwork::factory()->create(); $comment = ArtworkComment::factory()->create(['artwork_id' => $artwork->id]); $this->getJson("/api/artworks/{$artwork->id}/comments") ->assertOk() ->assertJsonStructure([ 'data' => [[ 'id', 'parent_id', 'raw_content', 'rendered_content', 'created_at', 'time_ago', 'user', 'reactions', 'replies', ]], 'meta' => ['current_page', 'last_page', 'total', 'per_page'], ]) ->assertJsonPath('data.0.id', $comment->id); }); it('measures the initial artwork detail SQL after deferring comments', function (): void { $artwork = Artwork::factory()->create([ 'slug' => 'm18h1-sql-measurement', ]); ArtworkComment::factory()->count(2)->create(['artwork_id' => $artwork->id]); DB::flushQueryLog(); DB::enableQueryLog(); $this->get(route('art.show', ['id' => $artwork->id, 'slug' => $artwork->slug])) ->assertOk(); $queries = DB::getQueryLog(); DB::disableQueryLog(); $normalized = collect($queries)->map(fn (array $query): string => strtolower(preg_replace('/\s+/', ' ', $query['query']))); $selects = $normalized->filter(fn (string $query): bool => str_starts_with(ltrim($query), 'select ')); $writes = $normalized->reject(fn (string $query): bool => str_starts_with(ltrim($query), 'select ')); $commentQueries = $normalized->filter(fn (string $query): bool => str_contains($query, 'artwork_comments')); fwrite(STDERR, sprintf( "M18H1_SQL initial_guest_total=%d initial_guest_select=%d initial_guest_write=%d initial_guest_comment_queries=%d\n", count($queries), $selects->count(), $writes->count(), $commentQueries->count(), )); expect($commentQueries)->toHaveCount(0); });