326 lines
12 KiB
Perl
326 lines
12 KiB
Perl
# t/wtf.t
|
|
#
|
|
# Test TODO WTF system - what aspects?
|
|
#
|
|
# Authors:
|
|
# Jen Griffin <kareila@livejournal.com>
|
|
#
|
|
# Copyright (c) 2013 by Dreamwidth Studios, LLC.
|
|
#
|
|
# This program is free software; you may redistribute it and/or modify it under
|
|
# the same terms as Perl itself. For a copy of the license, please reference
|
|
# 'perldoc perlartistic' or 'perldoc perlgpl'.
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Test::More tests => 67;
|
|
|
|
BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
|
|
use LJ::Community;
|
|
use LJ::Test qw (temp_user temp_comm);
|
|
|
|
my $u1 = temp_user();
|
|
my $u2 = temp_user();
|
|
my $uc = temp_comm();
|
|
ok( $uc->is_community, 'uc is community' );
|
|
|
|
my ( $row, $hr, @ids );
|
|
my $dbh = LJ::get_db_writer();
|
|
|
|
# reset, delete, etc
|
|
sub rst {
|
|
|
|
# global tables
|
|
$dbh->do( 'DELETE FROM wt_edges WHERE from_userid = ? OR to_userid = ?', undef, $_, $_ )
|
|
foreach ( $u1->id, $u2->id, $uc->id );
|
|
$dbh->do( 'DELETE FROM reluser WHERE userid = ? OR targetid = ?', undef, $_, $_ )
|
|
foreach ( $u1->id, $u2->id, $uc->id );
|
|
|
|
# clustered tables
|
|
$_->writer->do( 'DELETE FROM trust_groups WHERE userid = ?', undef, $_->id )
|
|
foreach ( $u1, $u2, $uc );
|
|
|
|
foreach my $u ( $u1, $u2, $uc ) {
|
|
foreach my $mc (qw/ trust_group wt_list /) {
|
|
LJ::memcache_kill( $u, $mc );
|
|
}
|
|
}
|
|
}
|
|
|
|
# print error and exit if database fails
|
|
sub dberr {
|
|
if ( $dbh->err ) {
|
|
diag( $dbh->errstr );
|
|
exit 1;
|
|
}
|
|
}
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, watch => { fgcolor => 123, bgcolor => 321, nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND fgcolor = ? AND bgcolor = ? AND groupmask = ?',
|
|
undef, $u1->id, $u2->id, 123, 321, 1 << 61
|
|
);
|
|
dberr();
|
|
ok( $row > 0, 'add to watch list' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, trust => { mask => 30004, nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
|
|
undef, $u1->id, $u2->id, 30004 | 1 );
|
|
dberr();
|
|
ok( $row > 0, 'add to trust list' );
|
|
|
|
################################################################################
|
|
@ids = $u1->watched_userids;
|
|
ok( scalar(@ids) == 0, 'watched_userids empty' );
|
|
|
|
@ids = $u1->trusted_userids;
|
|
ok( scalar(@ids) == 1, 'trusted_userids one member' );
|
|
|
|
$hr = $u1->trust_list;
|
|
ok( scalar( keys %$hr ) == 1, 'trust_list one member' );
|
|
|
|
@ids = $u1->mutually_trusted_userids;
|
|
ok( scalar(@ids) == 0, 'mutually_trusted_userids empty' );
|
|
|
|
################################################################################
|
|
$u2->add_edge( $u1, trust => { mask => 30008, nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
|
|
undef, $u2->id, $u1->id, 30008 | 1 );
|
|
dberr();
|
|
ok( $row > 0, 'add to trust list reverse' );
|
|
|
|
@ids = $u1->mutually_trusted_userids;
|
|
ok( scalar(@ids) == 1, 'u1 mutually_trusted_userids one member' );
|
|
|
|
@ids = $u2->mutually_trusted_userids;
|
|
ok( scalar(@ids) == 1, 'u2 mutually_trusted_userids one member' );
|
|
|
|
################################################################################
|
|
$u1->remove_edge( $u2, trust => { nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
|
|
undef, $u1->id, $u2->id, 30004 | 1 );
|
|
dberr();
|
|
ok( $row == 0, 'remove from trust list' );
|
|
|
|
@ids = $u1->trusted_userids;
|
|
ok( scalar(@ids) == 0, 'trusted_userids empty' );
|
|
|
|
$hr = $u1->trust_list;
|
|
ok( scalar( keys %$hr ) == 0, 'trust_list empty' );
|
|
|
|
################################################################################
|
|
$u1->add_edge( $u2, watch => { nonotify => 1 }, trust => { nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
|
|
undef, $u1->id, $u2->id, ( 1 << 61 ) | 1 );
|
|
dberr();
|
|
ok( $row > 0, 'add to both lists (simultaneous)' );
|
|
|
|
################################################################################
|
|
@ids = $u1->watched_userids;
|
|
ok( scalar(@ids) == 1, 'u1 watched_userids one member' );
|
|
|
|
@ids = $u1->trusted_userids;
|
|
ok( scalar(@ids) == 1, 'u1 trusted_userids one member' );
|
|
|
|
@ids = $u2->watched_by_userids;
|
|
ok( scalar(@ids) == 1, 'u2 watched_by_userids one member' );
|
|
|
|
@ids = $u2->trusted_by_userids;
|
|
ok( scalar(@ids) == 1, 'u2 trusted_by_userids one member' );
|
|
|
|
################################################################################
|
|
$u1->add_edge( $u1, trust => { nonotify => 1 } );
|
|
|
|
$hr = $u1->watch_list;
|
|
ok( scalar( keys %$hr ) == 1, 'watch_list one member' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, watch => { nonotify => 1 } );
|
|
$u1->add_edge( $u2, trust => { nonotify => 1 } );
|
|
$row = $dbh->selectrow_array(
|
|
'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
|
|
undef, $u1->id, $u2->id, ( 1 << 61 ) | 1 );
|
|
dberr();
|
|
ok( $row > 0, 'add to both lists (one by one)' );
|
|
|
|
################################################################################
|
|
@ids = $u1->watched_userids;
|
|
ok( scalar(@ids) == 1, 'u1 watched_userids one member' );
|
|
|
|
@ids = $u1->trusted_userids;
|
|
ok( scalar(@ids) == 1, 'u1 trusted_userids one member' );
|
|
|
|
@ids = $u2->watched_by_userids;
|
|
ok( scalar(@ids) == 1, 'u2 watched_by_userids one member' );
|
|
|
|
@ids = $u2->trusted_by_userids;
|
|
ok( scalar(@ids) == 1, 'u2 trusted_by_userids one member' );
|
|
|
|
$hr = $u1->watch_list;
|
|
ok( scalar( keys %$hr ) == 1, 'watch_list one member' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, trust => { mask => 30004, nonotify => 1 }, watch => { nonotify => 1 } );
|
|
$row =
|
|
$dbh->selectrow_array( 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
|
|
undef, $u1->id, $u2->id );
|
|
dberr();
|
|
ok( $row > 0, 'add to both lists with trustmask' );
|
|
|
|
################################################################################
|
|
$u1->remove_edge( $u2, watch => { nonotify => 1 } );
|
|
$row =
|
|
$dbh->selectrow_array( 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
|
|
undef, $u1->id, $u2->id );
|
|
dberr();
|
|
ok( $row > 0, 'remove from watch list; still on trust list' );
|
|
|
|
################################################################################
|
|
@ids = $u1->watched_userids;
|
|
ok( scalar(@ids) == 0, 'watched_userids empty' );
|
|
|
|
@ids = $u1->trusted_userids;
|
|
ok( scalar(@ids) == 1, 'trusted_userids one member' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, watch => { fgcolor => 255, bgcolor => 255, nonotify => 1 } );
|
|
$row =
|
|
$dbh->selectrow_array( 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
|
|
undef, $u1->id, $u2->id );
|
|
dberr();
|
|
ok( $row > 0, 'add to watch list with colors' );
|
|
|
|
$hr = $u1->watch_list;
|
|
ok( scalar( keys %$hr ) == 1, 'watch_list one member' );
|
|
is( $hr->{ $u2->id }->{fgcolor}, '#0000ff', 'fgcolor ok' );
|
|
is( $hr->{ $u2->id }->{bgcolor}, '#0000ff', 'bgcolor ok' );
|
|
|
|
################################################################################
|
|
$u1->add_edge( $u2, watch => { nonotify => 1 } );
|
|
$row =
|
|
$dbh->selectrow_array( 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
|
|
undef, $u1->id, $u2->id );
|
|
dberr();
|
|
ok( $row > 0, 'readd to watch list' );
|
|
|
|
$hr = $u1->watch_list;
|
|
ok( scalar( keys %$hr ) == 1, 'watch_list one member' );
|
|
is( $hr->{ $u2->id }->{fgcolor}, '#0000ff', 'fgcolor still ok' );
|
|
is( $hr->{ $u2->id }->{bgcolor}, '#0000ff', 'bgcolor still ok' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->create_trust_group( groupname => 'foo group', sortorder => 10, is_public => 1 );
|
|
$row = $u1->writer->selectrow_array(
|
|
'SELECT COUNT(*) FROM trust_groups WHERE userid = ? AND groupname = ? AND sortorder = ? AND is_public = ?',
|
|
undef, $u1->id, 'foo group', 10, 1
|
|
);
|
|
dberr();
|
|
ok( $row > 0, 'create trust group' );
|
|
|
|
$hr = $u1->trust_groups;
|
|
ok( scalar( keys %$hr ) > 0, 'get trust group' );
|
|
|
|
################################################################################
|
|
$u1->edit_trust_group( id => 1, groupname => 'bar group' );
|
|
$row = $u1->writer->selectrow_array(
|
|
'SELECT COUNT(*) FROM trust_groups WHERE userid = ? AND groupname = ? AND sortorder = ? AND is_public = ?',
|
|
undef, $u1->id, 'bar group', 10, 1
|
|
);
|
|
dberr();
|
|
ok( $row > 0, 'edit trust group' );
|
|
|
|
$hr = $u1->trust_groups;
|
|
is( $hr->{1}->{groupname}, 'bar group', 'check new group name' );
|
|
|
|
################################################################################
|
|
rst();
|
|
|
|
# have to create a group with a known id for these tests
|
|
$u1->edit_trust_group( id => 1, groupname => 'bar group', _force_create => 1 );
|
|
|
|
$u1->add_edge( $u2, trust => { nonotify => 1 } );
|
|
ok( $u1->trustmask($u2) == 1, 'validate trustmask == 1' );
|
|
|
|
$hr = $u1->trust_group_members( id => 1 );
|
|
ok( scalar( keys %$hr ) == 0, 'validate nobody in group 1' );
|
|
|
|
################################################################################
|
|
$u1->edit_trustmask( $u2, add => 1 );
|
|
ok( $u1->trustmask($u2) == 3, 'add to group, validate trustmask == 3' );
|
|
|
|
$hr = $u1->trust_group_members( id => 1 );
|
|
ok( scalar( keys %$hr ) == 1, 'validate one member in group 1' );
|
|
|
|
################################################################################
|
|
$u1->edit_trustmask( $u2, add => [ 1, 3 ] );
|
|
ok( $u1->trustmask($u2) == 11, 'add more groups' );
|
|
|
|
$u1->edit_trustmask( $u2, remove => [1] );
|
|
ok( $u1->trustmask($u2) == 9, 'remove one group' );
|
|
|
|
$u1->edit_trustmask( $u2, set => [ 4, 3 ] );
|
|
ok( $u1->trustmask($u2) == 25, 'set groups' );
|
|
|
|
ok( $u1->trust_group_contains( $u2, 3 ) == 1, 'group 3 contains u2' );
|
|
ok( $u1->trust_group_contains( $u2, 4 ) == 1, 'group 4 contains u2' );
|
|
ok( $u1->trust_group_contains( $u2, 5 ) == 0, 'group 5 does not contain u2' );
|
|
|
|
################################################################################
|
|
|
|
# have to create a group with a known id for these tests
|
|
$u1->edit_trust_group( id => 3, groupname => 'bar group 3', _force_create => 1 );
|
|
|
|
ok( $u1->trust_group_contains( $u2, 3 ) == 1, 'group 3 contains u2' );
|
|
ok( $u1->trust_group_contains( $u2, 4 ) == 1, 'group 4 contains u2' );
|
|
ok( $u1->trust_group_contains( $u2, 5 ) == 0, 'group 5 does not contain u2' );
|
|
|
|
# now delete the group
|
|
ok( $u1->delete_trust_group( name => 'bar group 3' ), 'delete trust group 3' );
|
|
|
|
ok( $u1->trust_group_contains( $u2, 3 ) == 0, 'group 3 does not contain u2' );
|
|
ok( $u1->trust_group_contains( $u2, 4 ) == 1, 'group 4 contains u2' );
|
|
ok( $u1->trust_group_contains( $u2, 5 ) == 0, 'group 5 does not contain u2' );
|
|
|
|
ok( !$u1->trust_groups( name => 'bar group 3' ), 'validate group is gone' );
|
|
|
|
$u1->edit_trustmask( $u2, set => [] );
|
|
ok( $u1->trustmask($u2) == 1, 'clear groups' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $u2, trust => { mask => 12, nonotify => 1 } );
|
|
ok( $u1->trustmask($u2) == 13, 'add with trust mask' );
|
|
|
|
$u1->add_edge( $u2, trust => { nonotify => 1 } );
|
|
ok( $u1->trustmask($u2) == 13, 'add edge again, test mask' );
|
|
|
|
################################################################################
|
|
ok( $u1->can_watch && $u2->can_trust, 'allowed to watch and trust' );
|
|
ok( $u1->can_watch($u2) && $u2->can_trust($u1), 'allowed to watch and trust the other' );
|
|
|
|
################################################################################
|
|
rst();
|
|
$u1->add_edge( $uc, member => {} );
|
|
ok( scalar( $uc->member_userids ) == 1, 'join community' );
|
|
|
|
$hr = $uc->watch_list;
|
|
ok( scalar( keys %$hr ) == 0, 'community watch list has zero' );
|
|
|
|
$hr = $uc->watch_list( community_okay => 1 );
|
|
ok( scalar( keys %$hr ) == 1, 'community watch list has one' );
|
|
|
|
################################################################################
|