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