views_handler_sort_date.test

Definition of ViewsHandlerSortDateTest.

File

tests/handlers/views_handler_sort_date.test

View source
<?php


/**
 * @file
 * Definition of ViewsHandlerSortDateTest.
 */

/**
 * Tests for core views_handler_sort_date handler.
 */
class ViewsHandlerSortDateTest extends ViewsSqlTest {
    
    /**
     *
     */
    public static function getInfo() {
        return array(
            'name' => 'Sort: date',
            'description' => 'Test the core views_handler_sort_date handler.',
            'group' => 'Views Handlers',
        );
    }
    
    /**
     *
     */
    protected function expectedResultSet($granularity, $reverse = TRUE) {
        $expected = array();
        if (!$reverse) {
            switch ($granularity) {
                case 'second':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'George',
                        ),
                    );
                    break;
                case 'minute':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'George',
                        ),
                    );
                    break;
                case 'hour':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'George',
                        ),
                    );
                    break;
                case 'day':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'George',
                        ),
                    );
                    break;
                case 'month':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                    );
                    break;
                case 'year':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                    );
                    break;
            }
        }
        else {
            switch ($granularity) {
                case 'second':
                    $expected = array(
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'John',
                        ),
                    );
                    break;
                case 'minute':
                    $expected = array(
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'John',
                        ),
                    );
                    break;
                case 'hour':
                    $expected = array(
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                        array(
                            'name' => 'John',
                        ),
                    );
                    break;
                case 'day':
                    $expected = array(
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                    );
                    break;
                case 'month':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                    );
                    break;
                case 'year':
                    $expected = array(
                        array(
                            'name' => 'John',
                        ),
                        array(
                            'name' => 'George',
                        ),
                        array(
                            'name' => 'Ringo',
                        ),
                        array(
                            'name' => 'Paul',
                        ),
                        array(
                            'name' => 'Meredith',
                        ),
                    );
                    break;
            }
        }
        return $expected;
    }
    
    /**
     * Tests numeric ordering of the result set.
     */
    public function testDateOrdering() {
        foreach (array(
            'second',
            'minute',
            'hour',
            'day',
            'month',
            'year',
        ) as $granularity) {
            foreach (array(
                FALSE,
                TRUE,
            ) as $reverse) {
                $view = $this->getBasicView();
                // Change the fields.
                $view->display['default']->handler
                    ->override_option('fields', array(
                    'name' => array(
                        'id' => 'name',
                        'table' => 'views_test',
                        'field' => 'name',
                        'relationship' => 'none',
                    ),
                    'created' => array(
                        'id' => 'created',
                        'table' => 'views_test',
                        'field' => 'created',
                        'relationship' => 'none',
                    ),
                ));
                // Change the ordering.
                $view->display['default']->handler
                    ->override_option('sorts', array(
                    'created' => array(
                        'id' => 'created',
                        'table' => 'views_test',
                        'field' => 'created',
                        'relationship' => 'none',
                        'granularity' => $granularity,
                        'order' => $reverse ? 'DESC' : 'ASC',
                    ),
                    'id' => array(
                        'id' => 'id',
                        'table' => 'views_test',
                        'field' => 'id',
                        'relationship' => 'none',
                        'order' => 'ASC',
                    ),
                ));
                // Execute the view.
                $this->executeView($view);
                // Verify the result.
                $this->assertEqual(count($this->dataSet()), count($view->result), t('The number of returned rows match.'));
                $this->assertIdenticalResultset($view, $this->expectedResultSet($granularity, $reverse), array(
                    'views_test_name' => 'name',
                ), t('Result is returned correctly when ordering by granularity @granularity, @reverse.', array(
                    '@granularity' => $granularity,
                    '@reverse' => $reverse ? t('reverse') : t('forward'),
                )));
                $view->destroy();
                unset($view);
            }
        }
    }

}

Classes

Title Deprecated Summary
ViewsHandlerSortDateTest Tests for core views_handler_sort_date handler.