mourningdove/t/content-filters.t

135 lines
4.2 KiB
Perl
Raw Normal View History

2026-05-24 01:03:05 +00:00
# t/content-filters.t
#
# Test user content filters.
#
# 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 => 15;
BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
use LJ::Test qw ( temp_user temp_comm );
use LJ::Utils qw(rand_chars);
use LJ::Community;
my $u1 = temp_user();
my $u2 = temp_user();
my ( $filter, $fid, $data, @f );
# reset, delete, etc
sub rst {
foreach my $u ( $u1, $u2 ) {
foreach my $tbl (qw/ content_filters content_filter_data /) {
$u->do( "DELETE FROM $tbl WHERE userid = ?", undef, $u->id );
}
foreach my $mc (qw/ content_filters /) {
LJ::memcache_kill( $u, $mc );
}
}
}
################################################################################
rst();
@f = $u1->content_filters;
ok( $#f == -1, 'no filters' ); # empty list
$fid = $u1->create_content_filter( name => 'foob', public => 1, sortorder => 13 );
ok( $fid > 0, 'make empty filter' );
$filter = $u1->content_filters( name => 'foob' );
is( $filter->name, 'foob', 'lookup filter 1 by name' );
################################################################################
$fid = $u1->create_content_filter( name => 'isfd', public => 0, sortorder => 31 );
ok( $fid > 0, 'make another filter' );
$filter = $u1->content_filters( id => $fid );
is( $filter->name, 'isfd', 'lookup filter 2 by id' );
$filter = $u1->content_filters( name => 'isfd' );
is( $filter->name, 'isfd', 'lookup filter 2 by name' );
################################################################################
$filter = $u1->content_filters( name => 'sodf' );
ok( !defined $filter, 'get bogus filter' );
@f = $u1->content_filters;
ok( $#f == 1, 'get both filters' );
################################################################################
$filter = $u1->content_filters( name => 'foob' );
$data = $filter->data;
ok( defined $data && ref $data eq 'HASH' && scalar keys %$data == 0, 'get data, is empty' );
################################################################################
$filter = $u1->content_filters( name => 'foob' );
ok( $filter->add_row( userid => $u2->id ) == 1, 'add a row' );
$filter = $u1->content_filters( name => 'foob' );
$data = $filter->data;
ok( $data && exists $data->{ $u2->id }, 'get data, has u2' );
################################################################################
$fid = $u1->delete_content_filter( name => 'foob' );
ok( $fid > 0, 'delete filter' );
################################################################################
note("in default filter after accepting a community invite");
{
my $admin_u = temp_user();
my $comm_u = temp_comm();
my $invite_u = temp_user();
LJ::set_rel( $comm_u, $admin_u, 'A' );
LJ::start_request();
$invite_u->create_content_filter( name => 'default' );
my $filter;
$filter = $invite_u->content_filters( name => 'default' );
$invite_u->send_comm_invite( $comm_u, $admin_u, [qw ( member )] );
ok(
!$filter->contains_userid( $comm_u->userid ),
"not in filter yet because invite hasen't been accepted"
);
$invite_u->accept_comm_invite($comm_u);
ok( $filter->contains_userid( $comm_u->userid ), "accepted invite, now in filter" );
}
################################################################################
note("in default filter after creating a community");
{
my $admin_u = temp_user();
LJ::set_remote($admin_u);
$admin_u->create_content_filter( name => 'default' );
my $filter;
$filter = $admin_u->content_filters( name => 'default' );
my $comm_u = LJ::User->create_community(
user => "t_" . LJ::rand_chars( 15 - 2 ),
membership => 'open',
postlevel => 'members',
);
ok( $filter->contains_userid( $comm_u->userid ),
"newly created community should go into the admin's default filters" );
}
################################################################################