1<?php
2
3/**
4 * @group plugin_data
5 * @group plugins
6 */
7class syntax_plugin_data_table_test extends DokuWikiTest
8{
9
10    protected $pluginsEnabled = array('data', 'sqlite');
11
12    private $exampleEntry = "---- datatable employees----\n"
13    . "cols    : %pageid%, employees, deadline_dt, website_url, volume\n"
14    . 'headers : Details, "Assigned Employees \#no", stuff outside quotes """Deadline, ",  Personal website, $$$' . "\n"
15    . "max     : 10\n"
16    . "filter  : type=web development\n"
17    . "sort    : ^volume\n"
18    . "dynfilters: 1\n"
19    . "summarize : 1\n"
20    . "align   : c\n"
21    . "rownumbers: 1\n"
22    . "widths  : 50px, 20em, - , 10%\n"
23    . "----";
24
25    function testHandle()
26    {
27        $plugin = new syntax_plugin_data_table();
28
29        $handler = new Doku_Handler();
30        $result = $plugin->handle($this->exampleEntry, 0, 10, $handler);
31
32        $data = array(
33            'classes' => 'employees',
34            'limit' => 10,
35            'dynfilters' => 1,
36            'summarize' => 1,
37            'rownumbers' => 1,
38            'sepbyheaders' => '',
39            'headers' => array(
40                '0' => 'Details',
41                '1' => 'Assigned Employees #no',
42                '2' => '"Deadline, ',
43                '3' => 'Personal website',
44                '4' => '$$$'
45            ),
46            'widths' => array(
47                '0' => '50px',
48                '1' => '20em',
49                '2' => '-',
50                '3' => '10%'
51            ),
52            'filter' => array(
53                '0' => array(
54                    'key' => 'type',
55                    'value' => "'web development'",
56                    'compare' => '=',
57                    'colname' => 'type',
58                    'type' => '',
59                    'logic' => 'AND'
60                )
61            ),
62            'cols' => array(
63                '%pageid%' => array(
64                    'colname' => '%pageid%',
65                    'multi' => '',
66                    'key' => '%pageid%',
67                    'origkey' => '%pageid%',
68                    'title' => 'Title',
69                    'type' => 'page',
70                ),
71                'employee' => array(
72                    'colname' => 'employees',
73                    'multi' => 1,
74                    'key' => 'employee',
75                    'origkey' => 'employee',
76                    'title' => 'employee',
77                    'type' => ''
78                ),
79                'deadline' => array(
80                    'colname' => 'deadline_dt',
81                    'multi' => '',
82                    'key' => 'deadline',
83                    'origkey' => 'deadline',
84                    'title' => 'deadline',
85                    'type' => 'dt'
86                ),
87                'website' => array(
88                    'colname' => 'website_url',
89                    'multi' => '',
90                    'key' => 'website',
91                    'origkey' => 'website',
92                    'title' => 'website',
93                    'type' => 'url'
94                ),
95                'volume' => array(
96                    'colname' => 'volume',
97                    'multi' => '',
98                    'key' => 'volume',
99                    'origkey' => 'volume',
100                    'title' => 'volume',
101                    'type' => ''
102                ),
103
104            ),
105            'sort' => array(
106                '0' => 'volume',
107                '1' => 'DESC'
108            ),
109            'align' => array(
110                '0' => 'center'
111            ),
112            'sql' => "SELECT \" \" || pages.page, GROUP_CONCAT_DISTINCT(\" \" || T1.value,'
113'), GROUP_CONCAT_DISTINCT(\" \" || T2.value,'
114'), GROUP_CONCAT_DISTINCT(\" \" || T3.value,'
115'), GROUP_CONCAT_DISTINCT(\" \" || T4.value,'
116')
117                FROM (
118                    SELECT DISTINCT pages.pid AS pid
119                    FROM pages  LEFT JOIN data AS T1 ON T1.pid = pages.pid AND T1.key = 'type'
120                    WHERE 1 = 1 AND T1.value = 'web development'
121                ) AS W1
122                 LEFT JOIN data AS T1 ON T1.pid = W1.pid AND T1.key = 'employee' LEFT JOIN data AS T2 ON T2.pid = W1.pid AND T2.key = 'deadline' LEFT JOIN data AS T3 ON T3.pid = W1.pid AND T3.key = 'website' LEFT JOIN data AS T4 ON T4.pid = W1.pid AND T4.key = 'volume'
123                LEFT JOIN pages ON W1.pid=pages.pid
124                GROUP BY W1.pid
125                ORDER BY T4.value DESC LIMIT 11",
126            'cur_param' => array()
127
128        );
129        $this->assertEquals($data, $result, 'Data array corrupted');
130    }
131
132}
133
134
135