]> git.mxchange.org Git - friendica-addons.git/blob - dav/SabreDAV/tests/Sabre/CardDAV/ValidateFilterTest.php
ef7f1932f823f878ff7181b8d2e89933f059c1f6
[friendica-addons.git] / dav / SabreDAV / tests / Sabre / CardDAV / ValidateFilterTest.php
1 <?php
2
3 require_once 'Sabre/CardDAV/AbstractPluginTest.php';
4
5 class Sabre_CardDAV_ValidateFilterTest extends Sabre_CardDAV_AbstractPluginTest {
6
7     /**
8      * @dataProvider data
9      */
10     function testFilter($input, $filters, $test, $result, $message = null) {
11
12         if ($result) {
13             $this->assertTrue($this->plugin->validateFilters($input, $filters, $test), $message);
14         } else {
15             $this->assertFalse($this->plugin->validateFilters($input, $filters, $test), $message);
16         }
17
18     }
19
20     function data() {
21
22         $body1 = <<<HELLO
23 BEGIN:VCARD
24 VERSION:3.0
25 ORG:Company;
26 TITLE:Title
27 TEL;TYPE=IPHONE;TYPE=pref:(222) 22 22 22
28 TEL;TYPE=HOME:(33) 333 66 66
29 TEL;TYPE=WORK:(444) 44 44 44
30 TEL;TYPE=MAIN:(55) 555 55 55
31 ITEM4.TEL:(111) 11 11 11
32 ITEM5.TEL:(6) 66 66 66 66
33 ITEM6.TEL:(77) 777 77 77
34 UID:3151DE6A-BC35-4612-B340-B53A034A2B27
35 ITEM1.EMAIL:1111@111.com
36 ITEM2.EMAIL:bbbbb@bbbb.com
37 ITEM3.EMAIL:ccccc@ccccc.com
38 FN:First Last
39 N:Last;First;Middle;Dr
40 BDAY:1985-07-20
41 ADR;TYPE=HOME:;;Street;City;;3556;Montenegro
42 ADR;TYPE=WORK:;;Street\\nStreet2;Harkema;;35444;Australia
43 URL:http://google.com
44 END:VCARD
45 HELLO;
46
47         // Check if TITLE is defined
48         $filter1 =
49             array('name' => 'title', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array());
50
51         // Check if FOO is defined
52         $filter2 =
53             array('name' => 'foo', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array());
54
55         // Check if TITLE is not defined
56         $filter3 =
57             array('name' => 'title', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array());
58
59         // Check if FOO is not defined
60         $filter4 =
61             array('name' => 'foo', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array());
62
63         // Check if TEL[TYPE] is defined
64         $filter5 =
65             array(
66                 'name' => 'tel',
67                 'is-not-defined' => false,
68                 'test' => 'anyof',
69                 'param-filters' => array(
70                     array(
71                         'name' => 'type',
72                         'is-not-defined' => false,
73                         'text-match' => null
74                     ),
75                 ),
76                 'text-matches' => array(),
77             );
78
79         // Check if TEL[FOO] is defined
80         $filter6 = $filter5;
81         $filter6['param-filters'][0]['name'] = 'FOO';
82
83         // Check if TEL[TYPE] is not defined
84         $filter7 = $filter5;
85         $filter7['param-filters'][0]['is-not-defined'] = true;
86
87         // Check if TEL[FOO] is not defined
88         $filter8 = $filter5;
89         $filter8['param-filters'][0]['name'] = 'FOO';
90         $filter8['param-filters'][0]['is-not-defined'] = true;
91
92         // Combining property filters
93         $filter9 = $filter5;
94         $filter9['param-filters'][] = $filter6['param-filters'][0];
95
96         $filter10 = $filter5;
97         $filter10['param-filters'][] = $filter6['param-filters'][0];
98         $filter10['test'] = 'allof';
99
100         // Check if URL contains 'google'
101         $filter11 =
102             array(
103                 'name' => 'url',
104                 'is-not-defined' => false,
105                 'test' => 'anyof',
106                 'param-filters' => array(),
107                 'text-matches' => array(
108                     array(
109                         'match-type' => 'contains',
110                         'value' => 'google',
111                         'negate-condition' => false,
112                         'collation' => 'i;octet',
113                     ),
114                 ),
115             );
116
117         // Check if URL contains 'bing'
118         $filter12 = $filter11;
119         $filter12['text-matches'][0]['value'] = 'bing';
120
121         // Check if URL does not contain 'google'
122         $filter13 = $filter11;
123         $filter13['text-matches'][0]['negate-condition'] = true;
124
125         // Check if URL does not contain 'bing'
126         $filter14 = $filter11;
127         $filter14['text-matches'][0]['value'] = 'bing';
128         $filter14['text-matches'][0]['negate-condition'] = true;
129
130         // Param filter with text
131         $filter15 = $filter5;
132         $filter15['param-filters'][0]['text-match'] = array(
133             'match-type' => 'contains',
134             'value' => 'WORK',
135             'collation' => 'i;octet',
136             'negate-condition' => false,
137         );
138         $filter16 = $filter15;
139         $filter16['param-filters'][0]['text-match']['negate-condition'] = true;
140
141
142         // Param filter + text filter
143         $filter17 = $filter5;
144         $filter17['test'] = 'anyof';
145         $filter17['text-matches'][] = array(
146             'match-type' => 'contains',
147             'value' => '444',
148             'collation' => 'i;octet',
149             'negate-condition' => false,
150         );
151
152         $filter18 = $filter17;
153         $filter18['text-matches'][0]['negate-condition'] = true;
154
155         $filter18['test'] = 'allof';
156
157         return array(
158
159             // Basic filters
160             array($body1, array($filter1), 'anyof',true),
161             array($body1, array($filter2), 'anyof',false),
162             array($body1, array($filter3), 'anyof',false),
163             array($body1, array($filter4), 'anyof',true),
164
165             // Combinations
166             array($body1, array($filter1, $filter2), 'anyof',true),
167             array($body1, array($filter1, $filter2), 'allof',false),
168             array($body1, array($filter1, $filter4), 'anyof',true),
169             array($body1, array($filter1, $filter4), 'allof',true),
170             array($body1, array($filter2, $filter3), 'anyof',false),
171             array($body1, array($filter2, $filter3), 'allof',false),
172
173             // Basic parameters
174             array($body1, array($filter5), 'anyof', true, 'TEL;TYPE is defined, so this should return true'),
175             array($body1, array($filter6), 'anyof', false, 'TEL;FOO is not defined, so this should return false'),
176
177             array($body1, array($filter7), 'anyof', false, 'TEL;TYPE is defined, so this should return false'),
178             array($body1, array($filter8), 'anyof', true, 'TEL;TYPE is not defined, so this should return true'),
179
180             // Combined parameters
181             array($body1, array($filter9), 'anyof', true),
182             array($body1, array($filter10), 'anyof', false),
183
184             // Text-filters
185             array($body1, array($filter11), 'anyof', true),
186             array($body1, array($filter12), 'anyof', false),
187             array($body1, array($filter13), 'anyof', false),
188             array($body1, array($filter14), 'anyof', true),
189
190             // Param filter with text-match
191             array($body1, array($filter15), 'anyof', true),
192             array($body1, array($filter16), 'anyof', false),
193
194             // Param filter + text filter
195             array($body1, array($filter17), 'anyof', true),
196             array($body1, array($filter18), 'anyof', false),
197             array($body1, array($filter18), 'anyof', false),
198         );
199
200     }
201
202 }