]> git.mxchange.org Git - friendica.git/blob - tests/src/Util/HTTPInputDataTest.php
Transmit encoding, deactivated file test
[friendica.git] / tests / src / Util / HTTPInputDataTest.php
1 <?php
2 /**
3  * @copyright Copyright (C) 2010-2021, the Friendica project
4  *
5  * @license GNU AGPL version 3 or any later version
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as
9  * published by the Free Software Foundation, either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Affero General Public License for more details.
16  *
17  * You should have received a copy of the GNU Affero General Public License
18  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19  *
20  */
21
22 namespace Friendica\Test\src\Util;
23
24 use Friendica\Test\MockedTest;
25 use Friendica\Test\Util\HTTPInputDataDouble;
26 use Friendica\Util\HTTPInputData;
27
28 /**
29  * Testing HTTPInputData
30  *
31  * @see HTTPInputData
32  */
33 class HTTPInputDataTest extends MockedTest
34 {
35         /**
36          * Returns the data stream for the unit test
37          * Each array element of the first hierarchy represents one test run
38          * Each array element of the second hierarchy represents the parameters, passed to the test function
39          *
40          * @return array[]
41          */
42         public function dataStream()
43         {
44                 return [
45                         'multipart' => [
46                                 'contenttype' => 'multipart/form-data;boundary=43395968-f65c-437e-b536-5b33e3e3c7e5;charset=utf8',
47                                 'input'       => file_get_contents(__DIR__ . '/../../datasets/http/multipart.httpinput'),
48                                 'expected'    => [
49                                         'variables' => [
50                                                 'display_name'      => 'User Name',
51                                                 'note'              => 'About me',
52                                                 'locked'            => 'false',
53                                                 'fields_attributes' => [
54                                                         0 => [
55                                                                 'name'  => 'variable 1',
56                                                                 'value' => 'value 1',
57                                                         ],
58                                                         1 => [
59                                                                 'name'  => 'variable 2',
60                                                                 'value' => 'value 2',
61                                                         ]
62                                                 ]
63                                         ],
64                                         'files' => []
65                                 ]
66                         ],
67                         /*
68                         'multipart-file' => [
69                                 'contenttype' => 'multipart/form-data;boundary=6d4d5a40-651a-4468-a62e-5a6ca2bf350d;charset=utf8',
70                                 'input'       => file_get_contents(__DIR__ . '/../../datasets/http/multipart-file.httpinput'),
71                                 'expected'    => [
72                                         'variables' => [
73                                                 'display_name'      => 'Vorname Nachname',
74                                                 'note'              => 'About me',
75                                                 'fields_attributes' => [
76                                                         0 => [
77                                                                 'name'  => 'variable 1',
78                                                                 'value' => 'value 1',
79                                                         ],
80                                                         1 => [
81                                                                 'name'  => 'variable 2',
82                                                                 'value' => 'value 2',
83                                                         ]
84                                                 ]
85                                         ],
86                                         'files' => [
87                                                 'avatar' => [
88                                                         'name'     => '8ZUCS34Y5XNH',
89                                                         'type'     => 'image/png',
90                                                         'tmp_name' => '/tmp/phpf85nKJ',
91                                                         'error'    => 0,
92                                                         'size'     => 349330
93                                                 ],
94                                                 'header' => [
95                                                         'name'     => 'V2B6Z1IICGPM',
96                                                         'type'     => 'image/png',
97                                                         'tmp_name' => '/tmp/phpe3sqHT',
98                                                         'error'    => 0,
99                                                         'size'     => 1323635
100                                                 ]
101                                         ]
102                                 ]
103                         ],
104                         */
105                         'form-urlencoded' => [
106                                 'contenttype' => 'application/x-www-form-urlencoded;charset=utf8',
107                                 'input'       => file_get_contents(__DIR__ . '/../../datasets/http/form-urlencoded.httpinput'),
108                                 'expected'    => [
109                                         'variables' => [
110                                                 'title' => 'Test2',
111                                         ],
112                                         'files' => []
113                                 ]
114                         ],
115                         'form-urlencoded-json' => [
116                                 'contenttype' => 'application/x-www-form-urlencoded;charset=utf8',
117                                 'input'       => file_get_contents(__DIR__ . '/../../datasets/http/form-urlencoded-json.httpinput'),
118                                 'expected'    => [
119                                         'variables' => [
120                                                 'media_ids'    => [],
121                                                 'sensitive'    => false,
122                                                 'status'       => 'Test Status',
123                                                 'visibility'   => 'private',
124                                                 'spoiler_text' => 'Title'
125                                         ],
126                                         'files' => []
127                                 ]
128                         ]
129                 ];
130         }
131
132         /**
133          * Tests the HTTPInputData::process() method
134          *
135          * @param string $contentType The content typer of the transmitted data
136          * @param string $input       The input, we got from the data stream
137          * @param array  $expected    The expected output
138          *
139          * @dataProvider dataStream
140          * @see HTTPInputData::process()
141          */
142         public function testHttpInput(string $contentType, string $input, array $expected)
143         {
144                 HTTPInputDataDouble::setPhpInputContentType($contentType);
145                 HTTPInputDataDouble::setPhpInputContent($input);
146                 $stream = fopen('php://memory', 'r+');
147                 fwrite($stream, $input);
148                 rewind($stream);
149
150                 HTTPInputDataDouble::setPhpInputStream($stream);
151                 $output = HTTPInputDataDouble::process();
152                 $this->assertEqualsCanonicalizing($expected, $output);
153         }
154 }