The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Test::More tests => 23;

BEGIN {
    $ENV{MT_USER}       ||= 'net-mt';
    $ENV{MT_PASSWORD}   ||= 'secret';
    $ENV{MT_PROXY}      ||='http://mt.handalak.com/cgi-bin/xmlrpc';
}

unless ( eval "require LWP::Simple") {
    print "1..0 # Skipped: LWP::Simple isn't available";
    exit(0);
}

use_ok("Net::MovableType");

#
# Making the connection
#
my $mt = new MovableType($ENV{MT_PROXY}, $ENV{MT_USER}, $ENV{MT_PASSWORD});
ok(defined $mt, ref $mt);

ok(($mt->username eq $ENV{MT_USER}) && ($mt->password eq $ENV{MT_PASSWORD}));

#
# Testing for getUsersBlogs() consistency
#
my $blogs = $mt->getUsersBlogs();

ok($blogs && (ref $blogs eq 'ARRAY') && (@$blogs ==1));
ok($blogs->[0]->{blogName} eq 'Net::MovableType');
ok($blogs->[0]->{blogid});
ok($blogs->[0]->{url} eq 'http://net-mt.handalak.com/');

unless ( $mt->blogId ) { $mt->blogId( $blogs->[0]->{blogid} ) }

#
# resolveBlogId('Net::MovableType')
#
ok($mt->resolveBlogId('Net::MovableType') == 14);


#
# newPost():
#
my %entry = (
    title       => "Hello World from Net::MovableType!",
    description => "Look ma, no hands!",
    mt_keywords => 'test AND Net::MovableType'
);


my $new_post_id = $mt->newPost(\%entry, 0);
ok($new_post_id, "New entry: $new_post_id");

$mt->setPostCategories($new_post_id, ["Testing..."]);
$mt->publishPost($new_post_id);

#
# getRecentPostTitles():
#
my $recentTitles = $mt->getRecentPostTitles(10);
ok( 
    grep { $_->{postid} == $new_post_id } @$recentTitles
);

while ( my $post = shift @$recentTitles ) {
    printf("[%02d] - %s\n", $post->{postid}, $post->{title});
}

my $recentPosts = $mt->getRecentPosts(10);
ok(
    grep { $_->{postid} == $new_post_id } @$recentPosts
);


#
# getPost():
#
my $post = $mt->getPost( $new_post_id );

ok($post->{title} eq "Hello World from Net::MovableType!");
ok($post->{postid} == $new_post_id );

$post->{title} = sprintf "%s (%d)", $post->{title}, $post->{postid};

#
# editPost():
#
ok($mt->editPost($post->{postid}, $post));

my $edited_post = $mt->getPost( $new_post_id );
ok($edited_post->{title} eq "Hello World from Net::MovableType! (" . $edited_post->{postid} . ")");


#
# deletePost():
#
ok($mt->deletePost($new_post_id));
ok($mt->getPost($new_post_id) ? 0 : 1);

#
# upload():
#

#
# first we create a simple post to associate this image with it:
#

require Config;
my $new_post_id_w_upload = $mt->newPost({
    title       => sprintf("Another %s computer got Net::MT! Do you?", $Config::Config{osname}),
    description => Config::myconfig(),
}, 0);
$mt->setPostCategories($new_post_id_w_upload, ["Testing..."]);

require LWP::Simple;
my $logo_content = LWP::Simple::get('http://author.handalak.com/images/perl.gif');

ok($logo_content, "logo downloaded");
my $url = $mt->upload(\$logo_content, sprintf "images/perl_%d.gif", $new_post_id_w_upload);

my ($type, $size, $modtime, $expires, $server) = LWP::Simple::head($url->{url});
ok($type eq 'image/gif');
ok($size > 1);


my $new_post_w_upload = $mt->getPost($new_post_id_w_upload);
ok($new_post_w_upload);

$new_post_w_upload->{description} .= <<ENDTEXTMORE;

<a href="http://www.perl.com/"><img src="$url->{url}" style="margin:5px;border:none" alt="Powered by Perl" /></a>
<i>Note:</i> above image was uploaded with Net::MovableType.

ENDTEXTMORE

ok($mt->editPost($new_post_id_w_upload, $new_post_w_upload));
ok($mt->publishPost($new_post_id_w_upload));