@@ -2435,16 +2435,96 @@ describe("Room", function() {
24352435 expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( "eventId" ) ;
24362436 } ) ;
24372437
2438- it ( "prefers older receipt" , ( ) => {
2439- room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2440- return ( receiptType === ReceiptType . Read
2441- ? { eventId : "eventId1" }
2442- : { eventId : "eventId2" }
2443- ) as IWrappedReceipt ;
2444- } ;
2445- room . getUnfilteredTimelineSet = ( ) => ( { compareEventOrdering : ( event1 , event2 ) => 1 } as EventTimelineSet ) ;
2438+ describe ( "prefers newer receipt" , ( ) => {
2439+ it ( "should compare correctly using timelines" , ( ) => {
2440+ room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2441+ if ( receiptType === ReceiptType . ReadPrivate ) {
2442+ return { eventId : "eventId1" } as IWrappedReceipt ;
2443+ }
2444+ if ( receiptType === ReceiptType . UnstableReadPrivate ) {
2445+ return { eventId : "eventId2" } as IWrappedReceipt ;
2446+ }
2447+ if ( receiptType === ReceiptType . Read ) {
2448+ return { eventId : "eventId3" } as IWrappedReceipt ;
2449+ }
2450+ } ;
2451+
2452+ for ( let i = 1 ; i <= 3 ; i ++ ) {
2453+ room . getUnfilteredTimelineSet = ( ) => ( { compareEventOrdering : ( event1 , event2 ) => {
2454+ return ( event1 === `eventId${ i } ` ) ? 1 : - 1 ;
2455+ } } as EventTimelineSet ) ;
2456+
2457+ expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( `eventId${ i } ` ) ;
2458+ }
2459+ } ) ;
2460+
2461+ it ( "should compare correctly by timestamp" , ( ) => {
2462+ for ( let i = 1 ; i <= 3 ; i ++ ) {
2463+ room . getUnfilteredTimelineSet = ( ) => ( {
2464+ compareEventOrdering : ( _1 , _2 ) => null ,
2465+ } as EventTimelineSet ) ;
2466+ room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2467+ if ( receiptType === ReceiptType . ReadPrivate ) {
2468+ return { eventId : "eventId1" , data : { ts : i === 1 ? 1 : 0 } } as IWrappedReceipt ;
2469+ }
2470+ if ( receiptType === ReceiptType . UnstableReadPrivate ) {
2471+ return { eventId : "eventId2" , data : { ts : i === 2 ? 1 : 0 } } as IWrappedReceipt ;
2472+ }
2473+ if ( receiptType === ReceiptType . Read ) {
2474+ return { eventId : "eventId3" , data : { ts : i === 3 ? 1 : 0 } } as IWrappedReceipt ;
2475+ }
2476+ } ;
2477+
2478+ expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( `eventId${ i } ` ) ;
2479+ }
2480+ } ) ;
24462481
2447- expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( "eventId1" ) ;
2482+ describe ( "fallback precedence" , ( ) => {
2483+ beforeAll ( ( ) => {
2484+ room . getUnfilteredTimelineSet = ( ) => ( {
2485+ compareEventOrdering : ( _1 , _2 ) => null ,
2486+ } as EventTimelineSet ) ;
2487+ } ) ;
2488+
2489+ it ( "should give precedence to m.read.private" , ( ) => {
2490+ room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2491+ if ( receiptType === ReceiptType . ReadPrivate ) {
2492+ return { eventId : "eventId1" } as IWrappedReceipt ;
2493+ }
2494+ if ( receiptType === ReceiptType . UnstableReadPrivate ) {
2495+ return { eventId : "eventId2" } as IWrappedReceipt ;
2496+ }
2497+ if ( receiptType === ReceiptType . Read ) {
2498+ return { eventId : "eventId3" } as IWrappedReceipt ;
2499+ }
2500+ } ;
2501+
2502+ expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( `eventId1` ) ;
2503+ } ) ;
2504+
2505+ it ( "should give precedence to org.matrix.msc2285.read.private" , ( ) => {
2506+ room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2507+ if ( receiptType === ReceiptType . UnstableReadPrivate ) {
2508+ return { eventId : "eventId2" } as IWrappedReceipt ;
2509+ }
2510+ if ( receiptType === ReceiptType . Read ) {
2511+ return { eventId : "eventId2" } as IWrappedReceipt ;
2512+ }
2513+ } ;
2514+
2515+ expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( `eventId2` ) ;
2516+ } ) ;
2517+
2518+ it ( "should give precedence to m.read" , ( ) => {
2519+ room . getReadReceiptForUserId = ( userId , ignore , receiptType ) => {
2520+ if ( receiptType === ReceiptType . Read ) {
2521+ return { eventId : "eventId3" } as IWrappedReceipt ;
2522+ }
2523+ } ;
2524+
2525+ expect ( room . getEventReadUpTo ( userA ) ) . toEqual ( `eventId3` ) ;
2526+ } ) ;
2527+ } ) ;
24482528 } ) ;
24492529 } ) ;
24502530} ) ;
0 commit comments