Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 23 additions & 16 deletions tests/30rooms/03members-remote.pl
Original file line number Diff line number Diff line change
Expand Up @@ -102,29 +102,36 @@

my %presence = map { $_->{content}{user_id} => $_ } @{ $body->{presence} };

if( not $presence{$first_user->user_id} ) {
log_if_fail "No presence for user " . $first_user->user_id . ": retrying";
return Future->done( undef ); # try again
}
# it's possible that the user's presence hasn't yet arrived at our
# server (or hasn't propagated between the workers). In this case,
# we expect the presence value to be either missing, or present
# (hah!) with a default value.

if( $presence{$first_user->user_id}{content}{presence} ne 'online' ) {
log_if_fail "User " . $first_user->user_id . "not yet online: retrying";
my $first_user_id = $first_user->user_id;
my $first_presence = $presence{$first_user_id};

if( not $first_presence ) {
log_if_fail "No presence for user $first_user_id: retrying";
return Future->done( undef ); # try again
}

return Future->done( \%presence );
})
})->then( sub {
my ( $presencemap ) = @_;
assert_json_keys( $first_presence, qw( type content ));
assert_json_keys( $first_presence->{content}, qw( presence ));

log_if_fail "presence map: ", $presencemap;
if( $first_presence->{content}{presence} eq 'offline' &&
not exists $first_presence->{content}{last_active_ago} ) {
log_if_fail "Default presence block for user $first_user_id: retrying";
return Future->done( undef ); # try again
}

assert_json_keys( $presencemap->{ $first_user->user_id },
qw( type content ));
assert_json_keys( $presencemap->{ $first_user->user_id }{content},
qw( presence last_active_ago ));
# otherwise, there should be a last_active_ago field.
# (the user may or may not actually be online, because it might
# have taken quite a while for us to spin up the prerequisites for
# this test).
assert_json_keys( $first_presence->{content}, qw( last_active_ago ));

Future->done(1);
return Future->done( 1 );
})
});
};

Expand Down