xref: /dokuwiki/_test/tests/test/basic.test.php (revision 5d92c7d222f614c23229a455bc6738bbaaf0a6ce)
1<?php
2
3/**
4 * @group integration
5 */
6class InttestsBasicTest extends DokuWikiTest {
7
8    private $some_headers =  array(
9          'Content-Type: image/png',
10          'Date: Fri, 22 Mar 2013 16:10:01 GMT',
11          'X-Powered-By: PHP/5.3.15',
12          'Expires: Sat, 23 Mar 2013 17:03:46 GMT',
13          'Cache-Control: public, proxy-revalidate, no-transform, max-age=86400',
14          'Pragma: public',
15          'Last-Modified: Fri, 22 Mar 2013 01:48:28 GMT',
16          'ETag: "63daab733b38c30c337229b2e587f8fb"',
17          'Content-Disposition: inline; filename="fe389b0db8c1088c336abb502d2f9ae7.media.200x200.png',
18          'Accept-Ranges: bytes',
19          'Content-Type: image/png',
20          'Content-Length: 62315',
21          'Status: 200 OK',
22          'Status: 404 Not Found',
23     );
24
25    /**
26     * Execute the simplest possible request and expect
27     * a dokuwiki page which obviously has the word "DokuWiki"
28     * in it somewhere.
29     */
30    function testSimpleRun() {
31        $request = new TestRequest();
32
33        $response = $request->execute();
34
35        $this->assertTrue(
36            strpos($response->getContent(), 'DokuWiki') >= 0,
37            'DokuWiki was not a word in the output'
38        );
39    }
40
41    function testPost() {
42        $request = new TestRequest();
43
44        $input = array(
45            'string' => 'A string',
46            'array'  => array(1, 2, 3),
47            'id'     => 'wiki:dokuwiki'
48        );
49
50        $response = $request->post($input);
51
52        // server var check
53        $this->assertEquals('POST',$request->getServer('REQUEST_METHOD'));
54        $this->assertEquals('',$request->getServer('QUERY_STRING'));
55        $this->assertEquals('/doku.php',$request->getServer('REQUEST_URI'));
56
57        // variable setup check
58        $this->assertEquals('A string', $request->getPost('string'));
59        $this->assertEquals(array(1, 2, 3), $request->getPost('array'));
60        $this->assertEquals('wiki:dokuwiki', $request->getPost('id'));
61
62        // output check
63        $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
64    }
65
66    function testPostGet() {
67        $request = new TestRequest();
68
69        $input = array(
70            'string' => 'A string',
71            'array'  => array(1, 2, 3),
72        );
73
74        $response = $request->post($input,'/doku.php?id=wiki:dokuwiki');
75
76        // server var check
77        $this->assertEquals('POST',$request->getServer('REQUEST_METHOD'));
78        $this->assertEquals('?id=wiki:dokuwiki',$request->getServer('QUERY_STRING'));
79        $this->assertEquals('/doku.php?id=wiki:dokuwiki',$request->getServer('REQUEST_URI'));
80
81        // variable setup check
82        $this->assertEquals('A string', $request->getPost('string'));
83        $this->assertEquals(array(1, 2, 3), $request->getPost('array'));
84        $this->assertEquals('wiki:dokuwiki', $request->getGet('id'));
85
86        // output check
87        $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
88    }
89
90    function testGet() {
91        $request = new TestRequest();
92
93        $input = array(
94            'string' => 'A string',
95            'array'  => array(1, 2, 3),
96            'test'   => 'bar'
97        );
98
99        $response = $request->get($input,'/doku.php?id=wiki:dokuwiki&test=foo');
100
101        // server var check
102        $this->assertEquals('GET',$request->getServer('REQUEST_METHOD'));
103        $this->assertEquals(
104            '?id=wiki:dokuwiki&test=bar&string=A+string&array[0]=1&array[1]=2&array[2]=3',
105            $request->getServer('QUERY_STRING')
106        );
107        $this->assertEquals(
108            '/doku.php?id=wiki:dokuwiki&test=bar&string=A+string&array[0]=1&array[1]=2&array[2]=3',
109            $request->getServer('REQUEST_URI')
110        );
111
112        // variable setup check
113        $this->assertEquals('A string', $request->getGet('string'));
114        $this->assertEquals(array(1, 2, 3), $request->getGet('array'));
115        $this->assertEquals('wiki:dokuwiki', $request->getGet('id'));
116        $this->assertEquals('bar', $request->getGet('test'));
117
118        // output check
119        $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
120    }
121
122    function testScripts() {
123        $request = new TestRequest();
124
125        // doku
126        $response = $request->get();
127        $this->assertEquals('doku.php',$request->getScript());
128
129        $response = $request->get(array(),'/doku.php?id=wiki:dokuwiki&test=foo');
130        $this->assertEquals('doku.php',$request->getScript());
131
132        // fetch
133        $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png');
134        $this->assertEquals('lib/exe/fetch.php',$request->getScript());
135
136        // detail
137        $response = $request->get(array(),'/lib/exe/detail.php?id=start&media=wiki:dokuwiki-128.png');
138        $this->assertEquals('lib/exe/detail.php',$request->getScript());
139    }
140
141    function testHeaders(){
142        header('X-Test: check headers working');
143        $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list();
144        if (empty($header_check)) {
145            $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug');
146        } else {
147            header_remove('X-Test');
148        }
149
150        $request = new TestRequest();
151        $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png');
152        $headers = $response->getHeaders();
153        $this->assertTrue(!empty($headers));
154    }
155
156    function testGetHeader(){
157        $response = new TestResponse('',$this->some_headers);
158
159        $this->assertEquals('Pragma: public', $response->getHeader('Pragma'));
160        $this->assertEmpty($response->getHeader('Junk'));
161        $this->assertEquals(array('Content-Type: image/png','Content-Type: image/png'), $response->getHeader('Content-Type'));
162    }
163
164    function testGetStatus(){
165       $response = new TestResponse('',$this->some_headers);
166       $this->assertEquals(404, $response->getStatusCode());
167
168       $response = new TestResponse('',array_slice($this->some_headers,0,-2));  // slice off the last two headers to leave no status header
169       $this->assertNull($response->getStatusCode());
170    }
171
172}
173