xref: /plugin/strata/_test/strataquerytest.inc.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('stratatest.inc.php');
3*5153720fSfkaag71require_once(DOKU_INC.'lib/plugins/strata/helper/util.php');
4*5153720fSfkaag71
5*5153720fSfkaag71/**
6*5153720fSfkaag71 * Tests query.
7*5153720fSfkaag71 *
8*5153720fSfkaag71 * @group plugin_strata
9*5153720fSfkaag71 * @group plugins
10*5153720fSfkaag71 */
11*5153720fSfkaag71class Strata_Query_UnitTestCase extends Strata_UnitTestCase {
12*5153720fSfkaag71
13*5153720fSfkaag71    function setup() {
14*5153720fSfkaag71        parent::setup();
15*5153720fSfkaag71        // Load types
16*5153720fSfkaag71        $types = new helper_plugin_strata_util();
17*5153720fSfkaag71        $string = $types->loadType('string');
18*5153720fSfkaag71        $ref = $types->loadType('ref');
19*5153720fSfkaag71        $image = $types->loadType('image');
20*5153720fSfkaag71
21*5153720fSfkaag71        // Create objects
22*5153720fSfkaag71        $bob = $ref->normalize('Bob', 'person');
23*5153720fSfkaag71        $alice = $ref->normalize('Alice', 'person');
24*5153720fSfkaag71        $carol = $ref->normalize('Carol', 'person');
25*5153720fSfkaag71
26*5153720fSfkaag71        $img_bob = $ref->normalize('Bob.png', 50);
27*5153720fSfkaag71        $img_alice = $ref->normalize('Alice.svg', 50);
28*5153720fSfkaag71        $img_carol = $ref->normalize('Carol.jpg', 50);
29*5153720fSfkaag71
30*5153720fSfkaag71        // Fill database
31*5153720fSfkaag71        $this->_triples->addTriple($bob, 'class', 'person', 'wiki');
32*5153720fSfkaag71        $this->_triples->addTriple($alice, 'class', 'person', 'wiki');
33*5153720fSfkaag71        $this->_triples->addTriple($carol, 'class', 'person', 'wiki');
34*5153720fSfkaag71
35*5153720fSfkaag71        $this->_triples->addTriple($bob, 'name', 'Bob', 'wiki');
36*5153720fSfkaag71        $this->_triples->addTriple($alice, 'name', 'Alice', 'wiki');
37*5153720fSfkaag71        $this->_triples->addTriple($carol, 'name', 'Carol', 'wiki');
38*5153720fSfkaag71
39*5153720fSfkaag71        $this->_triples->addTriple($bob, 'identifier', 'Β', 'wiki');
40*5153720fSfkaag71        $this->_triples->addTriple($alice, 'identifier', 'α', 'wiki');
41*5153720fSfkaag71        $this->_triples->addTriple($carol, 'identifier', 'γ', 'wiki');
42*5153720fSfkaag71
43*5153720fSfkaag71        $this->_triples->addTriple($bob, 'knows', $alice, 'wiki');
44*5153720fSfkaag71        $this->_triples->addTriple($alice, 'knows', $carol, 'wiki');
45*5153720fSfkaag71        $this->_triples->addTriple($carol, 'knows', $bob, 'wiki');
46*5153720fSfkaag71        $this->_triples->addTriple($carol, 'knows', $alice, 'wiki');
47*5153720fSfkaag71
48*5153720fSfkaag71        $this->_triples->addTriple($bob, 'likes', $alice, 'wiki');
49*5153720fSfkaag71
50*5153720fSfkaag71        $this->_triples->addTriple($bob, 'looks like', $img_bob, 'wiki');
51*5153720fSfkaag71        $this->_triples->addTriple($alice, 'looks like', $img_alice, 'wiki');
52*5153720fSfkaag71        $this->_triples->addTriple($carol, 'looks like', $img_carol, 'wiki');
53*5153720fSfkaag71
54*5153720fSfkaag71        $this->_triples->addTriple($bob, 'is rated', 8, 'wiki');
55*5153720fSfkaag71        $this->_triples->addTriple($alice, 'is rated', 10, 'wiki');
56*5153720fSfkaag71        $this->_triples->addTriple($carol, 'is rated', 1, 'wiki');
57*5153720fSfkaag71
58*5153720fSfkaag71        $this->_triples->addTriple($bob, 'has length', '5 ft 10 in', 'wiki');
59*5153720fSfkaag71        $this->_triples->addTriple($alice, 'has length', '5 ft 5 in', 'wiki');
60*5153720fSfkaag71        $this->_triples->addTriple($carol, 'has length', '4 ft 11 in', 'wiki');
61*5153720fSfkaag71
62*5153720fSfkaag71        $this->_triples->addTriple($bob, 'tax rate', '25%', 'wiki');
63*5153720fSfkaag71        $this->_triples->addTriple($alice, 'tax rate', '10%', 'wiki');
64*5153720fSfkaag71        $this->_triples->addTriple($carol, 'tax rate', '2%', 'wiki');
65*5153720fSfkaag71    }
66*5153720fSfkaag71
67*5153720fSfkaag71    function assertQueryResult($query, $expectedResult, $message='') {
68*5153720fSfkaag71        $relations = $this->_triples->queryRelations($query);
69*5153720fSfkaag71        if ($relations === false) {
70*5153720fSfkaag71            $this->fail($message.' Query failed.');
71*5153720fSfkaag71        } else {
72*5153720fSfkaag71            $this->assertIteratorsEqual($relations, new ArrayIterator($expectedResult), $message);
73*5153720fSfkaag71            $relations->closeCursor();
74*5153720fSfkaag71        }
75*5153720fSfkaag71    }
76*5153720fSfkaag71
77*5153720fSfkaag71    function assertIteratorsEqual($x, $y, $message='') {
78*5153720fSfkaag71        $message = $message?$message.': ':'';
79*5153720fSfkaag71        do {
80*5153720fSfkaag71            $this->assertEquals($x->valid(), $y->valid(), $message.'Number of result and expected rows differ: %s');
81*5153720fSfkaag71            $this->assertEquals($x->current(), $y->current(), $message.'Result row differs from expected one: %s');
82*5153720fSfkaag71            $x->next();
83*5153720fSfkaag71            $y->next();
84*5153720fSfkaag71        } while ($x->valid() || $y->valid());
85*5153720fSfkaag71    }
86*5153720fSfkaag71}
87