xref: /plugin/strata/_test/query_sort.test.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('strataquerytest.inc.php');
3*5153720fSfkaag71
4*5153720fSfkaag71/**
5*5153720fSfkaag71 * Tests queries - sorting.
6*5153720fSfkaag71 *
7*5153720fSfkaag71 * @group plugin_strata
8*5153720fSfkaag71 * @group plugins
9*5153720fSfkaag71 */
10*5153720fSfkaag71class query_sort_test extends Strata_Query_UnitTestCase {
11*5153720fSfkaag71
12*5153720fSfkaag71    function setup() {
13*5153720fSfkaag71        parent::setup();
14*5153720fSfkaag71    }
15*5153720fSfkaag71
16*5153720fSfkaag71    function testNumericSort() {
17*5153720fSfkaag71        $query = array (
18*5153720fSfkaag71            'type' => 'select',
19*5153720fSfkaag71            'grouping'=>array(),
20*5153720fSfkaag71            'group' => array (
21*5153720fSfkaag71                'type' => 'triple',
22*5153720fSfkaag71                'subject' => array (
23*5153720fSfkaag71                    'type' => 'variable',
24*5153720fSfkaag71                    'text' => 'p'
25*5153720fSfkaag71                ),
26*5153720fSfkaag71                'predicate' => array (
27*5153720fSfkaag71                    'type' => 'literal',
28*5153720fSfkaag71                    'text' => 'is rated'
29*5153720fSfkaag71                ),
30*5153720fSfkaag71                'object' => array (
31*5153720fSfkaag71                    'type' => 'variable',
32*5153720fSfkaag71                    'text' => 'rating'
33*5153720fSfkaag71                )
34*5153720fSfkaag71            ),
35*5153720fSfkaag71            'projection' => array (
36*5153720fSfkaag71                'p',
37*5153720fSfkaag71                'rating'
38*5153720fSfkaag71            ),
39*5153720fSfkaag71            'ordering' => array (
40*5153720fSfkaag71                array (
41*5153720fSfkaag71                    'variable' => 'rating',
42*5153720fSfkaag71                    'direction' => 'asc'
43*5153720fSfkaag71                )
44*5153720fSfkaag71            )
45*5153720fSfkaag71        );
46*5153720fSfkaag71
47*5153720fSfkaag71        $expected = array (
48*5153720fSfkaag71            array (
49*5153720fSfkaag71                'p' => array('person:carol'),
50*5153720fSfkaag71                'rating' => array('1')
51*5153720fSfkaag71            ),
52*5153720fSfkaag71            array (
53*5153720fSfkaag71                'p' => array('person:bob'),
54*5153720fSfkaag71                'rating' => array('8')
55*5153720fSfkaag71            ),
56*5153720fSfkaag71            array (
57*5153720fSfkaag71                'p' => array('person:alice'),
58*5153720fSfkaag71                'rating' => array('10')
59*5153720fSfkaag71            )
60*5153720fSfkaag71        );
61*5153720fSfkaag71
62*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
63*5153720fSfkaag71    }
64*5153720fSfkaag71
65*5153720fSfkaag71    function testPartiallyNumericSort() {
66*5153720fSfkaag71        $query = array (
67*5153720fSfkaag71            'type' => 'select',
68*5153720fSfkaag71            'grouping'=>array(),
69*5153720fSfkaag71            'group' => array (
70*5153720fSfkaag71                'type' => 'triple',
71*5153720fSfkaag71                'subject' => array (
72*5153720fSfkaag71                    'type' => 'variable',
73*5153720fSfkaag71                    'text' => 'p'
74*5153720fSfkaag71                ),
75*5153720fSfkaag71                'predicate' => array (
76*5153720fSfkaag71                    'type' => 'literal',
77*5153720fSfkaag71                    'text' => 'tax rate'
78*5153720fSfkaag71                ),
79*5153720fSfkaag71                'object' => array (
80*5153720fSfkaag71                    'type' => 'variable',
81*5153720fSfkaag71                    'text' => 'tax'
82*5153720fSfkaag71                )
83*5153720fSfkaag71            ),
84*5153720fSfkaag71            'projection' => array (
85*5153720fSfkaag71                'p',
86*5153720fSfkaag71                'tax'
87*5153720fSfkaag71            ),
88*5153720fSfkaag71            'ordering' => array (
89*5153720fSfkaag71                array (
90*5153720fSfkaag71                    'variable' => 'tax',
91*5153720fSfkaag71                    'direction' => 'asc'
92*5153720fSfkaag71                )
93*5153720fSfkaag71            )
94*5153720fSfkaag71        );
95*5153720fSfkaag71
96*5153720fSfkaag71        // Result might vary depending on database backed, only require that it does not fail
97*5153720fSfkaag71        $this->assertTrue($this->_triples->queryRelations($query));
98*5153720fSfkaag71    }
99*5153720fSfkaag71
100*5153720fSfkaag71}
101