Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/vendor/
logs/
.idea/
.phpunit.result.cache
4 changes: 2 additions & 2 deletions Controller/DataTableController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

namespace CrossKnowledge\DataTableBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

class DataTableController extends AbstractController
class DataTableController extends Controller
{
/**
* @param Request $request
Expand Down
65 changes: 29 additions & 36 deletions DataTable/Renderer/TwigRenderer.php
Original file line number Diff line number Diff line change
@@ -1,36 +1,29 @@
<?php

namespace CrossKnowledge\DataTableBundle\DataTable\Renderer;

use CrossKnowledge\DataTableBundle\DataTable\Table\AbstractTable;
use Twig\Environment;

class TwigRenderer implements RendererInterface
{
/** @var Environment */
protected $twig;

/**
* TwigRenderer constructor
*
* @param Environment $env
*/
public function __construct(Environment $env)
{
$this->twig = $env;
}

public function render(AbstractTable $table)
{
$tableOptions = $table->getOptions();
$data = [
'columns' => $table->getClientSideColumns(),
'datatable' => $table,
];
if ($tableOptions['has_filter_form'])
{
$data['filterForm'] = $table->getFilterForm()->createView();
}
return $this->twig->loadTemplate($tableOptions['template'])->render($data);
}
}
<?php

namespace CrossKnowledge\DataTableBundle\DataTable\Renderer;

use CrossKnowledge\DataTableBundle\DataTable\Table\AbstractTable;

class TwigRenderer implements RendererInterface
{
protected $twig;

public function __construct(\Twig_Environment $env)
{
$this->twig = $env;
}

public function render(AbstractTable $table)
{
$tableOptions = $table->getOptions();
$data = [
'columns' => $table->getClientSideColumns(),
'datatable' => $table,
];
if ($tableOptions['has_filter_form'])
{
$data['filterForm'] = $table->getFilterForm()->createView();
}
return $this->twig->loadTemplate($tableOptions['template'])->render($data);
}
}
66 changes: 33 additions & 33 deletions Resources/config/services.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@


services:
crossKnowledge.datatable.twig_extension:
class: CrossKnowledge\DataTableBundle\Twig\DataTableExtension
arguments:
- '@crossknowledge_datatable.twig_renderer'
tags:
- { name: twig.extension }

crossknowledge_datatable.registry:
public: true
class: CrossKnowledge\DataTableBundle\DataTable\DataTableRegistry

crossknowledge_datatable.default_formatter:
class: CrossKnowledge\DataTableBundle\DataTable\Formatter\DefaultFormatter

crossknowledge_datatable.classic_table:
abstract: true
arguments:
- '@form.factory'
- '@security.authorization_checker'
- '@router'
- '@crossknowledge_datatable.default_formatter'

crossknowledge_datatable.default_renderer:
alias: crossknowledge_datatable.twig_renderer

crossknowledge_datatable.json_renderer:
public: true
class: CrossKnowledge\DataTableBundle\DataTable\Renderer\JsonRenderer

crossknowledge_datatable.twig_renderer:
class: CrossKnowledge\DataTableBundle\DataTable\Renderer\TwigRenderer
arguments:
- '@twig'

crossKnowledge.datatable.twig_extension:
class: CrossKnowledge\DataTableBundle\Twig\DataTableExtension
arguments: [@crossknowledge_datatable.twig_renderer]
tags:
- { name: twig.extension }

crossknowledge_datatable.registry:
class: CrossKnowledge\DataTableBundle\DataTable\DataTableRegistry

crossknowledge_datatable.default_formatter:
class: CrossKnowledge\DataTableBundle\DataTable\Formatter\DefaultFormatter

crossknowledge_datatable.classic_table:
abstract: true
arguments:
- @form.factory
- @security.authorization_checker
- @router
- @crossknowledge_datatable.default_formatter

crossknowledge_datatable.default_renderer:
alias: crossknowledge_datatable.twig_renderer

crossknowledge_datatable.json_renderer:
class: CrossKnowledge\DataTableBundle\DataTable\Renderer\JsonRenderer

crossknowledge_datatable.twig_renderer:
class: CrossKnowledge\DataTableBundle\DataTable\Renderer\TwigRenderer
arguments: [@twig]

