public function test_factory_called_only_on_first_request()
 {
     $config = new Config();
     $config->setId('some_key');
     $factory = $this->prophesize('\\RP\\DatatableBundle\\Datatable\\Factory');
     $factory->create($config)->willReturn('something')->shouldBeCalledTimes(1);
     $registry = new Registry($factory->reveal());
     $registry->addConfig($config);
     $registry->getDatatable('some_key');
     $registry->getDatatable('some_key');
     $registry->getDatatable('some_key');
 }
 /**
  * {@inheritdoc}
  */
 public function datatable(\Twig_Environment $twig, $options)
 {
     if (!isset($options['id'])) {
         throw new \InvalidArgumentException('Option id is required');
     }
     $dt = $this->datatableRegistry->getDatatable($options['id']);
     $config = $dt->getConfiguration();
     $options['js_conf'] = json_encode($config['js']);
     $options['js'] = json_encode($options['js']);
     $options['action'] = $dt->getHasAction();
     $options['action_twig'] = $dt->getHasRendererAction();
     $options['fields'] = $dt->getFields();
     $options['delete_form'] = $this->createDeleteForm('_id_')->createView();
     $options['search'] = $dt->getSearch();
     $options['search_fields'] = $dt->getSearchFields();
     $options['multiple'] = $dt->getMultiple();
     $options['sort'] = is_null($dt->getOrderField()) ? null : array(array_search($dt->getOrderField(), array_values($dt->getFields())), $dt->getOrderType());
     $main_template = 'AliDatatableBundle:Main:index.html.twig';
     if (isset($options['main_template'])) {
         $main_template = $options['main_template'];
     }
     return $twig->render($main_template, $options);
 }