'127.0.0.1', 'MYSQL_PORT' => (string) (getenv('MYSQL_TUNNEL_LOCAL_PORT') ?: '13306'), 'MYSQL_USER' => Env::require('REMOTE_MYSQL_USER'), 'MYSQL_PASSWORD' => Env::require('REMOTE_MYSQL_PASSWORD'), 'MAILSHOTS_REMOTE_MYSQL_DB' => Env::require('MAILSHOTS_REMOTE_MYSQL_DB'), 'MEMBERS_REMOTE_MYSQL_DB' => Env::require('MEMBERS_REMOTE_MYSQL_DB'), 'FEN_REMOTE_MYSQL_DB' => Env::require('FEN_REMOTE_MYSQL_DB'), ]; $router = new PdoDatabaseRouter($dbConfig); $queries = new MailshotQueryRepository($router); $mailshots = new MailshotRepository($router); $metadata = new DatabaseSourceMetadataProvider($router); $service = new DataSourceService( $queries, $router, new DslParser(), new DslValidator($metadata), new DslCompiler($metadata), $metadata, $mailshots ); $first = $service->review('contacts', 3, 0); $second = $service->review('contacts', 3, 3); foreach ([$first, $second] as $result) { if (($result['errors'] ?? []) !== []) { fwrite(STDERR, 'Review recipients paging returned errors: ' . implode('; ', (array) $result['errors']) . "\n"); exit(1); } if ((int) ($result['returned_count'] ?? 0) > 3 || count((array) ($result['rows'] ?? [])) > 3) { fwrite(STDERR, "Review recipients paging exceeded the requested limit\n"); exit(1); } } if ((int) ($first['count'] ?? 0) !== (int) ($second['count'] ?? -1)) { fwrite(STDERR, "Review recipients paging should preserve the total count across pages\n"); exit(1); } if ((int) ($second['offset'] ?? -1) !== 3) { fwrite(STDERR, "Review recipients second page should report the requested offset\n"); exit(1); } echo "Review recipients paging regression test passed\n";