You are here

public function NodeImportNode::testBasicNode in Node import 6

Test import of basic node.

File

tests/supported/node.test, line 31

Class

NodeImportNode

Code

public function testBasicNode() {

  // Type to import.
  $type = $this
    ->drupalCreateContentType(array(
    'title_label' => $this
      ->randomName() . ' (title)',
    // Test automap
    'body_label' => $this
      ->randomName() . ' (body)',
    // Test automap
    'min_word_count' => 1,
  ));

  // Create the user doing the import.
  $perms = array(
    'create ' . $type->name . ' content',
  );
  $admin = $this
    ->nodeImportCreateUser($perms);
  $admin_role = array_pop(array_diff(array_keys($admin->roles), array(
    DRUPAL_ANONYMOUS_RID,
    DRUPAL_AUTHENTICATED_RID,
  )));

  // Create two filters (one this role can use and one this role can not use).
  $filter_admin = $this
    ->drupalCreateUser(array(
    'administer filters',
  ));
  $this
    ->drupalLogin($filter_admin);
  $filter_allow = array(
    'name' => 'filter admin role (' . $admin_role . ') can use',
  );
  $filter_deny = array(
    'name' => 'filter admin role (' . $admin_role . ') can not use',
  );
  $filter_default = array(
    'format' => variable_get('filter_default_format', 1),
  );
  foreach (user_roles() as $rid => $role) {
    $filter_allow["roles[{$rid}]"] = $rid == $admin_role;
    $filter_deny["roles[{$rid}]"] = FALSE;
  }
  $this
    ->drupalPost('admin/settings/filters/add', $filter_allow, t('Save configuration'));
  $this
    ->drupalPost('admin/settings/filters/add', $filter_deny, t('Save configuration'));
  $result = db_query("SELECT format, name FROM {filter_formats}");
  while ($filter = db_fetch_object($result)) {
    if ($filter->name == $filter_allow['name']) {
      $filter_allow['format'] = $filter->format;
    }
    if ($filter->name == $filter_deny['name']) {
      $filter_deny['format'] = $filter->format;
    }
    if ($filter->format == variable_get('filter_default_format', 1)) {
      $filter_default['name'] = $filter->name;
    }
  }
  $this
    ->drupalLogout();

  // Create a file to import.
  $data = array(
    array(
      $type->title_label,
      $type->body_label,
      'format',
    ),
    // Automap header
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      '',
    ),
    // OK - 1
    array(
      '',
      $this
        ->randomName(),
      '',
    ),
    // No title - 2
    array(
      $this
        ->randomName(),
      '',
      '',
    ),
    // Body too short - 3
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_default['name'],
    ),
    // OK - 4
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_default['format'],
    ),
    // OK - 5
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_allow['name'],
    ),
    // OK - 6
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_allow['format'],
    ),
    // OK - 7
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_deny['name'],
    ),
    // No such filter - 8
    array(
      $this
        ->randomName(),
      $this
        ->randomName(),
      $filter_deny['format'],
    ),
  );
  $path = $this
    ->nodeImportCreateFile($data);

  // Create a new import task.
  $edit = array(
    'type' => "node:" . $type->name,
    'file' => $path,
  );
  $this
    ->drupalLogin($admin);
  $taskid = $this
    ->nodeImportCreateTask($edit);

  // No need to continue if the task was not created.
  if ($taskid === FALSE) {
    return;
  }

  // Finish all pending import tasks.
  $this
    ->nodeImportDoAllTasks();

  // Check all rows.
  $results = db_query("SELECT * FROM {node_import_status} WHERE taskid = %d", $taskid);
  $i = 0;
  while ($result = db_fetch_array($results)) {
    $i++;
    $result['errors'] = unserialize($result['errors']);
    $node = NULL;
    if ($result['status'] == NODE_IMPORT_STATUS_DONE) {
      $node = node_load($result['objid']);
    }
    switch ($i) {
      case 1:

        // OK
        $this
          ->assertRowStatusDONE($result);
        $this
          ->assertNotNull($node, t('Node exists (nid: %nid).', array(
          '%nid' => $result['objid'],
        )), 'Node import');
        $this
          ->assertEqual($node->title, $data[$i][0], t('Title correctly set.'), 'Node import');
        $this
          ->assertEqual($node->body, $data[$i][1], t('Body correctly set.'), 'Node import');
        $this
          ->assertEqual($node->format, variable_get('filter_default_format', 1), t('Input format correctly set.'), 'Node import');
        break;
      case 2:

        // No title
        $this
          ->assertRowStatusERROR($result);
        $this
          ->assertRowErrorContains($result, t('!name field is required.', array(
          '!name' => $data[0][0],
        )), t('Error on empty title.'));
        break;
      case 3:

        // Body too short
        $this
          ->assertRowStatusERROR($result);
        $this
          ->assertRowErrorContains($result, t('!name field is required.', array(
          '!name' => $data[0][1],
        )), t('Error on empty body.'));
        break;
      case 4:

      // OK
      case 5:
        $this
          ->assertRowStatusDONE($result);
        $this
          ->assertNotNull($node, t('Node exists (nid: %nid).', array(
          '%nid' => $result['objid'],
        )), 'Node import');
        $this
          ->assertEqual($node->title, $data[$i][0], t('Title correctly set.'), 'Node import');
        $this
          ->assertEqual($node->body, $data[$i][1], t('Body correctly set.'), 'Node import');
        $this
          ->assertEqual($node->format, $filter_default['format'], t('Input format correctly set.'), 'Node import');
        break;
      case 6:

      // OK
      case 7:
        $this
          ->assertRowStatusDONE($result);
        $this
          ->assertNotNull($node, t('Node exists (nid: %nid).', array(
          '%nid' => $result['objid'],
        )), 'Node import');
        $this
          ->assertEqual($node->title, $data[$i][0], t('Title correctly set.'), 'Node import');
        $this
          ->assertEqual($node->body, $data[$i][1], t('Body correctly set.'), 'Node import');
        $this
          ->assertEqual($node->format, $filter_allow['format'], t('Input format correctly set.'), 'Node import');
        break;
      case 8:

        // No such filter
        $this
          ->assertRowStatusERROR($result);
        $this
          ->assertRowErrorContains($result, t('Input error: %value is not allowed for %name (not in allowed values list).', array(
          '%value' => $filter_deny['name'],
          '%name' => t('Input format'),
        )), t('Error on non-existing filter.'));
        break;
      case 9:

        // No such filter
        $this
          ->assertRowStatusERROR($result);
        $this
          ->assertRowErrorContains($result, t('Input error: %value is not allowed for %name (not in allowed values list).', array(
          '%value' => $filter_deny['format'],
          '%name' => t('Input format'),
        )), t('Error on non-existing filter.'));
        break;
    }
  }
  $this
    ->assertTrue($i == 9, t('Correct number of rows (%d) were imported.', array(
    '%d' => $i,
  )), 'Node import');
}