Blame view

sources/tests/lib/appframework/http/RequestTest.php 5.74 KB
a293d369c   Kload   Update sources to...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <?php
  /**
   * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
  
  namespace OC\AppFramework\Http;
  
  global $data;
  
  class RequestTest extends \PHPUnit_Framework_TestCase {
  
  	public function setUp() {
  		require_once __DIR__ . '/requeststream.php';
  		if (in_array('fakeinput', stream_get_wrappers())) {
  			stream_wrapper_unregister('fakeinput');
  		}
  		stream_wrapper_register('fakeinput', 'RequestStream');
837968727   Kload   [enh] Upgrade to ...
21
  		$this->stream = 'fakeinput://data';
a293d369c   Kload   Update sources to...
22
23
24
25
26
27
28
29
30
31
32
  	}
  
  	public function tearDown() {
  		stream_wrapper_unregister('fakeinput');
  	}
  
  	public function testRequestAccessors() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
  			'method' => 'GET',
  		);
837968727   Kload   [enh] Upgrade to ...
33
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  
  		// Countable
  		$this->assertEquals(2, count($request));
  		// Array access
  		$this->assertEquals('Joey', $request['nickname']);
  		// "Magic" accessors
  		$this->assertEquals('Joey', $request->{'nickname'});
  		$this->assertTrue(isset($request['nickname']));
  		$this->assertTrue(isset($request->{'nickname'}));
  		$this->assertEquals(false, isset($request->{'flickname'}));
  		// Only testing 'get', but same approach for post, files etc.
  		$this->assertEquals('Joey', $request->get['nickname']);
  		// Always returns null if variable not set.
  		$this->assertEquals(null, $request->{'flickname'});
  
  	}
  
  	// urlParams has precedence over POST which has precedence over GET
  	public function testPrecedence() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
  			'post' => array('name' => 'Jane Doe', 'nickname' => 'Janey'),
  			'urlParams' => array('user' => 'jw', 'name' => 'Johnny Weissmüller'),
837968727   Kload   [enh] Upgrade to ...
57
  			'method' => 'GET'
a293d369c   Kload   Update sources to...
58
  		);
837968727   Kload   [enh] Upgrade to ...
59
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
60
61
62
63
64
65
66
67
68
69
70
71
72
  
  		$this->assertEquals(3, count($request));
  		$this->assertEquals('Janey', $request->{'nickname'});
  		$this->assertEquals('Johnny Weissmüller', $request->{'name'});
  	}
  
  
  	/**
  	* @expectedException RuntimeException
  	*/
  	public function testImmutableArrayAccess() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
837968727   Kload   [enh] Upgrade to ...
73
  			'method' => 'GET'
a293d369c   Kload   Update sources to...
74
  		);
837968727   Kload   [enh] Upgrade to ...
75
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
76
77
78
79
80
81
82
83
84
  		$request['nickname'] = 'Janey';
  	}
  
  	/**
  	* @expectedException RuntimeException
  	*/
  	public function testImmutableMagicAccess() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
837968727   Kload   [enh] Upgrade to ...
85
  			'method' => 'GET'
a293d369c   Kload   Update sources to...
86
  		);
837968727   Kload   [enh] Upgrade to ...
87
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
88
89
90
91
92
93
94
95
96
97
98
  		$request->{'nickname'} = 'Janey';
  	}
  
  	/**
  	* @expectedException LogicException
  	*/
  	public function testGetTheMethodRight() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
  			'method' => 'GET',
  		);
837968727   Kload   [enh] Upgrade to ...
99
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
100
101
102
103
104
105
106
107
  		$result = $request->post;
  	}
  
  	public function testTheMethodIsRight() {
  		$vars = array(
  			'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
  			'method' => 'GET',
  		);
837968727   Kload   [enh] Upgrade to ...
108
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
109
110
111
112
113
114
115
116
117
118
119
  		$this->assertEquals('GET', $request->method);
  		$result = $request->get;
  		$this->assertEquals('John Q. Public', $result['name']);
  		$this->assertEquals('Joey', $result['nickname']);
  	}
  
  	public function testJsonPost() {
  		global $data;
  		$data = '{"name": "John Q. Public", "nickname": "Joey"}';
  		$vars = array(
  			'method' => 'POST',
837968727   Kload   [enh] Upgrade to ...
120
  			'server' => array('CONTENT_TYPE' => 'application/json; utf-8')
a293d369c   Kload   Update sources to...
121
  		);
837968727   Kload   [enh] Upgrade to ...
122
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  		$this->assertEquals('POST', $request->method);
  		$result = $request->post;
  		$this->assertEquals('John Q. Public', $result['name']);
  		$this->assertEquals('Joey', $result['nickname']);
  		$this->assertEquals('Joey', $request->params['nickname']);
  		$this->assertEquals('Joey', $request['nickname']);
  	}
  
  	public function testPatch() {
  		global $data;
  		$data = http_build_query(array('name' => 'John Q. Public', 'nickname' => 'Joey'), '', '&');
  
  		$vars = array(
  			'method' => 'PATCH',
  			'server' => array('CONTENT_TYPE' => 'application/x-www-form-urlencoded'),
  		);
837968727   Kload   [enh] Upgrade to ...
139
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  
  		$this->assertEquals('PATCH', $request->method);
  		$result = $request->patch;
  
  		$this->assertEquals('John Q. Public', $result['name']);
  		$this->assertEquals('Joey', $result['nickname']);
  	}
  
  	public function testJsonPatchAndPut() {
  		global $data;
  
  		// PUT content
  		$data = '{"name": "John Q. Public", "nickname": "Joey"}';
  		$vars = array(
  			'method' => 'PUT',
  			'server' => array('CONTENT_TYPE' => 'application/json; utf-8'),
  		);
837968727   Kload   [enh] Upgrade to ...
157
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
158
159
160
161
162
163
164
165
166
167
168
169
170
  
  		$this->assertEquals('PUT', $request->method);
  		$result = $request->put;
  
  		$this->assertEquals('John Q. Public', $result['name']);
  		$this->assertEquals('Joey', $result['nickname']);
  
  		// PATCH content
  		$data = '{"name": "John Q. Public", "nickname": null}';
  		$vars = array(
  			'method' => 'PATCH',
  			'server' => array('CONTENT_TYPE' => 'application/json; utf-8'),
  		);
837968727   Kload   [enh] Upgrade to ...
171
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  
  		$this->assertEquals('PATCH', $request->method);
  		$result = $request->patch;
  
  		$this->assertEquals('John Q. Public', $result['name']);
  		$this->assertEquals(null, $result['nickname']);
  	}
  
  	public function testPutStream() {
  		global $data;
  		$data = file_get_contents(__DIR__ . '/../../../data/testimage.png');
  
  		$vars = array(
  			'put' => $data,
  			'method' => 'PUT',
  			'server' => array('CONTENT_TYPE' => 'image/png'),
  		);
837968727   Kload   [enh] Upgrade to ...
189
  		$request = new Request($vars, $this->stream);
a293d369c   Kload   Update sources to...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
  		$this->assertEquals('PUT', $request->method);
  		$resource = $request->put;
  		$contents = stream_get_contents($resource);
  		$this->assertEquals($data, $contents);
  
  		try {
  			$resource = $request->put;
  		} catch(\LogicException $e) {
  			return;
  		}
  		$this->fail('Expected LogicException.');
  
  	}
  }