mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-11 09:48:40 +00:00
add webserver and webserver tests
This commit is contained in:
parent
01837d3755
commit
05a1437bca
|
|
@ -18,7 +18,6 @@ use phpOMS\Localization\Localization;
|
|||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Router\RouteVerb;
|
||||
use phpOMS\Uri\HttpUri;
|
||||
use phpOMS\Uri\UriFactory;
|
||||
use phpOMS\Uri\UriInterface;
|
||||
|
||||
/**
|
||||
|
|
@ -108,7 +107,6 @@ final class HttpRequest extends RequestAbstract
|
|||
$this->initCurrentRequest();
|
||||
$this->lock();
|
||||
self::cleanupGlobals();
|
||||
$this->setupUriBuilder();
|
||||
}
|
||||
|
||||
$this->data = \array_change_key_case($this->data, \CASE_LOWER);
|
||||
|
|
@ -147,6 +145,8 @@ final class HttpRequest extends RequestAbstract
|
|||
}
|
||||
|
||||
if (\stripos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) {
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
$input = \file_get_contents('php://input');
|
||||
|
||||
if ($input === false || empty($input)) {
|
||||
|
|
@ -159,7 +159,10 @@ final class HttpRequest extends RequestAbstract
|
|||
}
|
||||
|
||||
$this->data = $json + $this->data;
|
||||
// @codeCoverageIgnoreEnd
|
||||
} elseif (\stripos($_SERVER['CONTENT_TYPE'], 'application/x-www-form-urlencoded') !== false) {
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
$content = \file_get_contents('php://input');
|
||||
|
||||
if ($content === false || empty($content)) {
|
||||
|
|
@ -168,7 +171,10 @@ final class HttpRequest extends RequestAbstract
|
|||
|
||||
\parse_str($content, $temp);
|
||||
$this->data += $temp;
|
||||
// @codeCoverageIgnoreEnd
|
||||
} elseif (\stripos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false) {
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
$stream = \fopen('php://input', 'r');
|
||||
$partInfo = null;
|
||||
$boundary = null;
|
||||
|
|
@ -177,7 +183,10 @@ final class HttpRequest extends RequestAbstract
|
|||
return;
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreEnd
|
||||
while (($lineRaw = \fgets($stream)) !== false) {
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
if (\strpos($lineRaw, '--') === 0) {
|
||||
if ($boundary === null) {
|
||||
$boundary = \rtrim($lineRaw);
|
||||
|
|
@ -187,6 +196,7 @@ final class HttpRequest extends RequestAbstract
|
|||
}
|
||||
|
||||
$line = \rtrim($lineRaw);
|
||||
// @codeCoverageIgnoreEnd
|
||||
if ($line === '') {
|
||||
if (!empty($partInfo['Content-Disposition']['filename'])) { /* Is file */
|
||||
$tempdir = \sys_get_temp_dir();
|
||||
|
|
@ -238,6 +248,8 @@ final class HttpRequest extends RequestAbstract
|
|||
$this->files[$name]['size'] = \filesize($tempname);
|
||||
$this->files[$name]['tmp_name'] = $tempname;
|
||||
} elseif ($partInfo !== null) { /* Is variable */
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
$fullValue = '';
|
||||
$lastLine = null;
|
||||
|
||||
|
|
@ -254,6 +266,7 @@ final class HttpRequest extends RequestAbstract
|
|||
}
|
||||
|
||||
$this->data[$partInfo['Content-Disposition']['name']] = $fullValue;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
$partInfo = null;
|
||||
|
|
@ -261,6 +274,8 @@ final class HttpRequest extends RequestAbstract
|
|||
continue;
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
// Tested but coverage doesn't show up
|
||||
$delim = \strpos($line, ':');
|
||||
|
||||
if ($delim === false) {
|
||||
|
|
@ -295,6 +310,7 @@ final class HttpRequest extends RequestAbstract
|
|||
}
|
||||
|
||||
$partInfo[$headerKey] = $header;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
\fclose($stream);
|
||||
|
|
@ -340,9 +356,11 @@ final class HttpRequest extends RequestAbstract
|
|||
return 'en';
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
$components = \explode(';', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
||||
$locals = \stripos($components[0], ',') !== false ? $locals = \explode(',', $components[0]) : $components;
|
||||
$firstLocalComponents = \explode('-', $locals[0]);
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return \strtolower($firstLocalComponents[0]);
|
||||
}
|
||||
|
|
@ -360,8 +378,10 @@ final class HttpRequest extends RequestAbstract
|
|||
return 'en_US';
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
$components = \explode(';', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
||||
$locals = \stripos($components[0], ',') !== false ? $locals = \explode(',', $components[0]) : $components;
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return \str_replace('-', '_', $locals[0]);
|
||||
}
|
||||
|
|
@ -381,27 +401,6 @@ final class HttpRequest extends RequestAbstract
|
|||
unset($_REQUEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup uri builder based on current request
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function setupUriBuilder() : void
|
||||
{
|
||||
UriFactory::clean('?');
|
||||
UriFactory::setQuery('/lang', $this->header->getL11n()->getLanguage());
|
||||
|
||||
foreach ($this->data as $key => $value) {
|
||||
if (\is_array($value)) {
|
||||
UriFactory::setQuery('?' . $key, \implode(',', $value));
|
||||
} else {
|
||||
UriFactory::setQuery('?' . $key, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create request from superglobals.
|
||||
*
|
||||
|
|
@ -467,7 +466,7 @@ final class HttpRequest extends RequestAbstract
|
|||
$useragent = $_SERVER['HTTP_USER_AGENT'] ?? '';
|
||||
|
||||
if (\preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i', $useragent) || \preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i', $useragent)) {
|
||||
return true;
|
||||
return true; // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
@ -497,13 +496,15 @@ final class HttpRequest extends RequestAbstract
|
|||
{
|
||||
if (!isset($this->browser)) {
|
||||
$arr = BrowserType::getConstants();
|
||||
$httpUserAgent = \strtolower($_SERVER['HTTP_USER_AGENT']);
|
||||
$httpUserAgent = \strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
|
||||
|
||||
foreach ($arr as $key => $val) {
|
||||
if (\stripos($httpUserAgent, $val)) {
|
||||
// @codeCoverageIgnoreStart
|
||||
$this->browser = $val;
|
||||
|
||||
return $this->browser;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -538,13 +539,15 @@ final class HttpRequest extends RequestAbstract
|
|||
{
|
||||
if (!isset($this->os)) {
|
||||
$arr = OSType::getConstants();
|
||||
$httpUserAgent = \strtolower($_SERVER['HTTP_USER_AGENT']);
|
||||
$httpUserAgent = \strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
|
||||
|
||||
foreach ($arr as $key => $val) {
|
||||
foreach ($arr as $val) {
|
||||
if (\stripos($httpUserAgent, $val)) {
|
||||
// @codeCoverageIgnoreStart
|
||||
$this->os = $val;
|
||||
|
||||
return $this->os;
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ declare(strict_types=1);
|
|||
|
||||
namespace phpOMS\Message\Http;
|
||||
|
||||
use phpOMS\System\MimeType;
|
||||
|
||||
/**
|
||||
* Rest request class.
|
||||
*
|
||||
|
|
@ -45,8 +47,11 @@ final class Rest
|
|||
|
||||
\curl_setopt($curl, \CURLOPT_NOBODY, true);
|
||||
|
||||
$headers = $request->getHeader()->get();
|
||||
foreach ($headers as $key => $header) {
|
||||
// handle header
|
||||
$requestHeaders = $request->getHeader()->get();
|
||||
$headers = [];
|
||||
|
||||
foreach ($requestHeaders as $key => $header) {
|
||||
$headers[$key] = $key . ': ' . \implode('', $header);
|
||||
}
|
||||
|
||||
|
|
@ -57,6 +62,9 @@ final class Rest
|
|||
case RequestMethod::GET:
|
||||
\curl_setopt($curl, \CURLOPT_HTTPGET, true);
|
||||
break;
|
||||
case RequestMethod::POST:
|
||||
\curl_setopt($curl, \CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
break;
|
||||
case RequestMethod::PUT:
|
||||
\curl_setopt($curl, \CURLOPT_CUSTOMREQUEST, 'PUT');
|
||||
break;
|
||||
|
|
@ -65,14 +73,39 @@ final class Rest
|
|||
break;
|
||||
}
|
||||
|
||||
// handle none-get
|
||||
if ($request->getMethod() !== RequestMethod::GET) {
|
||||
\curl_setopt($curl, \CURLOPT_POST, 1);
|
||||
|
||||
if ($request->getData() !== null) {
|
||||
\curl_setopt($curl, \CURLOPT_POSTFIELDS, $request->getData());
|
||||
// handle different content types
|
||||
$contentType = $requestHeaders['content-type'] ?? [];
|
||||
if ($request->getData() !== null && (empty($contentType) || \in_array(MimeType::M_POST, $contentType))) {
|
||||
\curl_setopt($curl, \CURLOPT_POSTFIELDS, \http_build_query($request->getData()));
|
||||
} elseif ($request->getData() !== null && \in_array(MimeType::M_JSON, $contentType)) {
|
||||
\curl_setopt($curl, \CURLOPT_POSTFIELDS, \json_encode($request->getData()));
|
||||
} elseif ($request->getData() !== null && \in_array(MimeType::M_MULT, $contentType)) {
|
||||
$boundary = '----' . \uniqid();
|
||||
$data = self::createMultipartData($boundary, $request->getData());
|
||||
|
||||
/**
|
||||
* @todo:
|
||||
* there is a very weird bug where boundary= fails to create the correct request
|
||||
* while removing the = or putting it at a different location works (e.g. bound=ary).
|
||||
* Maybe boundary= is a reserved keyword?
|
||||
*
|
||||
* according to the verbose output of curl the request is correct. this means the server must have a problem with it
|
||||
*
|
||||
* the php webserver and apache2 both seem to be unable to populate the php://input correctly -> not a server isue but a php issue?
|
||||
*/
|
||||
$headers['content-type'] = 'Content-Type: multipart/form-data; boundary/' . $boundary;
|
||||
$headers['content-length'] = 'Content-Length: ' . \strlen($data);
|
||||
|
||||
\curl_setopt($curl, \CURLOPT_HTTPHEADER, $headers);
|
||||
\curl_setopt($curl, \CURLOPT_POSTFIELDS, $data);
|
||||
}
|
||||
}
|
||||
|
||||
// handle user auth
|
||||
if ($request->getUri()->getUser() !== '') {
|
||||
\curl_setopt($curl, \CURLOPT_HTTPAUTH, \CURLAUTH_BASIC);
|
||||
\curl_setopt($curl, \CURLOPT_USERPWD, $request->getUri()->getUserInfo());
|
||||
|
|
@ -111,4 +144,38 @@ final class Rest
|
|||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create multipart data
|
||||
*
|
||||
* @param string $boundary Unique boundary id
|
||||
* @param array $fields Data array (key value pair)
|
||||
* @param array $files Files to upload
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private static function createMultipartData(string $boundary, array $fields = [], array $files = []) : string
|
||||
{
|
||||
$data = '';
|
||||
$delim = $boundary;
|
||||
|
||||
foreach ($fields as $name => $content) {
|
||||
$data .= '--' . $delim . "\r\n"
|
||||
. 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n"
|
||||
. $content . "\r\n";
|
||||
}
|
||||
|
||||
foreach ($files as $name => $content) {
|
||||
$data .= '--' . $delim . "\r\n"
|
||||
. 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . "\"\r\n\r\n"
|
||||
. 'Content-Transfer-Encoding: binary' . "\r\n"
|
||||
. $content . "\r\n";
|
||||
}
|
||||
|
||||
$data .= '--' . $delim . "--\r\n";
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -513,6 +513,7 @@ abstract class MimeType extends Enum
|
|||
public const M_MSI = 'application/x-msdownload';
|
||||
public const M_MSL = 'application/vnd.mobius.msl';
|
||||
public const M_MSTY = 'application/vnd.muvee.style';
|
||||
public const M_MULT = 'multipart/form-data';
|
||||
public const M_MTS = 'model/vnd.mts';
|
||||
public const M_MUS = 'application/vnd.musician';
|
||||
public const M_MUSICXML = 'application/vnd.recordare.musicxml+xml';
|
||||
|
|
@ -629,6 +630,7 @@ abstract class MimeType extends Enum
|
|||
public const M_PNG = 'image/png';
|
||||
public const M_PNM = 'image/x-portable-anymap';
|
||||
public const M_PORTPKG = 'application/vnd.macports.portpkg';
|
||||
public const M_POST = 'application/x-www-form-urlencoded';
|
||||
public const M_POT = 'application/vnd.ms-powerpoint';
|
||||
public const M_POTM = 'application/vnd.ms-powerpoint.template.macroenabled.12';
|
||||
public const M_POTX = 'application/vnd.openxmlformats-officedocument.presentationml.template';
|
||||
|
|
|
|||
|
|
@ -327,3 +327,64 @@ $GLOBALS['dbpool']->create('delete', $CONFIG['db']['core']['masters']['delete'])
|
|||
$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']);
|
||||
|
||||
DataMapperAbstract::setConnection($GLOBALS['dbpool']->get());
|
||||
|
||||
function phpServe()
|
||||
{
|
||||
// OS detection
|
||||
$isWindows = \stristr(\php_uname('s'), 'Windows') !== false;
|
||||
|
||||
// Command that starts the built-in web server
|
||||
if ($isWindows) {
|
||||
$command = \sprintf(
|
||||
'wmic process call create "php -S %s:%d -t %s" | find "ProcessId"',
|
||||
WEB_SERVER_HOST,
|
||||
WEB_SERVER_PORT,
|
||||
__DIR__ . '/../' . WEB_SERVER_DOCROOT
|
||||
);
|
||||
|
||||
$killCommand = 'taskkill /f /pid ';
|
||||
} else {
|
||||
$command = \sprintf(
|
||||
'php -S %s:%d -t %s >/dev/null 2>&1 & echo $!',
|
||||
WEB_SERVER_HOST,
|
||||
WEB_SERVER_PORT,
|
||||
WEB_SERVER_DOCROOT
|
||||
);
|
||||
|
||||
$killCommand = 'kill ';
|
||||
}
|
||||
|
||||
// Execute the command and store the process ID
|
||||
$output = [];
|
||||
echo \sprintf('Starting server...') . PHP_EOL;
|
||||
echo \sprintf(' Current directory: %s', \getcwd()) . PHP_EOL;
|
||||
echo \sprintf(' %s', $command);
|
||||
\exec($command, $output);
|
||||
|
||||
// Get PID
|
||||
if ($isWindows) {
|
||||
$pid = \explode('=', $output[0]);
|
||||
$pid = \str_replace(' ', '', $pid[1]);
|
||||
$pid = \str_replace(';', '', $pid);
|
||||
} else {
|
||||
$pid = (int) $output[0];
|
||||
}
|
||||
|
||||
// Log
|
||||
echo \sprintf(
|
||||
' %s - Web server started on %s:%d with PID %d',
|
||||
date('r'),
|
||||
WEB_SERVER_HOST,
|
||||
WEB_SERVER_PORT,
|
||||
$pid
|
||||
) . PHP_EOL;
|
||||
|
||||
// Kill the web server when the process ends
|
||||
\register_shutdown_function(function() use ($killCommand, $pid) {
|
||||
echo PHP_EOL . \sprintf('Stopping server...') . PHP_EOL;
|
||||
echo \sprintf(' %s - Killing process with ID %d', \date('r'), $pid) . PHP_EOL;
|
||||
\exec($killCommand . $pid);
|
||||
});
|
||||
}
|
||||
|
||||
phpServe();
|
||||
9
tests/Message/Http/HttpRequestBrowser.php
Normal file
9
tests/Message/Http/HttpRequestBrowser.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo $request->getBrowser();
|
||||
9
tests/Message/Http/HttpRequestLanguage.php
Normal file
9
tests/Message/Http/HttpRequestLanguage.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo $request->getRequestLanguage();
|
||||
9
tests/Message/Http/HttpRequestLocale.php
Normal file
9
tests/Message/Http/HttpRequestLocale.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo $request->getLocale();
|
||||
9
tests/Message/Http/HttpRequestMobile.php
Normal file
9
tests/Message/Http/HttpRequestMobile.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo (string) $request->isMobile();
|
||||
9
tests/Message/Http/HttpRequestOS.php
Normal file
9
tests/Message/Http/HttpRequestOS.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo $request->getOS();
|
||||
9
tests/Message/Http/HttpRequestPost.php
Normal file
9
tests/Message/Http/HttpRequestPost.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../../Autoloader.php';
|
||||
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
|
||||
$request = HttpRequest::createFromSuperglobals();
|
||||
|
||||
echo \json_encode($request->getData());
|
||||
|
|
@ -21,6 +21,8 @@ use phpOMS\Message\Http\OSType;
|
|||
use phpOMS\Message\Http\RequestMethod;
|
||||
use phpOMS\Router\RouteVerb;
|
||||
use phpOMS\Uri\HttpUri;
|
||||
use phpOMS\Message\Http\Rest;
|
||||
use phpOMS\System\MimeType;
|
||||
|
||||
/**
|
||||
* @testdox phpOMS\tests\Message\Http\RequestTest: HttpRequest wrapper for http requests
|
||||
|
|
@ -377,6 +379,140 @@ class HttpRequestTest extends \PHPUnit\Framework\TestCase
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox A request can be made with post data
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testPostData() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestPost.php'));
|
||||
$request->setMethod(RequestMethod::POST);
|
||||
$request->getHeader()->set('Content-Type', MimeType::M_POST);
|
||||
$request->setData('testKey', 'testValue');
|
||||
|
||||
self::assertEquals(
|
||||
\json_encode($request->getData()),
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox A request can be made with json data
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testJsonData() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestPost.php'));
|
||||
$request->setMethod(RequestMethod::POST);
|
||||
$request->getHeader()->set('Content-Type', MimeType::M_JSON);
|
||||
$request->setData('testKey', 'testValue');
|
||||
|
||||
self::assertEquals(
|
||||
\json_encode($request->getData()),
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox A request can be made with multipart data
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testMultipartData() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestPost.php'));
|
||||
$request->setMethod(RequestMethod::POST);
|
||||
$request->getHeader()->set('Content-Type', MimeType::M_MULT);
|
||||
$request->setData('testKey', 'testValue');
|
||||
|
||||
self::assertEquals(
|
||||
\json_encode($request->getData()),
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox If no language can be identified en is returned
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testLanguage() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestLanguage.php'));
|
||||
$request->setMethod(RequestMethod::GET);
|
||||
|
||||
self::assertEquals(
|
||||
'en',
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox If no locale can be identified en_US is returned
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testLocale() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestLocale.php'));
|
||||
$request->setMethod(RequestMethod::GET);
|
||||
|
||||
self::assertEquals(
|
||||
'en_US',
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox A none-mobile request is recognized as none-mobile
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testMobile() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestMobile.php'));
|
||||
$request->setMethod(RequestMethod::GET);
|
||||
|
||||
self::assertEquals(
|
||||
(string) false,
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox If the OS type is unknown a unknwon OS type is returned
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testOS() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestOS.php'));
|
||||
$request->setMethod(RequestMethod::GET);
|
||||
|
||||
self::assertEquals(
|
||||
OSType::UNKNOWN,
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox If the browser type is unknown a unknwon browser type is returned
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
* @group framework
|
||||
*/
|
||||
public function testBrowser() : void
|
||||
{
|
||||
$request = new HttpRequest(new HttpUri('http://localhost:1234/phpOMS/tests/Message/Http/HttpRequestBrowser.php'));
|
||||
$request->setMethod(RequestMethod::GET);
|
||||
|
||||
self::assertEquals(
|
||||
BrowserType::UNKNOWN,
|
||||
Rest::request($request)->getBody()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox A invalid https port throws a OutOfRangeException
|
||||
* @covers phpOMS\Message\Http\HttpRequest<extended>
|
||||
|
|
|
|||
|
|
@ -34,4 +34,9 @@
|
|||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
<php>
|
||||
<const name="WEB_SERVER_HOST" value="localhost" />
|
||||
<const name="WEB_SERVER_PORT" value="1234" />
|
||||
<const name="WEB_SERVER_DOCROOT" value="./../" />
|
||||
</php>
|
||||
</phpunit>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user