View source
<?php
class BlogAPITestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Blog API functionality',
'description' => 'Create, edit, and delete post; upload file; and set/get categories.',
'group' => 'Blog API',
);
}
function setUp() {
parent::setUp('blog', 'blogapi', 'taxonomy');
}
function testBlogAPI() {
global $base_url;
$web_user = $this
->drupalCreateUser(array(
'create blog content',
'delete own blog content',
'edit own blog content',
'administer content with blog api',
));
$local = url($base_url . '/xmlrpc.php', array(
'external' => TRUE,
));
$appid = 'simpletest';
$result = xmlrpc($local, 'blogger.getUsersBlogs', $appid, $web_user->name, $web_user->pass_raw);
$this
->assertTrue($result, t('Request for user\'s blogs returned correctly.'));
if ($result !== FALSE) {
if ($this
->assertTrue(array_key_exists('blogid', $result[0]), t('Blog found.'))) {
$blog_id = $result[0]['blogid'];
}
}
$content = $this
->randomName(32);
$result = xmlrpc($local, 'blogger.newPost', $appid, $blog_id, $web_user->name, $web_user->pass_raw, $content, TRUE);
$this
->assertTrue($result, t('Post created.'));
$nid = $result;
$result = xmlrpc($local, 'blogger.getRecentPosts', $appid, $blog_id, $web_user->name, $web_user->pass_raw, 5);
$this
->assertTrue($result, t('Recent post list retrieved.'));
if ($result !== FALSE && array_key_exists('title', $result[0])) {
$this
->assertEqual($content, $result[0]['title'], t('Post found.'));
}
else {
$this
->fail(t('Post found.'));
}
$content_new = $this
->randomName(10);
$result = xmlrpc($local, 'blogger.editPost', $appid, $nid, $web_user->name, $web_user->pass_raw, $content_new, TRUE);
$this
->assertTrue($result, t('Post successfully modified.'));
$file = current($this
->drupalGetTestFiles('text'));
$file_contents = file_get_contents($file->uri);
$file = array();
$file['name'] = $this
->randomName() . '.txt';
$file['type'] = 'text';
$file['bits'] = xmlrpc_base64($file_contents);
$result = xmlrpc($local, 'metaWeblog.newMediaObject', $blog_id, $web_user->name, $web_user->pass_raw, $file);
$this
->assertTrue($result, t('File successfully uploaded.'));
$url = array_key_exists('url', $result) ? $result['url'] : '';
$this
->drupalGet($url);
$this
->assertEqual($this
->drupalGetContent(), $file_contents, t('Uploaded contents verified.'));
$admin_user = $this
->drupalCreateUser(array(
'administer taxonomy',
));
$this
->drupalLogin($admin_user);
$vid = $this
->addVocabulary('simpletest_vocab', $blog_id);
$term_1 = $this
->addTerm($vid, 'simpletest_term1');
$term_2 = $this
->addTerm($vid, 'simpletest_term2');
$categories = array(
array(
'categoryId' => $term_1,
),
);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, $categories);
$this
->assertTrue($result, t('Post categories set.'));
$result = xmlrpc($local, 'mt.getPostCategories', $nid, $web_user->name, $web_user->pass_raw);
$this
->assertTrue($result, t('Category list successfully retrieved.'));
if ($result !== FALSE && isset($result[0]['categoryId'])) {
$this
->assertEqual($term_1, $result[0]['categoryId'], t('Category list verified.'));
}
$categories[] = array(
'categoryId' => $term_2,
);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, $categories);
$this
->assertFalse($result, t('Post categories fail validation (attempt to post two when one is allowed).'));
$this
->updateVocabulary($vid, 'simpletest_vocab1', FALSE, TRUE);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, array());
$this
->assertFalse($result, t("Post categories fail validation (none posted when it's required)."));
$this
->updateVocabulary($vid, 'simpletest_vocab1', TRUE, FALSE);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, $categories);
$this
->assertTrue($result, t('Post categories pass validation (multiple allowed).'));
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, array());
$this
->assertTrue($result, t('Post categories pass validation (multiple allowed, none posted).'));
$this
->updateVocabulary($vid, 'simpletest_vocab1', TRUE, TRUE);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, $categories);
$this
->assertTrue($result, t('Post categories pass validation (multiple allowed).'));
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, array());
$this
->assertFalse($result, t("Post categories fail validation (none posted when it's required)."));
$categories[] = array(
'categoryId' => $term_2 + 1,
);
$result = xmlrpc($local, 'mt.setPostCategories', $nid, $web_user->name, $web_user->pass_raw, $categories);
$this
->assertFalse($result, t('Post categories fail validation (unknown term).'));
$result = xmlrpc($local, 'blogger.deletePost', $appid, $nid, $web_user->name, $web_user->pass_raw, TRUE);
$this
->assertTrue($result, t('Post successfully deleted.'));
}
function addVocabulary($vocab) {
$vocabulary = new stdClass();
$vocabulary->name = $vocab;
$vocabulary->description = $this
->randomName();
$vocabulary->machine_name = $this
->randomName();
$vocabulary->help = '';
$vocabulary->nodes = array(
'blog' => 'blog',
);
$vocabulary->weight = mt_rand(0, 10);
taxonomy_vocabulary_save($vocabulary);
return $vocabulary->vid;
}
function updateVocabulary($vid, $vocab, $multiple = FALSE, $required = FALSE) {
$vocabulary = taxonomy_vocabulary_load($vid);
$vocabulary->name = $vocab;
$vocabulary->nodes = array(
'blog' => 'blog',
);
$vocabulary->multiple = $multiple;
$vocabulary->required = $required;
taxonomy_vocabulary_save($vocabulary);
}
function addTerm($vid, $term_name) {
$term = new stdClass();
$term->name = $term_name;
$term->vid = $vid;
taxonomy_term_save($term);
return $term->tid;
}
}