installEntitySchema('node'); $this->installEntitySchema('user'); $this->installSchema('history', ['history']); // Use classy theme because its marker is wrapped in a span so it can be // easily targeted with xpath. \Drupal::service('theme_handler')->install(['classy']); \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('classy')); } /** * Tests the handlers. */ public function testHandlers() { $nodes = []; $node = Node::create([ 'title' => 'n1', 'type' => 'default', ]); $node->save(); $nodes[] = $node; $node = Node::create([ 'title' => 'n2', 'type' => 'default', ]); $node->save(); $nodes[] = $node; $account = User::create(['name' => 'admin']); $account->save(); \Drupal::currentUser()->setAccount($account); db_insert('history') ->fields([ 'uid' => $account->id(), 'nid' => $nodes[0]->id(), 'timestamp' => REQUEST_TIME - 100, ])->execute(); db_insert('history') ->fields([ 'uid' => $account->id(), 'nid' => $nodes[1]->id(), 'timestamp' => REQUEST_TIME + 100, ])->execute(); $column_map = [ 'nid' => 'nid', ]; // Test the history field. $view = Views::getView('test_history'); $view->setDisplay('page_1'); $this->executeView($view); $this->assertEqual(count($view->result), 2); $output = $view->preview(); $this->setRawContent(\Drupal::service('renderer')->renderRoot($output)); $result = $this->xpath('//span[@class=:class]', [':class' => 'marker']); $this->assertEqual(count($result), 1, 'Just one node is marked as new'); // Test the history filter. $view = Views::getView('test_history'); $view->setDisplay('page_2'); $this->executeView($view); $this->assertEqual(count($view->result), 1); $this->assertIdenticalResultset($view, [['nid' => $nodes[0]->id()]], $column_map); // Install Comment module and make sure that content types without comment // field will not break the view. // See \Drupal\history\Plugin\views\filter\HistoryUserTimestamp::query() \Drupal::service('module_installer')->install(['comment']); $view = Views::getView('test_history'); $view->setDisplay('page_2'); $this->executeView($view); } }