Changeset 2480

Show
Ignore:
Timestamp:
06/02/08 10:05:24 (21 months ago)
Author:
fumiakiy
Message:

Added more xmlrpc tests.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-39/t/28-xmlrpc.t

    r2465 r2480  
    99 
    1010use Test::More qw( no_plan ); 
     11use MIME::Base64; 
    1112 
    1213# To keep away from being under FastCGI 
     
    2930require LWP::UserAgent::Local; 
    3031my $ua = new LWP::UserAgent::Local({ ScriptAlias => '/' }); 
     32 
     33my $logo = q{R0lGODlhlgAZANUAAP////Ly8uTk5NfX18nJyb29vbu7u62trZ6eno+Pj1iZvVKQsoCAgE6IqHx8fEmAnnFxcUV4lGtra0BwimFhYTtnf1lZWTZfdVBQUDFWaitMXz8/PydDUyA5SC0tLRswPBYlLxkZGQ8bIggPEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAACWABkAAAb/QAjBQCoaMQSC0QiaKJ6LzGhJIhyoVQSWQcBgi8lwIkTdEDZfkjCchHzZbC3JfF0eCOQign3wLOFJRgWDFgUkBRYJAAAUVAaLVBxPk08PU0YHAH5GFABuVAIARF8ABAkIA6VUGABeX4oJsbGuVLKZB7GfJI+NRQwACX8CsQQAAZskpbKxS4YOBRIFDooBSkYeiwBLH08cSxEKD0udwUYGAXlGEACpyEvA5ppLrLS12mlf9FghAQJkHgEGUAlUZF25ZAexGILGUBECeXoAZPoWjgqIbksECLgmEcsAARsAyKECL6I7fa/u4VvV6ss6LcXQ/LFGAtvBkl8WHjqkCFsd/34GFBkZ8eQDlgoKKixR5OqXzCMAGJAYgA6LRAwYElRjWW9pK6xY0+Vr+QaYSCwEPTzSdRXs0zRCH5H5lVUltwlfiEZY4rOIRiznyKzTZSTbogBdUWJRZJhsGsVUAALwh7ZxnSKNVa0UyirYX6FFRChYcGmJpAUD0bGSyrdjkYBWD2ClkKoeZK9gw668veRXr4HDElBwl0y225UkQGvs5AZ0kQUKLlAZAV2BUXWeMoklkWlAmACOMR8MIWpeeK/IueLjXYWm1YTpQa8LUNU5iQxPQCzB/wTvkmquGcHPAMsocpl4AmpWBHvJqZQeCQxCeB4Y7pEEH3Kg8XNWg1Q8EP9OBiDyN4k3mCzS1S+EVQERZsbR5ol5DOSWDlO5vYVFhOwRRIpxYBFnjxEPbWJfERdQYiRGRYS0EShLLmHQO4YFAB8rjdHCmGEVqvfYhO3hkxlOX3hASwhPifmFCBpU0MCRT0ixoI0QwhnnPLl9EUJuuhUhJp5yCojBdkvcCegcfUKIJwY+PqioCBdUR8kCF1yn6KSUVmrppZheKoKHbIajQWmZhirqqKReOgKnnTagX6mstupqqRd1CgWor9Zq661fICVrUrj26qutsU4S6QcfdPAErb8mq6ylaz7RABVFSrrstNQi50RR0y0gbbXcdkuCBk/shQUHInhrLrei8XoZ7rrrFmkdu/B664S48dY7LQcPkGjvvksEAQA7}; 
    3134 
    3235my @apis = ( 
     
    311314        }, 
    312315    }, 
    313     #TODO Add more XML-RPC API 
     316    { 
     317        api    => 'blogger.newPost', 
     318        params => [ '', 1, $username, $password, 'This is a new post.', 0 ], 
     319        result => sub { 
     320            my ( $som ) = @_; 
     321            my $result = $som->result; 
     322            my $entry = MT::Entry->load($result); 
     323            ok($entry); 
     324            is($entry->text, 'This is a new post.'); 
     325            # RELEASE unless NoPublishMeansDraft 
     326            is($entry->status, MT::Entry::RELEASE()); 
     327        }, 
     328    }, 
     329    { 
     330        api    => 'metaWeblog.newPost', 
     331        params => [ 1, $username, $password, { 
     332            title => 'MetaWeblog Post', 
     333            description => 'This is a new post via metaWeblog API.' 
     334        }, 1 ], 
     335        result => sub { 
     336            my ( $som ) = @_; 
     337            my $result = $som->result; 
     338            my $entry = MT::Entry->load($result); 
     339            ok($entry); 
     340            is($entry->title, 'MetaWeblog Post'); 
     341            is($entry->text, 'This is a new post via metaWeblog API.'); 
     342            # RELEASE unless NoPublishMeansDraft 
     343            is($entry->status, MT::Entry::RELEASE()); 
     344        }, 
     345    }, 
     346    { 
     347        api    => 'blogger.deletePost', 
     348        params => [ '', 25, $username, $password, 0 ], 
     349        pre    => sub { 
     350            my ( $e1 ) = MT::Entry->load(undef, 
     351                { sort => 'created_on', direction => 'descend', limit => 1 } 
     352            ); 
     353            is( $e1->id, 25 ); 
     354            return $e1; 
     355        }, 
     356        result => sub { 
     357            my ( $som, $data ) = @_; 
     358            my $result = $som->result; 
     359            MT::Entry->driver->Disabled(1); 
     360            my $entry = MT::Entry->load($data->id); 
     361            is( $entry, undef ); 
     362            MT::Entry->driver->Disabled(0); 
     363        }, 
     364    }, 
     365    { 
     366        api    => 'blogger.deletePost', 
     367        params => [ '', 24, $username, $password, 0 ], 
     368        pre    => sub { 
     369            my ( $e2 ) = MT::Entry->load(undef, 
     370                { sort => 'created_on', direction => 'descend', limit => 1 } 
     371            ); 
     372            is( $e2->id, 24 ); 
     373            return $e2; 
     374        }, 
     375        result => sub { 
     376            my ( $som, $data ) = @_; 
     377            my $result = $som->result; 
     378            MT::Entry->driver->Disabled(1); 
     379            my $entry = MT::Entry->load($data->id); 
     380            is( $entry, undef ); 
     381            MT::Entry->driver->Disabled(0); 
     382        }, 
     383    }, 
     384    { 
     385        api    => 'metaWeblog.newMediaObject', 
     386        params => [ 1, $username, $password, { 
     387            name => 'movable-type-logo.gif', 
     388            type => 'image/gif', 
     389            bits  => sub { 
     390                return MIME::Base64::decode_base64($logo); 
     391            }, 
     392        } ], 
     393        result => sub { 
     394            my ( $som ) = @_; 
     395            my $result = $som->result; 
     396            my $url = $result->{url}; 
     397            is( $url, 'http://narnia.na/nana/movable-type-logo.gif' ); 
     398            my $asset = MT::Asset->load(undef, { sort => 'created_on', direction => 'descend', limit => 1 }); 
     399            ok($asset, 'asset loaded'); 
     400            is( $asset->mime_type, 'image/gif' ); 
     401            is( $asset->file_name, 'movable-type-logo.gif' ); 
     402            local $/; 
     403            open my $fh, '<', $asset->file_path; 
     404            my $image = <$fh>; 
     405            close $fh; 
     406            require MIME::Base64; 
     407            is( $logo, MIME::Base64::encode_base64($image, '') ); 
     408        }, 
     409        post   => sub { 
     410            my $asset = MT::Asset->load(undef, { sort => 'created_on', direction => 'descend', limit => 1 }); 
     411            $asset->remove(); 
     412        } 
     413    }, 
     414    #TODO Add these tests 
     415    #'blogger.deletePost', 
     416    #'metaWeblog.getPost', 
     417    #'metaWeblog.newPost', 
     418    #'metaWeblog.getCategories', 
     419    #'metaWeblog.deletePost', 
     420    #'metaWeblog.getUsersBlogs', 
     421    #'wp.newPage', 'wp.getPages', 'wp.getPage', 'wp.editPage', 'wp.deletePage', 
     422    #'mt.getTrackbackPings', 'mt.supportedTextFilters', 
     423    #'mt.getRecentPostTitles', 'mt.publishPost', 'mt.getTagList' 
    314424); 
    315425 
     
    322432    my $data = {}; 
    323433    $data = $api->{pre}->() if exists $api->{pre}; 
    324  
    325     $req->content($ser->method($api->{api}, @{ $api->{params} })); 
     434    my @params; 
     435    foreach my $param ( @{ $api->{params} } ) { 
     436        if ( 'CODE' eq ref($param) ) { 
     437            push @params, $param->(); 
     438        } 
     439        elsif ( 'HASH' eq ref($param) ) { 
     440            my $hash = {}; 
     441            while ( my ( $key, $val ) = each %$param ) { 
     442                if ( 'CODE' eq ref($val) ) { 
     443                    $hash->{$key} = $val->(); 
     444                } 
     445                else { 
     446                    $hash->{$key} = $val; 
     447                } 
     448            } 
     449            push @params, $hash; 
     450        } 
     451        else { 
     452            push @params, $param; 
     453        } 
     454    } 
     455    $req->content($ser->method($api->{api}, @params)); 
    326456 
    327457    my $resp = $ua->request($req); 
     
    329459    my $som = $deser->deserialize($resp->content()); 
    330460    $api->{result}->($som, $data); 
     461    $api->{post}->() if exists $api->{post}; 
    331462} 
    332463 
    3334641; 
    334  
    335465__END__