'Garbage collection', 'description' => 'Checks garbage collection of batched exports', 'group' => 'Views Data Export', ); } /** * Test that VDE export can only be downloaded by the user that created them. */ public function testExportedGarbageCollection() { // Run a batched export. $path = 'vde_test/' . $this->randomName(); list($view, $expected) = $this->getExportView($path); $display = &$view->display['vde_test']->handler; // Set this view to be batched. $display->override_option('use_batch', 'batch'); // Save this view so we can hit the path. $view->save(); // Ensure that the menu router system is rebuilt on the next page load. variable_set('menu_rebuild_needed', TRUE); $exports = $this->getNumberOfStoredExports(); $files = $this->getNumberOfFiles(); $this->assertBatchedExportEqual($path, $expected, 'Batched access export matched expected output.'); // We should have created a new export and file. $this->assertEqual($this->getNumberOfStoredExports(), $exports + 1, 'A single new batched export was created'); $this->assertEqual($this->getNumberOfFiles(), $files + 1, 'A single new temporary file was created'); $middle_timestamp = time(); sleep(1); $this->assertBatchedExportEqual($path, $expected, 'Batched access export matched expected output.'); // We should have created a new export and file. $this->assertEqual($this->getNumberOfStoredExports(), $exports + 2, 'A single new batched export was created'); $this->assertEqual($this->getNumberOfFiles(), $files + 2, 'A single new temporary file was created'); // Garbage collect the first export only. views_data_export_garbage_collect(REQUEST_TIME - $middle_timestamp); $this->assertEqual($this->getNumberOfStoredExports(), $exports + 1, 'Garbage collection removed 1 old export'); $this->assertEqual($this->getNumberOfFiles(), $files + 1, 'Garbage collection removed 1 old temporary file'); } protected function getNumberOfStoredExports() { return (int) db_select('views_data_export')->countQuery()->execute()->fetchField(); } protected function getNumberOfFiles() { return (int) db_select('file_managed')->countQuery()->execute()->fetchField(); } /** * Build and return a basic view of the views_test table. * * @return view */ protected function getBasicExportView() { views_include('view'); // Create the basic view. $view = new view(); $view->vid = 'new'; $view->base_table = 'views_test'; // Set up the fields we need. $display = $view->new_display('default', 'Master', 'default'); $display->override_option('fields', array( 'id' => array( 'id' => 'id', 'table' => 'views_test', 'field' => 'id', 'relationship' => 'none', ), 'name' => array( 'id' => 'name', 'table' => 'views_test', 'field' => 'name', 'relationship' => 'none', ), 'age' => array( 'id' => 'age', 'table' => 'views_test', 'field' => 'age', 'relationship' => 'none', ), )); // Set up the sort order. $display->override_option('sorts', array( 'id' => array( 'order' => 'ASC', 'id' => 'id', 'table' => 'views_test', 'field' => 'id', 'relationship' => 'none', ), )); // Set up the pager. $display->override_option('pager', array( 'type' => 'none', 'options' => array('offset' => 0), )); return $view; } protected function getStylePluginName() { return 'views_data_export_txt'; } protected function getExportView($path = 'vde_test') { // Create the basic view. $view = $this->getBasicExportView(); $display = $view->new_display('views_data_export', 'Data export', 'vde_test'); $display->override_option('style_plugin', $this->getStylePluginName()); $display->override_option('path', $path); $expected = '[ID] 1 [Name] John [Age] 25 ---------------------------------------- [ID] 2 [Name] George [Age] 27 ---------------------------------------- [ID] 3 [Name] Ringo [Age] 28 ---------------------------------------- [ID] 4 [Name] Paul [Age] 26 ---------------------------------------- [ID] 5 [Name] Meredith [Age] 30 ----------------------------------------'; return array(&$view, $expected); } }