diff --git a/tests/10apidoc/34room-messages.pl b/tests/10apidoc/34room-messages.pl index 9bcf97164..b83c47eee 100644 --- a/tests/10apidoc/34room-messages.pl +++ b/tests/10apidoc/34room-messages.pl @@ -136,6 +136,7 @@ sub matrix_send_room_text_message check => sub { my ( $user, $room_id ) = @_; + my $token; matrix_send_room_text_message_synced( $user, $room_id, body => "Here is the message content", @@ -143,8 +144,7 @@ sub matrix_send_room_text_message matrix_sync( $user ) })->then( sub { my ( $sync_body ) = @_; - my $token = $sync_body->{rooms}->{join}->{$room_id}->{timeline}->{prev_batch}; - + $token = $sync_body->{rooms}->{join}->{$room_id}->{timeline}->{prev_batch}; do_request_json_for( $user, method => "GET", uri => "/v3/rooms/$room_id/messages", @@ -158,12 +158,30 @@ sub matrix_send_room_text_message })->then( sub { my ( $body ) = @_; + # We should still get events and a "end" key: check they are actually there assert_json_keys( $body, qw( start end chunk )); assert_json_list( $body->{chunk} ); + $token = $body->{end}; scalar @{ $body->{chunk} } > 0 or die "Expected some messages but got none at all\n"; + })->then( sub { + # Do another call to /messages. This time we don't expect to receive a "end" key + do_request_json_for( $user, + method => "GET", + uri => "/v3/rooms/$room_id/messages", + params => { + dir => "b", + from => $token, + }, + ) + })->then( sub { + my ( $body ) = @_; + assert_json_keys( $body, qw( start chunk )); + if( exists $body->{end} ) { + die "Unexpected 'end' key in response" + } Future->done(1); }); }; @@ -174,6 +192,7 @@ sub matrix_send_room_text_message check => sub { my ( $user, $room_id ) = @_; + my $token; matrix_send_room_text_message_synced( $user, $room_id, body => "Here is the message content", @@ -181,7 +200,7 @@ sub matrix_send_room_text_message matrix_sync( $user ) })->then( sub { my ( $sync_body ) = @_; - my $token = $sync_body->{rooms}->{join}->{$room_id}->{timeline}->{prev_batch}; + $token = $sync_body->{rooms}->{join}->{$room_id}->{timeline}->{prev_batch}; do_request_json_for( $user, method => "GET", @@ -197,10 +216,12 @@ sub matrix_send_room_text_message my ( $body ) = @_; log_if_fail "Body", $body; - + + # We should still get events and a "end" key: check they are actually there assert_json_keys( $body, qw( start end state chunk )); assert_json_list( $body->{chunk} ); assert_json_list( $body->{state} ); + $token = $body->{end}; assert_eq( scalar @{$body->{state}}, 1); assert_eq( $body->{state}[0]{type}, 'm.room.member'); @@ -209,6 +230,23 @@ sub matrix_send_room_text_message scalar @{ $body->{chunk} } > 0 or die "Expected some messages but got none at all\n"; + })->then( sub { + # Do another call to /messages. This time we don't expect to receive a "end" key + do_request_json_for( $user, + method => "GET", + uri => "/v3/rooms/$room_id/messages", + params => { + dir => "b", + from => $token, + }, + ) + })->then( sub { + my ( $body ) = @_; + + assert_json_keys( $body, qw( start chunk )); + if( exists $body->{end} ) { + die "Unexpected 'end' key in response" + } Future->done(1); }); };