Skip to content

Commit 8f64268

Browse files
committed
Tests: Add idle poll query count assertion for collaboration endpoint
Asserts that an idle poll (no new updates) uses at most 3 queries per room: awareness upsert, awareness read with ownership check, and the combined MAX+COUNT snapshot query.
1 parent f27568a commit 8f64268

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

tests/phpunit/tests/rest-api/rest-collaboration-server.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,4 +1664,52 @@ public function test_collaboration_null_awareness_skips_write() {
16641664
$this->assertArrayHasKey( 1, $awareness, 'Client 1 awareness should be readable by client 2.' );
16651665
$this->assertSame( array( 'cursor' => 'active' ), $awareness[1], 'Client 1 awareness state should match.' );
16661666
}
1667+
1668+
/*
1669+
* Query count tests.
1670+
*/
1671+
1672+
/**
1673+
* An idle poll (no new updates) should use at most 3 queries per room:
1674+
* 1. INSERT … ON DUPLICATE KEY UPDATE (awareness upsert)
1675+
* 2. SELECT … FROM awareness (awareness read + ownership check)
1676+
* 3. SELECT MAX(id), COUNT(*) FROM collaboration (snapshot + count)
1677+
*
1678+
* @ticket 64696
1679+
*/
1680+
public function test_collaboration_idle_poll_query_count(): void {
1681+
global $wpdb;
1682+
1683+
wp_set_current_user( self::$editor_id );
1684+
1685+
$room = $this->get_post_room();
1686+
1687+
// Prime awareness so subsequent polls are idle heartbeats.
1688+
$this->dispatch_collaboration(
1689+
array(
1690+
$this->build_room( $room, 1, 0, array( 'user' => 'test' ) ),
1691+
)
1692+
);
1693+
1694+
$cursor = 0;
1695+
1696+
// Count queries for an idle poll (no updates to fetch).
1697+
$queries_before = $wpdb->num_queries;
1698+
1699+
$response = $this->dispatch_collaboration(
1700+
array(
1701+
$this->build_room( $room, 1, $cursor, array( 'user' => 'test' ) ),
1702+
)
1703+
);
1704+
1705+
$this->assertSame( 200, $response->get_status(), 'Idle poll should succeed.' );
1706+
1707+
$query_count = $wpdb->num_queries - $queries_before;
1708+
1709+
$this->assertLessThanOrEqual(
1710+
3,
1711+
$query_count,
1712+
sprintf( 'Idle poll should use at most 3 queries per room, used %d.', $query_count )
1713+
);
1714+
}
16671715
}

0 commit comments

Comments
 (0)