165 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
<?php
 | 
						|
// $Id$
 | 
						|
 | 
						|
class BlogAPITestCase extends DrupalWebTestCase {
 | 
						|
  public static function getInfo() {
 | 
						|
    return array(
 | 
						|
      'name' => t('Blog API functionality'),
 | 
						|
      'description' => t('Create, edit, and delete post; upload file; and set/get categories.'),
 | 
						|
      'group' => t('Blog API'),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  function setUp() {
 | 
						|
    parent::setUp('blog', 'blogapi', 'taxonomy');
 | 
						|
 | 
						|
    // Force loading the xmlrpc.inc to have the xmlrpc() function.
 | 
						|
    drupal_function_exists('xmlrpc');
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Create, edit, and delete post; upload file; set/get categories.
 | 
						|
   */
 | 
						|
  function testBlogAPI() {
 | 
						|
    global $base_url;
 | 
						|
    // Create admin user and taxonomy for later use.
 | 
						|
    $admin_user = $this->drupalCreateUser(array('administer taxonomy'));
 | 
						|
    $this->drupalLogin($admin_user);
 | 
						|
    $vid = $this->addVocabulary('simpletest_vocab');
 | 
						|
    $term = $this->addTerm($vid, 'simpletest_term1');
 | 
						|
    $this->drupalLogout();
 | 
						|
 | 
						|
    // Create user.
 | 
						|
    $web_user = $this->drupalCreateUser(array('create blog content', 'delete own blog content', 'edit own blog content', 'administer content with blog api'));
 | 
						|
    $this->drupalLogin($web_user);
 | 
						|
 | 
						|
    // 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->assertTrue(false, '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->filepath);
 | 
						|
    $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.'));
 | 
						|
 | 
						|
    // Set post categories.
 | 
						|
    $categories = array(array('categoryId' => $term));
 | 
						|
    $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 && array_key_exists('categoryId', $result[0])) {
 | 
						|
      $this->assertEqual($term, $result[0]['categoryId'], t('Category list verified.'));
 | 
						|
    }
 | 
						|
 | 
						|
    // 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) {
 | 
						|
    $edit = array();
 | 
						|
    $edit['name'] = $vocab;
 | 
						|
    $edit['nodes[blog]'] = TRUE;
 | 
						|
    $this->drupalPost('admin/content/taxonomy/add', $edit, t('Save'));
 | 
						|
    $this->assertRaw(t('Created new vocabulary %vocab.', array('%vocab' => $edit['name'])), t('Taxonomy vocabulary added.'));
 | 
						|
 | 
						|
    $vocab_arr = taxonomy_get_vocabularies();
 | 
						|
    $vid = NULL;
 | 
						|
    foreach ($vocab_arr as $vocab_item) {
 | 
						|
      if ($vocab_item->name == $vocab) {
 | 
						|
        $vid = $vocab_item->vid;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    $this->assertNotNull($vid, t('Vocabulary found in database.'));
 | 
						|
 | 
						|
    return $vid;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * 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) {
 | 
						|
    $edit = array();
 | 
						|
    $edit['name'] = $term;
 | 
						|
    $this->drupalPost('admin/content/taxonomy/' . $vid . '/add', $edit, t('Save'));
 | 
						|
    $this->assertRaw(t('Created new term %term.', array('%term' => $edit['name'])), t('Taxonomy term added.'));
 | 
						|
 | 
						|
    $tree = taxonomy_get_tree($vid);
 | 
						|
    $tid = NULL;
 | 
						|
    foreach ($tree as $tree_term) {
 | 
						|
      if ($tree_term->name == $term) {
 | 
						|
        $tid = $tree_term->tid;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    $this->assertNotNull($tid, t('Term found in database.'));
 | 
						|
 | 
						|
    return $tid;
 | 
						|
  }
 | 
						|
}
 |