159 lines
4.7 KiB
Perl
159 lines
4.7 KiB
Perl
|
|
# t/userpics.t
|
||
|
|
#
|
||
|
|
# Test LJ::Userpic.
|
||
|
|
#
|
||
|
|
# 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 tests => 65;
|
||
|
|
|
||
|
|
BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
|
||
|
|
use LJ::Userpic;
|
||
|
|
use LJ::Test;
|
||
|
|
use FindBin qw($Bin);
|
||
|
|
use Digest::MD5;
|
||
|
|
chdir "$Bin/data/userpics" or die "Failed to chdir to t/data/userpics";
|
||
|
|
|
||
|
|
my $up;
|
||
|
|
my $u = LJ::load_user("system");
|
||
|
|
ok( $u, "Have system user" );
|
||
|
|
die unless $u;
|
||
|
|
|
||
|
|
sub run_tests {
|
||
|
|
my ( $up, $ext ) = @_;
|
||
|
|
|
||
|
|
# test comments
|
||
|
|
{
|
||
|
|
$up->set_comment('');
|
||
|
|
ok( !$up->comment, "... has no comment set" );
|
||
|
|
my $cmt = "Comment on first userpic";
|
||
|
|
ok( $up->set_comment($cmt), "Set a comment." );
|
||
|
|
is( $up->comment, $cmt, "... it matches" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# duplicate testing
|
||
|
|
{
|
||
|
|
my $pre_id = $up->id;
|
||
|
|
my $up2 = eval { LJ::Userpic->create( $u, data => file_contents("good.$ext") ); };
|
||
|
|
ok( $up2, "made another" );
|
||
|
|
is( $pre_id, $up2->id, "duplicate userpic has same id" );
|
||
|
|
is( $up, $up2, "physical instances are the same" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# md5 loading tests
|
||
|
|
{
|
||
|
|
my $md5 = Digest::MD5::md5_base64( ${ file_contents("good.$ext") } );
|
||
|
|
my $up3 = LJ::Userpic->new_from_md5( $u, $md5 );
|
||
|
|
ok( $up3, "Loaded from MD5" );
|
||
|
|
is( $up3, $up, "... is the right one" );
|
||
|
|
my $bogus = eval { LJ::Userpic->new_from_md5( $u, 'wrong size' ) };
|
||
|
|
ok( $@, "... got error with invalid md5 length" );
|
||
|
|
|
||
|
|
# make the md5 base64 bogus so it won't match anything
|
||
|
|
chop $md5;
|
||
|
|
$md5 .= "^";
|
||
|
|
my $bogus2 = LJ::Userpic->new_from_md5( $u, $md5 );
|
||
|
|
ok( !$bogus2, "... no instance found" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# set/get/clear keywords
|
||
|
|
{
|
||
|
|
my $keywords = 'keyword1, keyword2, keyword3';
|
||
|
|
my @keywordsa = split( ',', $keywords );
|
||
|
|
|
||
|
|
$up->set_keywords($keywords);
|
||
|
|
my $keywords_scalar = $up->keywords;
|
||
|
|
is( $keywords, $keywords_scalar, "... keywords match" );
|
||
|
|
my @keywords_array = $up->keywords;
|
||
|
|
eq_array( \@keywordsa, \@keywords_array );
|
||
|
|
|
||
|
|
$up->set_keywords(@keywordsa);
|
||
|
|
@keywords_array = $up->keywords;
|
||
|
|
eq_array( \@keywords_array, \@keywordsa );
|
||
|
|
|
||
|
|
# clear keywords
|
||
|
|
$up->set_keywords('');
|
||
|
|
is( $up->keywords( 'raw' => 1 ), '', "Emptied keywords" );
|
||
|
|
|
||
|
|
$up->set_keywords(@keywordsa);
|
||
|
|
@keywords_array = $up->keywords;
|
||
|
|
|
||
|
|
# create a new pic, assign it one of our keywords and see that it got reassigned
|
||
|
|
my $up2 = LJ::Userpic->create( $u, data => file_contents("good2.jpg") );
|
||
|
|
ok($up2);
|
||
|
|
$up2->set_keywords( shift @keywordsa );
|
||
|
|
my $got_kws = $up2->keywords;
|
||
|
|
is( $got_kws, 'keyword1', 'Stealing keyword part 1 works' );
|
||
|
|
@keywords_array = $up->keywords;
|
||
|
|
eq_array( \@keywords_array, \@keywordsa );
|
||
|
|
|
||
|
|
# get userpic from key
|
||
|
|
my $up = LJ::Userpic->new_from_keyword( $u, 'keyword1' );
|
||
|
|
is( $up, $up2, "get userpic from keyword" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# test defaults
|
||
|
|
{
|
||
|
|
$up->make_default;
|
||
|
|
my $id = $up->id;
|
||
|
|
is( $id, $u->{defaultpicid}, "Set default pic" );
|
||
|
|
ok( $up->is_default, "... accessor says yes" );
|
||
|
|
}
|
||
|
|
|
||
|
|
# fullurl
|
||
|
|
{
|
||
|
|
my $fullurl = 'http://pics.livejournal.com/rahaeli/pic/0009e384';
|
||
|
|
$up->set_fullurl($fullurl);
|
||
|
|
is( $up->fullurl, $fullurl, "Set fullurl" );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
eval { delete_all_userpics($u) };
|
||
|
|
ok( !$@, "deleted all userpics, if any existed" );
|
||
|
|
|
||
|
|
my $ext;
|
||
|
|
for ( ( 'jpg', 'png', 'gif' ) ) {
|
||
|
|
$ext = $_;
|
||
|
|
|
||
|
|
$up = eval { LJ::Userpic->create( $u, data => file_contents("good.$ext") ); };
|
||
|
|
ok( $up, "made a userpic" );
|
||
|
|
die "ERROR: $@" unless $up;
|
||
|
|
|
||
|
|
# FIXME see LJ::Userpic->create method
|
||
|
|
#is($up->extension, $ext, "... it's a $ext");
|
||
|
|
ok( !$up->inactive, "... not inactive" );
|
||
|
|
ok( $up->state, "... have some state" );
|
||
|
|
}
|
||
|
|
|
||
|
|
memcache_stress {
|
||
|
|
run_tests( $up, $ext );
|
||
|
|
};
|
||
|
|
|
||
|
|
sub file_contents {
|
||
|
|
my $file = shift;
|
||
|
|
open( my $fh, $file ) or die $!;
|
||
|
|
my $ct = do { local $/; <$fh> };
|
||
|
|
return \$ct;
|
||
|
|
}
|
||
|
|
|
||
|
|
sub delete_all_userpics {
|
||
|
|
my $u = shift;
|
||
|
|
my @userpics = LJ::Userpic->load_user_userpics($u);
|
||
|
|
foreach my $up (@userpics) {
|
||
|
|
$up->delete;
|
||
|
|
}
|
||
|
|
}
|