[dw-free] move bin/test/* files into t/*
[commit: http://hg.dwscoalition.org/dw-free/rev/77e3ca55ae33]
http://bugs.dwscoalition.org/show_bug.cgi?id=2227
More cleanup: standardize testing framework (watch, trust, friend)
Patch by
kareila.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=2227
More cleanup: standardize testing framework (watch, trust, friend)
Patch by
Files modified:
- bin/test/test-wtf
- t/wtf.t
--------------------------------------------------------------------------------
diff -r a884cd53e958 -r 77e3ca55ae33 bin/test/test-wtf
--- a/bin/test/test-wtf Fri Apr 23 22:44:27 2010 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,521 +0,0 @@
-#!/usr/bin/perl
-# yes, there are so many better testing modules than just doing this in a crappy
-# half-ass way.
-
-use strict;
-use lib "$ENV{LJHOME}/cgi-bin";
-require 'ljlib.pl';
-
-use Data::Dumper;
-
-# much time passes ...
-my $u1 = LJ::load_user( 'tester0394' ) or die 'no tester0394';
-my $u2 = LJ::load_user( 'tester0395' ) or die 'no tester0395';
-my $uc = LJ::load_user( 'testcomm' ) or die 'no testcomm';
-$uc->is_community or die 'testcomm not a community :(';
-
-my @tests;
-print "Beginning tests...\n";
-print " u1 = " . $u1->user . '(' . $u1->id . ")\n";
-print " u2 = " . $u2->user . '(' . $u2->id . ")\n";
-print " uc = " . $uc->user . '(' . $uc->id . ")\n\n";
-
-my $dbh = LJ::get_db_writer();
-
-# reset, delete, etc
-sub rst {
- $dbh->do( 'DELETE FROM wt_edges WHERE from_userid = ? OR to_userid = ?', undef, $_, $_ )
- foreach ( $u1->id, $u2->id, $uc->id );
- $dbh->do( 'DELETE FROM trust_groups WHERE 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 );
-
- foreach my $u ( $u1, $u2, $uc ) {
- foreach my $mc ( qw/ trust_group wt_list / ) {
- LJ::memcache_kill( $u, $mc );
- }
- }
-}
-
-# return which bits are on (helper sub)
-sub bits {
- my $mask = shift;
- return grep { $mask & ( 1<<$_ ) } 0..63;
-}
-
-################################################################################
-push @tests, [ 'add to watching list', sub
-{
- rst();
- $u1->add_edge( $u2, watch => { fgcolor => 123, bgcolor => 321, nonotify => 1 } );
- my $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
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to trust list', sub
-{
- rst();
- $u1->add_edge( $u2, trust => { mask => 30004, nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
- undef, $u1->id, $u2->id, 30004 | 1
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list empty', sub
-{
- my @ids = $u1->watched_userids;
- return scalar( @ids ) == 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list one member', sub
-{
- my @ids = $u1->trusted_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust_list one member', sub
-{
- my $ids = $u1->trust_list;
- return scalar( keys %$ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'mutually trust list empty', sub
-{
- my @ids = $u1->mutually_trusted_userids;
- return scalar( @ids ) == 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to trust list reverse', sub
-{
- $u2->add_edge( $u1, trust => { mask => 30008, nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
- undef, $u2->id, $u1->id, 30008 | 1
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'mutually trust lists one member', sub
-{
- my @ids = $u1->mutually_trusted_userids;
- my @ids2 = $u2->mutually_trusted_userids;
- return ( scalar( @ids ) == 1 && scalar( @ids2 ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'remove from trust list', sub
-{
- $u1->remove_edge( $u2, trust => { nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ? AND groupmask = ?',
- undef, $u1->id, $u2->id, 30004 | 1
- );
- die $dbh->errstr if $dbh->err;
- return ( $row == 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list empty', sub
-{
- my @ids = $u1->trusted_userids;
- return scalar( @ids ) == 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust_list empty', sub
-{
- my $ids = $u1->trust_list;
- return scalar( keys %$ids ) == 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to both lists', sub
-{
- $u1->add_edge( $u2, watch => { nonotify => 1 }, trust => { nonotify => 1 } );
- my $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
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list one member', sub
-{
- my @ids = $u1->watched_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list one member', sub
-{
- my @ids = $u1->trusted_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list reverse one member', sub
-{
- my @ids = $u2->watched_by_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list reverse one member', sub
-{
- my @ids = $u2->trusted_by_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'get full watch list', sub
-{
- $u1->add_edge( $u1, trust => { nonotify => 1 } );
-
- my $hr = $u1->watch_list;
- return scalar( keys %$hr ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to both lists (one by one)', sub
-{
- rst();
- $u1->add_edge( $u2, watch => { nonotify => 1 } );
- $u1->add_edge( $u2, trust => { nonotify => 1 } );
- my $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
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list one member', sub
-{
- my @ids = $u1->watched_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list one member', sub
-{
- my @ids = $u1->trusted_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list reverse one member', sub
-{
- my @ids = $u2->watched_by_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list reverse one member', sub
-{
- my @ids = $u2->trusted_by_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'get full watch list', sub
-{
- my $hr = $u1->watch_list;
- return scalar( keys %$hr ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to trust and watch lists', sub
-{
- rst();
- $u1->add_edge( $u2, trust => { mask => 30004, nonotify => 1 }, watch => { nonotify => 1} );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
- undef, $u1->id, $u2->id
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'remove from watch list', sub
-{
- $u1->remove_edge( $u2, watch => { nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
- undef, $u1->id, $u2->id
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'watching list empty', sub
-{
- my @ids = $u1->watched_userids;
- return scalar( @ids ) == 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'trust list one member', sub
-{
- my @ids = $u1->trusted_userids;
- return scalar( @ids ) == 1 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to watch list with colors', sub
-{
- rst();
- $u1->add_edge( $u2, watch => { fgcolor => 255, bgcolor => 255, nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
- undef, $u1->id, $u2->id
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'validate colors', sub
-{
- my $hr = $u1->watch_list;
- die unless scalar( keys %$hr ) == 1 ? 1 : 0;
- return ( $hr->{$u2->id}->{fgcolor} eq '#0000ff' && $hr->{$u2->id}->{bgcolor} eq '#0000ff' ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to watch list again', sub
-{
- $u1->add_edge( $u2, watch => { nonotify => 1 } );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM wt_edges WHERE from_userid = ? AND to_userid = ?',
- undef, $u1->id, $u2->id
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'validate colors again', sub
-{
- my $hr = $u1->watch_list;
- die unless scalar( keys %$hr ) == 1 ? 1 : 0;
- return ( $hr->{$u2->id}->{fgcolor} eq '#0000ff' && $hr->{$u2->id}->{bgcolor} eq '#0000ff' ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'create trust group', sub
-{
- rst();
- my $id = $u1->create_trust_group( groupname => 'foo group', sortorder => 10, is_public => 1 );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM trust_groups WHERE userid = ? AND groupname = ? AND sortorder = ? AND is_public = ?',
- undef, $u1->id, 'foo group', 10, 1
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'get trust group', sub
-{
- my $grp = $u1->trust_groups;
- return scalar( keys %$grp ) > 0 ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'edit trust group', sub
-{
- $u1->edit_trust_group( id => 1, groupname => 'bar group' );
- my $row = $dbh->selectrow_array(
- 'SELECT COUNT(*) FROM trust_groups WHERE userid = ? AND groupname = ? AND sortorder = ? AND is_public = ?',
- undef, $u1->id, 'bar group', 10, 1
- );
- die $dbh->errstr if $dbh->err;
- return ( $row > 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'get trust group again', sub
-{
- my $grp = $u1->trust_groups;
- return ( $grp->{1}->{groupname} eq 'bar group' ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'validate trustmask == 1', sub
-{
- 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 } );
- return ( $u1->trustmask( $u2 ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'validate nobody in group 1', sub
-{
- my $ids = $u1->trust_group_members( id => 1 );
- return ( scalar ( keys %$ids ) == 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add to group, validate trustmask == 3', sub
-{
- $u1->edit_trustmask( $u2, add => 1 );
- return ( $u1->trustmask( $u2 ) == 3 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'validate in group 1', sub
-{
- my $ids = $u1->trust_group_members( id => 1 );
- return ( scalar ( keys %$ids ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add two more groups', sub
-{
- $u1->edit_trustmask( $u2, add => [ 1, 3 ] );
- return ( $u1->trustmask( $u2 ) == 11 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'remove group', sub
-{
- $u1->edit_trustmask( $u2, remove => [ 1 ] );
- return ( $u1->trustmask( $u2 ) == 9 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'set groups', sub
-{
- $u1->edit_trustmask( $u2, set => [ 4, 3 ] );
- return ( $u1->trustmask( $u2 ) == 25 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'test contains', sub
-{
- $u1->trust_group_contains( $u2, 3 ) == 1 or return 0;
- $u1->trust_group_contains( $u2, 4 ) == 1 or return 0;
- $u1->trust_group_contains( $u2, 5 ) == 0 or return 0;
- return 1;
-} ];
-
-
-################################################################################
-push @tests, [ 'delete trust group 3', sub
-{
- # 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 );
-
- $u1->trust_group_contains( $u2, 3 ) == 1 or return 0;
- $u1->trust_group_contains( $u2, 4 ) == 1 or return 0;
- $u1->trust_group_contains( $u2, 5 ) == 0 or return 0;
-
- # now delete the group
- $u1->delete_trust_group( name => 'bar group 3' ) or return 0;
-
- $u1->trust_group_contains( $u2, 3 ) == 0 or return 0;
- $u1->trust_group_contains( $u2, 4 ) == 1 or return 0;
- $u1->trust_group_contains( $u2, 5 ) == 0 or return 0;
-
- # validate group doesn't fetch
- $u1->trust_groups( name => 'bar group 3' ) and return 0;
-
- return 1;
-} ];
-
-################################################################################
-push @tests, [ 'clear groups', sub
-{
- $u1->edit_trustmask( $u2, set => [] );
- return ( $u1->trustmask( $u2 ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'reset, add mask', sub
-{
- rst();
- $u1->add_edge( $u2, trust => { mask => 12, nonotify => 1 } );
- return ( $u1->trustmask( $u2 ) == 13 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'add edge again, test mask', sub
-{
- $u1->add_edge( $u2, trust => { nonotify => 1 } );
- return ( $u1->trustmask( $u2 ) == 13 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'allowed to watch and trust', sub
-{
- return ( $u1->can_watch && $u2->can_trust ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'allowed to watch and trust the other', sub
-{
- return ( $u1->can_watch( $u2 ) && $u2->can_trust( $u2 ) ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'join community', sub
-{
- rst();
- $u1->add_edge( $uc, member => {} );
- return ( scalar( $uc->member_userids ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'community watch list has zero', sub
-{
- return ( scalar( keys %{ $uc->watch_list } ) == 0 ) ? 1 : 0;
-} ];
-
-################################################################################
-push @tests, [ 'community watch list has one', sub
-{
- return ( scalar( keys %{ $uc->watch_list( community_okay => 1 ) } ) == 1 ) ? 1 : 0;
-} ];
-
-################################################################################
-$| = 1;
-my $id = 1;
-foreach my $test ( @tests ) {
- print "Test #$id: $test->[0]: ";
- my $rv = 0;
- eval {
- $rv = $test->[1]->();
- };
- if ( $@ || $rv == 0 ) {
- print "failure!\n\n\$@ = $@\n\$! = $!\nrv = $rv\n\n";
- die;
- } else {
- print "success\n";
- }
- $id++;
-}
diff -r a884cd53e958 -r 77e3ca55ae33 t/wtf.t
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/t/wtf.t Fri Apr 23 23:16:37 2010 -0700
@@ -0,0 +1,308 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More;
+use lib "$ENV{LJHOME}/cgi-bin";
+require 'ljlib.pl';
+require 'communitylib.pl';
+use LJ::Test qw (temp_user temp_comm);
+
+plan tests => 67;
+
+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 {
+ $dbh->do( 'DELETE FROM wt_edges WHERE from_userid = ? OR to_userid = ?', undef, $_, $_ )
+ foreach ( $u1->id, $u2->id, $uc->id );
+ $dbh->do( 'DELETE FROM trust_groups WHERE 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 );
+
+ 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 = $dbh->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 = $dbh->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' );
+
+################################################################################
--------------------------------------------------------------------------------