3 changes: 1 addition & 2 deletions Tests/Controller/DataTableControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\HttpFoundation\Request;
use PHPUnit\Framework\TestCase;

class DataTableControllerTest extends TestCase
class DataTableControllerTest extends \PHPUnit_Framework_TestCase
{
use UsesContainerTrait;

Expand Down
16 changes: 6 additions & 10 deletions Tests/CrossKnowledgeDataTableBundleTest.php
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
<?php


namespace CrossKnowledge\DataTableDundle\Tests;


use CrossKnowledge\DataTableBundle\CrossKnowledgeDataTableBundle;
use CrossKnowledge\DataTableBundle\DependencyInjection\Compiler\DatatablePass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use PHPUnit\Framework\TestCase;

class CrossKnowledgeDataTableBundleTest extends TestCase
class CrossKnowledgeDataTableBundleTest extends \PHPUnit_Framework_TestCase
{
/**
* Test if the DataTable compiler pass is successfully registered.
*/
public function testPassIsRegistered()
{
$container = new ContainerBuilder();
(new CrossKnowledgeDataTableBundle())->build($container);
$compilerPasses = $container->getCompilerPassConfig()->getBeforeOptimizationPasses();
$bundle = new CrossKnowledgeDataTableBundle();
$bundle->build($container);

$this->assertNotEmpty(array_filter($compilerPasses, function($compilerPass) {
return $compilerPass instanceof DatatablePass;
}));
$this->assertInstanceOf(DatatablePass::class, $container->getCompilerPassConfig()->getBeforeOptimizationPasses()[0]);
}
}
95 changes: 45 additions & 50 deletions Tests/DataTable/Column/ColumnTest.php
Original file line number Diff line number Diff line change
@@ -1,50 +1,45 @@
<?php

namespace CrossKnowledge\DataTableDundle\Tests\DataTable\Column;

use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\Column;
use PHPUnit\Framework\TestCase;
use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;

class ColumnTest extends TestCase
{
/**
* Test if instantiate a column with an undefined option throws an exception.
*/
public function testUndefinedOptionThrowsException()
{
$this->expectException(UndefinedOptionsException::class);
(new Column("test", ['not_defined' => true]));
}

public function testFormatCellUsesCallback()
{
$column = new Column("test");
$column->setFormatValueCallback(function($val, $row){
return $val.'ok';
});

$this->assertEquals('testok', $column->formatCell('test', [], 'view'));
$column->setFormatValueCallback(null);

$this->assertEquals('test', $column->formatCell('test', [], 'view'), 'callback should have been resetted');
}

public function testBasicGetterSetter()
{
$column = (new Column("test", ['auto_escape' => false]))
->setFormatValueCallback(function() {
return 'test ok';
})
->setIdentifier('test');

$this->assertEquals("test", $column->getOptions()['title']);
$this->assertEquals("test ok", call_user_func($column->getFormatValueCallback()));
$this->assertFalse($column->getOptions()['auto_escape'], 'Autoescape has been disabled');

$column->setOptions(['defaultContent' => 'test']);
$this->assertArrayHasKey('defaultContent', $column->getOptions());

$this->assertTrue($column->getOptions()['auto_escape'], 'Default autoescape value must be resetted by setOptions');
}
}
<?php
namespace CrossKnowledge\DataTableDundle\Tests\DataTable\Column;


use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\Column;

class ColumnTest extends \PHPUnit_Framework_TestCase
{
public function testUndefinedOptionThrowsException()
{
$this->setExpectedException('Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException');
$column = new Column("test", ['not_defined' => true]);
}

public function testFormatCellUsesCallback()
{
$column = new Column("test");
$column->setFormatValueCallback(function($val, $row){
return $val.'ok';
});

$this->assertEquals('testok', $column->formatCell('test', [], 'view'));
$column->setFormatValueCallback(null);

$this->assertEquals('test', $column->formatCell('test', [], 'view'), 'callback should have been resetted');
}

public function testBasicGetterSetter()
{
$column = (new Column("test", ['auto_escape' => false]))
->setFormatValueCallback(function() {
return 'test ok';
})
->setIdentifier('test');

$this->assertEquals("test", $column->getOptions()['title']);
$this->assertEquals("test ok", call_user_func($column->getFormatValueCallback()));
$this->assertFalse($column->getOptions()['auto_escape'], 'Autoescape has been disabled');

$column->setOptions(['defaultContent' => 'test']);
$this->assertArrayHasKey('defaultContent', $column->getOptions());

$this->assertTrue($column->getOptions()['auto_escape'], 'Default autoescape value must be resetted by setOptions');
}
}
3 changes: 1 addition & 2 deletions Tests/DataTable/Column/DateTimeColumnTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@


use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\DateTimeColumn;
use PHPUnit\Framework\TestCase;

class DateTimeColumnTest extends TestCase
class DateTimeColumnTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider dateFormatProvider
Expand Down
3 changes: 1 addition & 2 deletions Tests/DataTable/Column/LinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
namespace CrossKnowledge\DataTableDundle\Tests\DataTable\Column;

use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\Link;
use PHPUnit\Framework\TestCase;

class LinkTest extends TestCase
class LinkTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider linkTestProvider
Expand Down
3 changes: 1 addition & 2 deletions Tests/DataTable/ColumnBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@

use CrossKnowledge\DataTableBundle\DataTable\ColumnBuilder;
use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\Column;
use PHPUnit\Framework\TestCase;

class ColumnBuilderTest extends TestCase
class ColumnBuilderTest extends \PHPUnit_Framework_TestCase
{
public function testBuilder()
{
Expand Down
3 changes: 1 addition & 2 deletions Tests/DataTable/Formatter/DefaultFormatterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@

use CrossKnowledge\DataTableBundle\DataTable\Formatter\DefaultFormatter;
use CrossKnowledge\DataTableBundle\DataTable\Table\Element\Column\Column;
use PHPUnit\Framework\TestCase;

class DefaultFormatterTest extends TestCase
class DefaultFormatterTest extends \PHPUnit_Framework_TestCase
{
public function testFormatRowAutoEscapeOption()
{
Expand Down
3 changes: 1 addition & 2 deletions Tests/DataTable/Layout/LayoutsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
use CrossKnowledge\DataTableBundle\DataTable\Table\Layout\Bootstrap;
use CrossKnowledge\DataTableBundle\DataTable\Table\Layout\CustomLayout;
use CrossKnowledge\DataTableBundle\DataTable\Table\Layout\DataTableLayoutInterface;
use PHPUnit\Framework\TestCase;

class ColumnBuilderTest extends TestCase
class ColumnBuilderTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider layoutsProvider
Expand Down
48 changes: 24 additions & 24 deletions Tests/DataTable/RegistryTest.php
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
<?php
namespace CrossKnowledge\DataTableDundle\Tests\DataTable;
use BadMethodCallException;
use CrossKnowledge\DataTableBundle\DataTable\DataTableRegistry;
use CrossKnowledge\DataTableBundle\DataTable\Table\AbstractTable;
use PHPUnit\Framework\TestCase;
class RegistryTest extends TestCase
{
public function testRetrieveTableById()
{
$table = $this->getMockBuilder(AbstractTable::class)
->disableOriginalConstructor()
->getMock();
$registry = new DataTableRegistry(['test' => $table]);
$this->assertEquals($table, $registry->retrieveByTableId('test'));
$this->expectException(BadMethodCallException::class);
$registry->retrieveByTableId('undef');
}
}
<?php


namespace CrossKnowledge\DataTableDundle\Tests\DataTable;


use CrossKnowledge\DataTableBundle\DataTable\DataTableRegistry;
use CrossKnowledge\DataTableBundle\DataTable\Table\AbstractTable;

class RegistryTest extends \PHPUnit_Framework_TestCase
{
public function testRetrieveTableById()
{
$table = $this->getMockBuilder(AbstractTable::class)
->disableOriginalConstructor()
->getMock();

$registry = new DataTableRegistry(['test' => $table]);
$this->assertEquals($table, $registry->retrieveByTableId('test'));

$this->setExpectedException('\BadMethodCallException');
$registry->retrieveByTableId('undef');
}
}
Loading