fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-04-24 06:11 am

[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 [personal profile] kareila.

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' );
+
+################################################################################
--------------------------------------------------------------------------------