| 177 | * Assert that results match expected, with message count logging |
| 178 | */ |
| 179 | export function assertResults<T>( |
| 180 | testName: string, |
| 181 | actual: TestResult<T>, |
| 182 | expected: Array<T>, |
| 183 | maxExpectedMessages?: number, |
| 184 | ) { |
| 185 | const expectedMap = createExpectedResults(expected) |
| 186 | const expectedSorted = mapToSortedArray(expectedMap) |
| 187 | |
| 188 | if (LOG_RESULTS) { |
| 189 | console.log( |
| 190 | `${testName}: ${actual.messageCount} messages, ${actual.sortedResults.length} final results`, |
| 191 | ) |
| 192 | console.log(` Messages:`, actual.messages) |
| 193 | console.log(` Final results:`, actual.sortedResults) |
| 194 | } |
| 195 | |
| 196 | // Check that materialized results match expected |
| 197 | expect(actual.sortedResults).toEqual(expectedSorted) |
| 198 | |
| 199 | // Check message count constraints if provided |
| 200 | if (maxExpectedMessages !== undefined) { |
| 201 | expect(actual.messageCount).toBeLessThanOrEqual(maxExpectedMessages) |
| 202 | } |
| 203 | |
| 204 | // Log for debugging - use more reasonable threshold |
| 205 | // For empty results, allow up to 2 messages (typical for removal operations) |
| 206 | // For non-empty results, allow up to 3x the expected count |
| 207 | const reasonableThreshold = expected.length === 0 ? 2 : expected.length * 3 |
| 208 | if (actual.messageCount > reasonableThreshold) { |
| 209 | console.warn( |
| 210 | `⚠️ ${testName}: High message count (${actual.messageCount} messages for ${expected.length} expected results)`, |
| 211 | ) |
| 212 | } |
| 213 | } |
| 214 | |
| 215 | /** |
| 216 | * Assert that keyed results match expected, with message count logging |