117 lines
3.9 KiB
Perl
117 lines
3.9 KiB
Perl
|
|
# t/directorysearch-extra.t
|
||
|
|
#
|
||
|
|
# Test user search with friends/friendsof and interests.
|
||
|
|
#
|
||
|
|
# This code was forked from the LiveJournal project owned and operated
|
||
|
|
# by Live Journal, Inc. The code has been modified and expanded by
|
||
|
|
# Dreamwidth Studios, LLC. These files were originally licensed under
|
||
|
|
# the terms of the license supplied by Live Journal, Inc, which can
|
||
|
|
# currently be found at:
|
||
|
|
#
|
||
|
|
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
|
||
|
|
#
|
||
|
|
# In accordance with the original license, this code and all its
|
||
|
|
# modifications are provided under the GNU General Public License.
|
||
|
|
# A copy of that license can be found in the LICENSE file included as
|
||
|
|
# part of this distribution.
|
||
|
|
|
||
|
|
use strict;
|
||
|
|
use warnings;
|
||
|
|
|
||
|
|
use Test::More;
|
||
|
|
|
||
|
|
BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
|
||
|
|
use LJ::Test;
|
||
|
|
use LJ::Directory::Search;
|
||
|
|
use LJ::ModuleCheck;
|
||
|
|
if ( LJ::ModuleCheck->have("LJ::UserSearch") ) {
|
||
|
|
|
||
|
|
# plan tests => 9;
|
||
|
|
plan skip_all => "User search without workers currently bitrotted";
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
plan 'skip_all' => "Need LJ::UserSearch module.";
|
||
|
|
exit 0;
|
||
|
|
}
|
||
|
|
use LJ::Directory::MajorRegion;
|
||
|
|
use LJ::Directory::PackedUserRecord;
|
||
|
|
|
||
|
|
local @LJ::GEARMAN_SERVERS = (); # don't dispatch set requests. all in-process.
|
||
|
|
|
||
|
|
my $u1 = temp_user();
|
||
|
|
my $u2 = temp_user();
|
||
|
|
my $usercount = $u2->userid;
|
||
|
|
|
||
|
|
# init the search system
|
||
|
|
my $inittime = time();
|
||
|
|
{
|
||
|
|
print "Building userset...\n";
|
||
|
|
LJ::UserSearch::reset_usermeta( 8 * ( $usercount + 1 ) );
|
||
|
|
for my $uid ( 0 .. $usercount ) {
|
||
|
|
my $lastupdate = $inittime - $usercount + $uid;
|
||
|
|
my $buf = LJ::Directory::PackedUserRecord->new(
|
||
|
|
updatetime => $lastupdate,
|
||
|
|
age => 100 + $uid < 256 ? 100 + $uid : 1,
|
||
|
|
|
||
|
|
# scatter around USA:
|
||
|
|
regionid => 1 + int( $uid % 60 ),
|
||
|
|
|
||
|
|
# even amount of all:
|
||
|
|
journaltype => ( ( "P", "I", "C", "Y" )[ $uid % 4 ] ),
|
||
|
|
)->packed;
|
||
|
|
LJ::UserSearch::add_usermeta( $buf, 8 );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# doing actual searches
|
||
|
|
memcache_stress(
|
||
|
|
sub {
|
||
|
|
{
|
||
|
|
my ( $search, $res );
|
||
|
|
|
||
|
|
$search = LJ::Directory::Search->new;
|
||
|
|
ok( $search, "made a search" );
|
||
|
|
|
||
|
|
# test friend/friendof searching
|
||
|
|
{
|
||
|
|
$u1->add_edge( $u2, watch => { nonotify => 1 } );
|
||
|
|
$u2->add_edge( $u1, watch => { nonotify => 1 } );
|
||
|
|
$u1->remove_edge( $u1, watch => { nonotify => 1 } );
|
||
|
|
$u2->remove_edge( $u2, watch => { nonotify => 1 } );
|
||
|
|
|
||
|
|
$search = LJ::Directory::Search->new;
|
||
|
|
$search->add_constraint(
|
||
|
|
LJ::Directory::Constraint::HasFriend->new( userid => $u2->userid ) );
|
||
|
|
$res = $search->search_no_dispatch;
|
||
|
|
is_deeply( [ $res->userids ], [ $u1->userid ], "hasfriend correct" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# test interests
|
||
|
|
{
|
||
|
|
$u1->set_interests( {}, [ 'chedda', 'gouda', 'mad cash', 'stax of lindenz' ] );
|
||
|
|
$u2->set_interests( {}, [ 'chedda', 'phat bank', 'yaper' ] );
|
||
|
|
$search = LJ::Directory::Search->new;
|
||
|
|
$search->add_constraint(
|
||
|
|
LJ::Directory::Constraint::Interest->new( interest => 'chedda' ) );
|
||
|
|
$res = $search->search_no_dispatch;
|
||
|
|
ok(
|
||
|
|
( grep { $_ == $u1->userid } $res->userids )
|
||
|
|
&& ( grep { $_ == $u2->userid } $res->userids ),
|
||
|
|
"interest search correct"
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
__END__
|
||
|
|
|
||
|
|
# kde last week
|
||
|
|
loc_cn=&loc_st=&loc_ci=&ut_days=7&int_like=kde&fr_user=&fro_user=&opt_format=pics&opt_sort=ut&opt_pagesize=100
|
||
|
|
|
||
|
|
# lists brad as friend:
|
||
|
|
loc_cn=&loc_st=&loc_ci=&ut_days=7&int_like=&fr_user=brad&fro_user=&opt_format=pics&opt_sort=ut&opt_pagesize=100
|
||
|
|
|
||
|
|
# brad lists as friend:
|
||
|
|
loc_cn=&loc_st=&loc_ci=&ut_days=7&int_like=&fr_user=&fro_user=brad&opt_format=pics&opt_sort=ut&opt_pagesize=100
|