@@ -172,6 +172,7 @@ async function waitForObservedApprovalEvent(params: {
172172 context : MatrixQaScenarioContext ;
173173 expectedApprovalId : string ;
174174 expectedKind : MatrixQaApprovalKind ;
175+ excludedRoomIds ?: string [ ] ;
175176 roomIds : string [ ] ;
176177 timeoutMs : number ;
177178} ) {
@@ -183,16 +184,31 @@ async function waitForObservedApprovalEvent(params: {
183184 if ( ! primaryRoomId ) {
184185 throw new Error ( "Matrix approval wait requires at least one candidate room" ) ;
185186 }
186- const startedAt = Date . now ( ) ;
187- while ( Date . now ( ) - startedAt < params . timeoutMs ) {
188- const observedMatch = params . context . observedEvents . find ( ( event ) =>
187+ const excludedRoomIds = new Set ( params . excludedRoomIds ?? [ ] ) ;
188+ const isExpectedObservedApproval = ( event : MatrixQaObservedEvent ) => {
189+ if ( excludedRoomIds . has ( event . roomId ) ) {
190+ return false ;
191+ }
192+ if (
189193 roomIds . some ( ( roomId ) =>
190194 isExpectedApprovalEvent ( event , {
191195 ...params ,
192196 roomId,
193197 } ) ,
194- ) ,
198+ )
199+ ) {
200+ return true ;
201+ }
202+ return (
203+ event . sender === params . context . sutUserId &&
204+ event . type === "m.room.message" &&
205+ event . approval ?. kind === params . expectedKind &&
206+ event . approval . id === params . expectedApprovalId
195207 ) ;
208+ } ;
209+ const startedAt = Date . now ( ) ;
210+ while ( Date . now ( ) - startedAt < params . timeoutMs ) {
211+ const observedMatch = params . context . observedEvents . find ( isExpectedObservedApproval ) ;
196212 if ( observedMatch ) {
197213 assertApprovalMetadata ( {
198214 event : observedMatch ,
@@ -209,13 +225,7 @@ async function waitForObservedApprovalEvent(params: {
209225 }
210226 await client . waitForOptionalRoomEvent ( {
211227 observedEvents : params . context . observedEvents ,
212- predicate : ( event ) =>
213- roomIds . some ( ( roomId ) =>
214- isExpectedApprovalEvent ( event , {
215- ...params ,
216- roomId,
217- } ) ,
218- ) ,
228+ predicate : isExpectedObservedApproval ,
219229 roomId : primaryRoomId ,
220230 timeoutMs : Math . min ( 1_000 , remainingMs ) ,
221231 } ) ;
@@ -674,6 +684,7 @@ export async function runApprovalChannelTargetBothScenario(context: MatrixQaScen
674684 } ) ;
675685 const dmApproval = await waitForObservedApprovalEvent ( {
676686 context,
687+ excludedRoomIds : [ context . roomId ] ,
677688 expectedApprovalId : approvalId ,
678689 expectedKind : "exec" ,
679690 roomIds : dmRoomIds ,
0 commit comments