You are here

function BlogAPITestCase::testBlogAPI in Blog API 7

Create, edit, and delete post; upload file; set/get categories.

File

./blogapi.test, line 19

Class

BlogAPITestCase

Code

function testBlogAPI() {
  global $base_url;

  // Create user.
  $web_user = $this
    ->drupalCreateUser(array(
    'create blog content',
    'delete own blog content',
    'edit own blog content',
    'administer content with blog api',
  ));

  // Init common variables.
  $local = url($base_url . '/xmlrpc.php', array(
    'external' => TRUE,
  ));
  $appid = 'simpletest';

  // Get user's blog.
  $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'];
    }
  }

  // Create post.
  $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;

  // Check recent posts.
  $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.'));
  }

  // Edit post.
  $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.'));

  // Upload file.
  $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'] : '';

  // Check uploaded file.
  $this
    ->drupalGet($url);
  $this
    ->assertEqual($this
    ->drupalGetContent(), $file_contents, t('Uploaded contents verified.'));

  // Test category functionality
  // Create admin user to manage taxonomy
  $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');

  // Set post categories.
  $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.'));

  // Get post categories.
  $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.'));
  }

  // Test validation of category assignment.
  // Set post categories.
  $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).'));

  // Change to required.
  $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)."));

  // Change to allowing multiple, not 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).'));

  // Change to multiple, but required.
  $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)."));

  // Try to add a non-existent term.
  $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).'));

  // Delete post.
  $result = xmlrpc($local, 'blogger.deletePost', $appid, $nid, $web_user->name, $web_user->pass_raw, TRUE);
  $this
    ->assertTrue($result, t('Post successfully deleted.'));
}