Skip to content
Snippets Groups Projects
Commit 012fd074 authored by Pawel Mrowiec's avatar Pawel Mrowiec
Browse files

Add getOriginalValue to AbstractFilter, write tests

parent 79ed83bc
No related branches found
No related tags found
No related merge requests found
.idea .idea
/vendor/ /vendor/
/bin/.phpunit
...@@ -15,6 +15,11 @@ abstract class AbstractFilter ...@@ -15,6 +15,11 @@ abstract class AbstractFilter
*/ */
protected $value; protected $value;
/**
* @var string|null
*/
protected $originalValue;
/** /**
* @var bool * @var bool
*/ */
...@@ -36,7 +41,7 @@ abstract class AbstractFilter ...@@ -36,7 +41,7 @@ abstract class AbstractFilter
*/ */
public function getValue(): ?string public function getValue(): ?string
{ {
return trim($this->value); return $this->value;
} }
/** /**
...@@ -44,7 +49,11 @@ abstract class AbstractFilter ...@@ -44,7 +49,11 @@ abstract class AbstractFilter
*/ */
public function setValue(string $value): void public function setValue(string $value): void
{ {
$this->value = $value; $this->originalValue = $value;
if (strlen(trim($value)) > 0) {
$this->value = trim($value);
}
} }
/** /**
...@@ -55,6 +64,14 @@ abstract class AbstractFilter ...@@ -55,6 +64,14 @@ abstract class AbstractFilter
return !empty($this->getValue()); return !empty($this->getValue());
} }
/**
* @return string|null
*/
public function getOriginalValue(): ?string
{
return $this->originalValue;
}
/** /**
* @return void * @return void
*/ */
......
<?php
namespace QueryFilter\Tests\Filter;
use PHPUnit\Framework\TestCase;
use QueryFilter\Filter\AbstractFilter;
/**
* Class AbstractFilterTest
* @package QueryFilter\Tests\Filter
*/
class AbstractFilterTest extends TestCase
{
/**
* @var AbstractFilter
*/
private $filter;
public function setUp()
{
$this->filter = $this->getMockForAbstractClass(AbstractFilter::class);
$this->filter->expects($this->any())
->method('getName')
->will($this->returnValue('test'));
}
public function testSetValueMethodWithCorrectValue()
{
$this->filter->setValue(' value ');
$this->assertEquals('value', $this->filter->getValue());
$this->assertEquals(' value ', $this->filter->getOriginalValue());
$this->assertTrue($this->filter->hasValue());
}
public function testSetValueMethodWithIncorrectValue()
{
$this->filter->setValue(' ');
$this->assertEquals(null, $this->filter->getValue());
$this->assertEquals(' ', $this->filter->getOriginalValue());
$this->assertFalse($this->filter->hasValue());
}
public function testEnableMethod()
{
$this->filter->enable();
$this->assertTrue($this->filter->isEnabled());
}
public function testDisableMethod()
{
$this->filter->disable();
$this->assertFalse($this->filter->isEnabled());
}
public function testCanBeAppliedMethod()
{
$this->filter->enable();
$this->filter->setValue('value');
$this->assertTrue($this->filter->canBeApplied());
}
}
<?php
namespace QueryFilter\Tests\Filter;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\QueryBuilder;
use PHPUnit\Framework\TestCase;
use QueryFilter\Filter\Limit;
/**
* Class LimitTest
* @package QueryFilter\Tests\Filter
*/
class LimitTest extends TestCase
{
/**
* @var Limit
*/
private $filter;
/**
* @var EntityManager
*/
private $entityManager;
public function setUp()
{
$this->entityManager = $this->getMockBuilder(EntityManager::class)
->disableOriginalConstructor()
->getMock();
$this->filter = new Limit();
}
public function testGetName()
{
$this->assertEquals('limit', $this->filter->getName());
}
public function testApplyFilterMethod()
{
$this->filter->setValue(5);
$queryBuilder = $this->getMockBuilder(QueryBuilder::class)
->setMethods(['setMaxResults'])
->disableOriginalConstructor()
->getMock();
$queryBuilder->expects($this->once())
->method('setMaxResults')
->with(5)
->will($this->returnValue($queryBuilder));
$this->filter->applyFilter($queryBuilder);
}
}
<?php
namespace QueryFilter\Tests\Filter;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\QueryBuilder;
use PHPUnit\Framework\TestCase;
use QueryFilter\Filter\Offset;
/**
* Class OffsetTest
* @package QueryFilter\Tests\Filter
*/
class OffsetTest extends TestCase
{
/**
* @var Offset
*/
private $filter;
/**
* @var EntityManager
*/
private $entityManager;
public function setUp()
{
$this->entityManager = $this->getMockBuilder(EntityManager::class)
->disableOriginalConstructor()
->getMock();
$this->filter = new Offset();
}
public function testGetName()
{
$this->assertEquals('offset', $this->filter->getName());
}
public function testApplyFilterMethod()
{
$this->filter->setValue(5);
$queryBuilder = $this->getMockBuilder(QueryBuilder::class)
->setMethods(['setFirstResult'])
->disableOriginalConstructor()
->getMock();
$queryBuilder->expects($this->once())
->method('setFirstResult')
->with(5)
->will($this->returnValue($queryBuilder));
$this->filter->applyFilter($queryBuilder);
}
}
<?php
namespace QueryFilter\Tests\Service;
use PHPUnit\Framework\TestCase;
use QueryFilter\Filter\AbstractFilter;
use QueryFilter\Service\QueryFilterService;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Class QueryFilterServiceTest
* @package QueryFilter\Tests\Service
*/
class QueryFilterServiceTest extends TestCase
{
/**
* @var QueryFilterService
*/
private $service;
/**
* @var AbstractFilter
*/
private $filter;
public function setUp()
{
$request = $this->createMock(Request::class);
$request->query = $this->createMock(ParameterBag::class);
$request->query->expects($this->any())
->method('get')
->with('test')
->willReturn(5);
$requestStack = $this->createMock(RequestStack::class);
$requestStack->expects($this->any())
->method('getCurrentRequest')
->willReturn($request);
$this->service = new QueryFilterService($requestStack);
$this->filter = $this->getMockForAbstractClass(AbstractFilter::class);
$this->filter->expects($this->any())
->method('getName')
->willReturn('test');
$this->service->registerFilter($this->filter);
}
public function testGetFilterMethodWithCorrectValue()
{
$this->assertTrue($this->service->hasFilter('test'));
$this->assertEquals('test', $this->service->getFilter('test')->getName());
$this->assertEquals(5, $this->service->getFilter('test')->getValue());
}
public function testGetFilterMethodWithIncorrectValue()
{
$this->assertFalse($this->service->hasFilter('testInvalid'));
$this->assertEquals(null, $this->service->getFilter('testInvalid'));
}
public function testEnableFilterMethod()
{
$this->service->enableFilter('test');
$this->assertTrue($this->service->getFilter('test')->isEnabled());
}
public function testDisableFilterMethod()
{
$this->service->disableFilter('test');
$this->assertFalse($this->service->getFilter('test')->isEnabled());
}
}
#!/usr/bin/env php
<?php
if (!file_exists(dirname(__DIR__) . '/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
echo "Unable to find the `simple-phpunit` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
exit(1);
}
$classLoader = require dirname(__DIR__) . '/vendor/autoload.php';
if (false === getenv('SYMFONY_PHPUNIT_REMOVE')) {
putenv('SYMFONY_PHPUNIT_REMOVE=');
}
if (false === getenv('SYMFONY_PHPUNIT_DIR')) {
putenv('SYMFONY_PHPUNIT_DIR=' . __DIR__ . '/.phpunit');
}
require dirname(__DIR__) . '/vendor/symfony/phpunit-bridge/bin/simple-phpunit';
...@@ -16,14 +16,21 @@ ...@@ -16,14 +16,21 @@
"symfony/orm-pack": "^1.0", "symfony/orm-pack": "^1.0",
"symfony/yaml": "^3.4|^4.0" "symfony/yaml": "^3.4|^4.0"
}, },
"require-dev": {
"symfony/phpunit-bridge": "^4.1"
},
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"QueryFilter\\": "" "QueryFilter\\": ""
} },
}, "exclude-from-classmap": [
"autoload-dev": { "/Tests/"
"psr-4": { ]
"QueryFilter\\Tests\\": "tests/"
}
} }
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "a9d16274ac169337015d4f83ebfc0bcd", "content-hash": "6db895101d76c75b9b2691bc2682e1f6",
"packages": [ "packages": [
{ {
"name": "doctrine/annotations", "name": "doctrine/annotations",
...@@ -2874,7 +2874,74 @@ ...@@ -2874,7 +2874,74 @@
"time": "2018-10-24T07:43:44+00:00" "time": "2018-10-24T07:43:44+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [
{
"name": "symfony/phpunit-bridge",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "6edaae18c553f7d6c6aeb8babf6bf2633cc2902a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/6edaae18c553f7d6c6aeb8babf6bf2633cc2902a",
"reference": "6edaae18c553f7d6c6aeb8babf6bf2633cc2902a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
},
"suggest": {
"ext-zip": "Zip support is required when using bin/simple-phpunit",
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
},
"bin": [
"bin/simple-phpunit"
],
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
},
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Bridge\\PhpUnit\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2018-11-11T19:52:12+00:00"
}
],
"aliases": [], "aliases": [],
"minimum-stability": "dev", "minimum-stability": "dev",
"stability-flags": [], "stability-flags": [],
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.5/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />
</php>
<testsuites>
<testsuite name="Query Filter Test Suite">
<directory>./Tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./</directory>
<exclude>
<directory>./Tests</directory>
<directory>./vendor</directory>
<directory>./bin</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment