open-orchestra/open-orchestra-mongo-libs

View on GitHub
Pagination/Tests/MongoTrait/FilterTypeStrategy/Strategies/DateFilterStrategyTest.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\Pagination\Tests\MongoTrait\FilterTypeStrategy\Strategies;

use OpenOrchestra\Pagination\MongoTrait\FilterTypeStrategy\Strategies\DateFilterStrategy;
use MongoDate;
use Phake;

/**
 * Class DateFilterStrategyTest
 */
class DateTestFilterStrategy extends AbstractTestFilterStrategy
{
    /**
     * @var DateFilterStrategy
     */
    protected $strategy;

    public function setUp()
    {
        $this->strategy = new DateFilterStrategy();
    }

    /**
     * @param string $type
     * @param bool   $expected
     *
     * @dataProvider provideSupport
     */
    public function testSupport($type, $expected)
    {
        $output = $this->strategy->support($type);
        $this->assertEquals($output, $expected);
    }

    /**
     * @return array
     */
    public function provideSupport()
    {
        return array(
            array('boolean', false),
            array('string', false),
            array('integer', false),
            array('date', true),
            array('', false),
            array(null, false),
        );
    }

    /**
     * @param string  $value
     * @param string  $filterValue
     * @param string  $language
     *
     * @dataProvider provideGenerateFilter
     */
    public function testGenerateFilter($value, $filterValue, $format)
    {
        $strategy = new DateFilterStrategy();

        $name = 'fakeName';
        $filterValue = new MongoDate(strtotime($filterValue));
        $filter = $strategy->generateFilter($name, $value, 'fakeDocumentName', $format);
        $this->assertSame($filter[$name]->sec, $filterValue->sec);
        $this->assertSame($filter[$name]->usec, $filterValue->usec);
    }

    /**
     * @return array
     */
    public function provideGenerateFilter()
    {
        return array(
            array("19/10/2015 16:23:12", "19-10-2015 16:23:12", "dd/mm/yy"),
            array("10/19/2015 16:23:12", "2015-10-19 16:23:12", "mm/dd/yy"),
        );
    }

    /**
     * Test generate filter date without hour
     */
    public function testGenerateFilterWithoutHour()
    {
        $name = 'fakeName';
        $date  = "2015-10-21";
        $dateGte =  new MongoDate(strtotime($date));
        $dateLt =  new MongoDate(strtotime($date.' + 1 DAY'));
        $filter = $this->strategy->generateFilter($name, $date, 'fakeDocumentName');
        $this->assertSame($filter[$name]['$gte']->sec, $dateGte->sec);
        $this->assertSame($filter[$name]['$lt']->sec, $dateLt->sec);
    }

    /**
     * Test get name
     */
    public function testGetName()
    {
        $this->assertEquals($this->strategy->getName(), 'date_filter');
    }
}