You are here

blogapi.test in Blog API 7

Same filename and directory in other branches
  1. 7.2 blogapi.test

File

blogapi.test
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');
  }

  /**
   * Create, edit, and delete post; upload file; set/get categories.
   */
  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.'));
  }

  /**
   * Add taxonomy vocabulary.
   *
   * @param string $vocab
   *   Vocabulary name.
   * @return integer
   *   The vocab ID.
   */
  function addVocabulary($vocab) {

    // Create a vocabulary.
    $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;
  }

  /**
   * Update a taxonomy vocabulary.
   *
   * @param  $vocab
   *   Vocabulary name.
   * @return integer
   *   The vocab ID.
   */
  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);
  }

  /**
   * Add a taxonomy term to vocabulary.
   *
   * @param integer $vid
   *   Vocabulary ID.
   * @param string $term
   *   Term name.
   * @return integer
   *   The Term ID.
   */
  function addTerm($vid, $term_name) {
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vid;
    taxonomy_term_save($term);
    return $term->tid;
  }

}

Classes

Namesort descending Description
BlogAPITestCase