You are here

public function FillPdfTestCase::testFileAccess in FillPDF 7

Make sure that file access works properly.

File

tests/FillPdfTestCase.test, line 58

Class

FillPdfTestCase
Tests the PDF handling functions of the API (a.k.a. the whole API).

Code

public function testFileAccess() {
  $this
    ->createFileField('field_pdf', 'page');

  // Make a basic page.
  $new_node = new stdClass();
  $new_node->type = 'page';
  $new_node->title = t('Test node');
  $new_node->field_body = array(
    LANGUAGE_NONE => array(
      0 => array(
        'value' => 'This is test text.',
      ),
    ),
  );
  $new_node->uid = 1;
  node_save($new_node);
  $this
    ->configureBackend();

  // Upload a template.
  $this
    ->uploadTestPdf();
  $this
    ->assertFieldByXPath('//input[@id="edit-upload-pdf"]', NULL, 'PDF update component exists.');
  $this
    ->assertFieldByXPath('//input[@id="edit-upload-pdf"][@type="file"][@accept="application/pdf"]', NULL, 'PDF update component has appropriate attributes.');
  $fid = $this
    ->getLatestFillPdfForm();
  db_update('fillpdf_forms')
    ->fields(array(
    'destination_path' => 'output',
  ))
    ->condition('fid', $fid)
    ->execute();
  $fillpdf_object = fillpdf_merge_pdf($fid, array(
    $new_node->nid,
  ), NULL, NULL, FALSE, FALSE, TRUE, FALSE);
  $saved_file = fillpdf_action_save_to_file($fillpdf_object, 'fillpdf_test_v4.pdf', FALSE, FALSE);
  $saved_file->display = 1;

  // Create an unmanaged copy of the file.
  $copied_file_path = file_unmanaged_copy($saved_file->uri, $saved_file->uri, FILE_EXISTS_RENAME);
  $this
    ->assertEqual($copied_file_path, 'private://fillpdf/output/fillpdf_test_v4_0.pdf');
  $new_node->field_pdf = array(
    LANGUAGE_NONE => array(
      0 => (array) $saved_file,
    ),
  );
  node_save($new_node);
  $this
    ->drupalGet("node/{$new_node->nid}");
  $this
    ->assertResponse(403, 'Access properly denied for non-admin.');
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_v4.pdf');
  $this
    ->assertResponse(200, 'User can generate and access PDF from any data when they have the Publish All PDFs permission.');
  $this
    ->drupalLogin($this->nonPrivilegedUser);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_v4.pdf');
  $this
    ->assertResponse(403, 'User without Administer PDFs and without Publish All PDFs cannot access PDF they cannot view the node for.');
  variable_set('file_module_test_grant_download_access', TRUE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_v4.pdf');
  $this
    ->assertResponse(403, 'Access is denied even if another module grants access using hook_file_download().');
  variable_set('file_module_test_grant_download_access', FALSE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_v4_0.pdf');
  $this
    ->assertResponse(403, 'Access is not granted to an arbitrary private file by default.');
  variable_set('file_module_test_grant_download_access', TRUE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_v4_0.pdf');
  $this
    ->assertResponse(200, 'Access is granted to an arbitrary private file after another module grants access using hook_file_download().');
  variable_set('file_module_test_grant_download_access', FALSE);

  // Test access when generated through entities.
  $this
    ->drupalLogin($this->privilegedUser);
  $fillpdf_object = fillpdf_merge_pdf($fid, NULL, NULL, NULL, FALSE, FALSE, TRUE, FALSE, NULL, NULL, array(
    "node:{$new_node->nid}",
  ));
  $saved_file_2 = fillpdf_action_save_to_file($fillpdf_object, 'fillpdf_test_entity_v4.pdf', FALSE, FALSE);
  $saved_file_2->display = 1;

  // Create an unmanaged copy of the file.
  $copied_file_path = file_unmanaged_copy($saved_file_2->uri, $saved_file_2->uri, FILE_EXISTS_RENAME);
  $this
    ->assertEqual($copied_file_path, 'private://fillpdf/output/fillpdf_test_entity_v4_0.pdf');
  $new_node->field_pdf = array(
    LANGUAGE_NONE => array(
      0 => (array) $saved_file_2,
    ),
  );
  node_save($new_node);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_entity_v4.pdf');
  $this
    ->assertResponse(200, 'Entity mode: User can generate and access PDF from any data when they have the Publish All PDFs permission.');
  $this
    ->drupalLogin($this->nonPrivilegedUser);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_entity_v4.pdf');
  $this
    ->assertResponse(403, 'Entity mode: User without Administer PDFs and without Publish All PDFs cannot access PDF they cannot view the node for.');
  variable_set('file_module_test_grant_download_access', TRUE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_entity_v4.pdf');
  $this
    ->assertResponse(403, 'Access is denied even if another module grants access using hook_file_download().');
  variable_set('file_module_test_grant_download_access', FALSE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_entity_v4_0.pdf');
  $this
    ->assertResponse(403, 'Access is not granted to an arbitrary private file by default.');
  variable_set('file_module_test_grant_download_access', TRUE);
  $this
    ->drupalGet('system/files/fillpdf/output/fillpdf_test_entity_v4_0.pdf');
  $this
    ->assertResponse(200, 'Access is granted to an arbitrary private file after another module grants access using hook_file_download().');
  variable_set('file_module_test_grant_download_access', FALSE);
}