friendica/tests/src/Util/HTTPInputDataTest.php

153 lines
4.4 KiB
PHP
Raw Normal View History

<?php
/**
* @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Test\src\Util;
use Friendica\Test\MockedTest;
use Friendica\Test\Util\HTTPInputDataDouble;
use Friendica\Util\HTTPInputData;
/**
* Testing HTTPInputData
*
* @see HTTPInputData
*/
class HTTPInputDataTest extends MockedTest
{
/**
* Returns the data stream for the unit test
* Each array element of the first hierarchy represents one test run
* Each array element of the second hierarchy represents the parameters, passed to the test function
*
* @return array[]
*/
public function dataStream()
{
return [
2021-05-24 06:33:42 +02:00
'multipart' => [
'contenttype' => 'multipart/form-data;boundary=43395968-f65c-437e-b536-5b33e3e3c7e5;charset=utf8',
2021-05-24 06:33:42 +02:00
'input' => file_get_contents(__DIR__ . '/../../datasets/http/multipart.httpinput'),
'expected' => [
'variables' => [
2021-05-23 21:37:31 +02:00
'display_name' => 'User Name',
'note' => 'About me',
2021-05-23 21:59:51 +02:00
'locked' => 'false',
2021-05-23 21:34:28 +02:00
'fields_attributes' => [
0 => [
2021-05-23 21:37:31 +02:00
'name' => 'variable 1',
2021-05-23 21:34:28 +02:00
'value' => 'value 1',
],
1 => [
2021-05-23 21:37:31 +02:00
'name' => 'variable 2',
2021-05-23 21:34:28 +02:00
'value' => 'value 2',
]
]
],
'files' => []
]
2021-05-24 06:33:42 +02:00
],
2021-05-24 06:56:03 +02:00
'multipart-file' => [
'contenttype' => 'multipart/form-data;boundary=6d4d5a40-651a-4468-a62e-5a6ca2bf350d;charset=utf8',
2021-05-24 07:08:13 +02:00
'input' => file_get_contents(__DIR__ . '/../../datasets/http/multipart-file.httpinput'),
2021-05-24 06:56:03 +02:00
'expected' => [
'variables' => [
'display_name' => 'Vorname Nachname',
'note' => 'About me',
'fields_attributes' => [
0 => [
'name' => 'variable 1',
'value' => 'value 1',
],
1 => [
'name' => 'variable 2',
'value' => 'value 2',
]
]
],
'files' => [
'avatar' => [
2021-05-24 06:58:41 +02:00
'name' => '8ZUCS34Y5XNH',
'type' => 'image/png',
2021-05-24 09:43:42 +02:00
'tmp_name' => '8ZUCS34Y5XNH',
2021-05-24 06:58:41 +02:00
'error' => 0,
'size' => 349330
2021-05-24 06:56:42 +02:00
],
2021-05-24 06:56:03 +02:00
'header' => [
2021-05-24 06:58:41 +02:00
'name' => 'V2B6Z1IICGPM',
'type' => 'image/png',
2021-05-24 09:43:42 +02:00
'tmp_name' => 'V2B6Z1IICGPM',
2021-05-24 06:58:41 +02:00
'error' => 0,
'size' => 1323635
2021-05-24 06:56:03 +02:00
]
]
]
],
2021-05-24 06:33:42 +02:00
'form-urlencoded' => [
'contenttype' => 'application/x-www-form-urlencoded;charset=utf8',
'input' => file_get_contents(__DIR__ . '/../../datasets/http/form-urlencoded.httpinput'),
'expected' => [
'variables' => [
'title' => 'Test2',
],
'files' => []
]
],
'form-urlencoded-json' => [
2021-05-24 07:11:08 +02:00
'contenttype' => 'application/x-www-form-urlencoded;charset=utf8',
2021-05-24 06:33:42 +02:00
'input' => file_get_contents(__DIR__ . '/../../datasets/http/form-urlencoded-json.httpinput'),
'expected' => [
'variables' => [
2021-05-24 06:45:24 +02:00
'media_ids' => [],
2021-05-24 06:36:30 +02:00
'sensitive' => false,
2021-05-24 06:33:42 +02:00
'status' => 'Test Status',
'visibility' => 'private',
'spoiler_text' => 'Title'
],
'files' => []
]
]
];
}
/**
* Tests the HTTPInputData::process() method
*
* @param string $contentType The content typer of the transmitted data
* @param string $input The input, we got from the data stream
* @param array $expected The expected output
*
* @dataProvider dataStream
* @see HTTPInputData::process()
*/
public function testHttpInput(string $contentType, string $input, array $expected)
{
HTTPInputDataDouble::setPhpInputContentType($contentType);
HTTPInputDataDouble::setPhpInputContent($input);
$stream = fopen('php://memory', 'r+');
fwrite($stream, $input);
rewind($stream);
HTTPInputDataDouble::setPhpInputStream($stream);
$output = HTTPInputDataDouble::process();
2021-05-23 20:30:27 +02:00
$this->assertEqualsCanonicalizing($expected, $output);
}
}