* @group framework */ public function testDefault() : void { $request = new HttpRequest(); $_SERVER['HTTP_USER_AGENT'] = OSType::UNKNOWN . BrowserType::UNKNOWN; self::assertEquals('en', $request->getLanguage()); self::assertFalse($request->isMobile()); self::assertEquals(BrowserType::UNKNOWN, $request->getBrowser()); self::assertEquals(OSType::UNKNOWN, $request->getOS()); self::assertEquals('127.0.0.1', $request->getOrigin()); self::assertFalse(HttpRequest::isHttps()); self::assertEquals([], $request->getHash()); self::assertEmpty($request->getBody()); self::assertEmpty($request->getFiles()); self::assertEquals(RouteVerb::GET, $request->getRouteVerb()); self::assertEquals(RequestMethod::GET, $request->getMethod()); self::assertInstanceOf('\phpOMS\Message\Http\HttpHeader', $request->header); self::assertInstanceOf('\phpOMS\Message\Http\HttpRequest', HttpRequest::createFromSuperglobals()); self::assertEquals('', $request->__toString()); self::assertFalse($request->hasData('key')); self::assertNull($request->getData('key')); self::assertEquals('en', $request->getCountry()); self::assertEquals('en_US', $request->getLocale()); } /** * @testdox The OS can be set and returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testOSInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->setOS(OSType::WINDOWS_XP); self::assertEquals(OSType::WINDOWS_XP, $request->getOS()); } /** * @testdox The browser can be set and returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testBrowserTypeInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->setOS(OSType::WINDOWS_XP); self::assertEquals(OSType::WINDOWS_XP, $request->getOS()); $request->setBrowser(BrowserType::EDGE); self::assertEquals(BrowserType::EDGE, $request->getBrowser()); self::assertEquals(['browser' => BrowserType::EDGE, 'os' => OSType::WINDOWS_XP], $request->getRequestInfo()); } /** * @testdox The request method can be set and returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testRequestMethodInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->setMethod(RequestMethod::PUT); self::assertEquals(RequestMethod::PUT, $request->getMethod()); self::assertEquals(RouteVerb::PUT, $request->getRouteVerb()); } /** * @testdox The request referer can be returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testRequestRefererOutput() : void { $request = new HttpRequest(new HttpUri(''), $l11n = new Localization()); self::assertEquals('', $request->getReferer()); } /** * @testdox The route verb gets correctly inferred from the request method * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testRequestMethodToRouteVerb() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->setMethod(RequestMethod::PUT); self::assertEquals(RouteVerb::PUT, $request->getRouteVerb()); $request->setMethod(RequestMethod::DELETE); self::assertEquals(RouteVerb::DELETE, $request->getRouteVerb()); $request->setMethod(RequestMethod::POST); self::assertEquals(RouteVerb::SET, $request->getRouteVerb()); } /** * @testdox The request is correctly constructed * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testConstructInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); self::assertEquals('http://www.google.com/test/path', $request->__toString()); } /** * @testdox The request langauge can be returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testLangaugeOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->header->l11n = new Localization(); $request->header->l11n->setLanguage(ISO639x1Enum::_DE); self::assertEquals(ISO639x1Enum::_DE, $request->getLanguage()); } /** * @testdox The url hashes for the different paths get correctly generated * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testHashingInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->createRequestHashs(0); self::assertEquals([ 'da39a3ee5e6b4b0d3255bfef95601890afd80709', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', '328413d996ab9b79af9d4098af3a65b885c4ca64', ], $request->getHash()); self::assertEquals($l11n, $request->header->l11n); } /** * @testdox Request data can be forcefully overwritten * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testOverwrite() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); self::assertTrue($request->setData('key', 'value')); self::assertTrue($request->setData('key', 'value2', true)); self::assertEquals('value2', $request->getData('key')); } /** * @testdox Request data is not overwritten by default * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testInvalidOverwrite() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); self::assertTrue($request->setData('key', 'value')); self::assertFalse($request->setData('key', 'value2')); self::assertEquals('value', $request->getData('key')); } /** * @testdox The uri can be changed and returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testUriInputOutput() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path'), $l11n = new Localization()); $request->setUri(new HttpUri('http://www.google.com/test/path2')); self::assertEquals('http://www.google.com/test/path2', $request->__toString()); } /** * @testdox Json data can be read from the request * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testDataJsonRead() : void { $request = new HttpRequest(new HttpUri('')); $data = [ 1, 2, 3, 'a' => 'b', 'b' => [4, 5], ]; $request->setData('abc', \json_encode($data)); self::assertEquals($data, $request->getDataJson('abc')); } /** * @testdox None-existing json data reads return empty data * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testEmptyDataJsonRead() : void { $request = new HttpRequest(new HttpUri('')); self::assertEquals([], $request->getDataJson('def')); } /** * @testdox Invalid json data returns empty data * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testInvalidDataJsonRead() : void { $request = new HttpRequest(new HttpUri('')); $data = [ 1, 2, 3, 'a' => 'b', 'b' => [4, 5], ]; $request->setData('abc', \json_encode($data) . ','); self::assertEquals([], $request->getDataJson('abc')); } /** * @testdox List data can be read from the request * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testDataList() : void { $request = new HttpRequest(new HttpUri('')); $data = [ 1, 2, 3, 'a', 'b', ]; $request->setData('abc', \implode(',', $data)); self::assertEquals($data, $request->getDataList('abc')); } /** * @testdox None-existing list data reads return empty data * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testEmptyDataList() : void { $request = new HttpRequest(new HttpUri('')); self::assertEquals([], $request->getDataList('def')); } /** * @testdox Request data can be read with pattern matching * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testDataLike() : void { $request = new HttpRequest(new HttpUri('')); $data = 'this is a test'; $request->setData('abcde', $data); self::assertEquals(['abcde' => $data], $request->getLike('.*')); self::assertEquals(['abcde' => $data], $request->getLike('[a-z]*')); } /** * @testdox In case of no pattern matches empty data is returned * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testInvalidDataLikeMatch() : void { $request = new HttpRequest(new HttpUri('')); $data = 'this is a test'; $request->setData('abcde', $data); self::assertEquals([], $request->getLike('[a-z]*\d')); self::assertEquals([], $request->getLike('abcdef')); } /** * @testdox A request with a path can be correctly casted to a string * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testToString() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path')); self::assertEquals('http://www.google.com/test/path', $request->__toString()); } /** * @testdox A request with a path and manually added data can be correctly casted to a string * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testToStringData() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path')); $request->setData('test', 'data'); $request->setData('test2', 3); self::assertEquals('http://www.google.com/test/path?test=data&test2=3', $request->__toString()); } /** * @testdox A request with a path, query parameters and manually added data can be correctly casted to a string * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testToStringGetData() : void { $request = new HttpRequest(new HttpUri('http://www.google.com/test/path?test=var')); self::assertEquals('http://www.google.com/test/path?test=var', $request->__toString()); $request->setData('test', 'data'); $request->setData('test2', 3); self::assertEquals('http://www.google.com/test/path?test=var&test=data&test2=3', $request->__toString()); } /** * @testdox A rest request can be made from a request and the result can be read * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testRestRequest() : void { $request = new HttpRequest(new HttpUri('https://raw.githubusercontent.com/Karaka-Management/Karaka/develop/LICENSE.txt')); $request->setMethod(RequestMethod::GET); self::assertEquals( \file_get_contents(__DIR__ . '/../../../LICENSE.txt'), $request->rest()->getBody() ); } /** * @testdox A request can be made with post data * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testPostData() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . 'tests/Message/Http/HttpRequestPost.php')); $request->setMethod(RequestMethod::POST); $request->header->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 * @group framework */ public function testJsonData() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . 'tests/Message/Http/HttpRequestPost.php')); $request->setMethod(RequestMethod::POST); $request->header->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 * @group framework */ public function testMultipartData() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . 'tests/Message/Http/HttpRequestPost.php')); $request->setMethod(RequestMethod::POST); $request->header->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 * @group framework */ public function testLanguage() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . '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 * @group framework */ public function testLocale() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . '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 * @group framework */ public function testMobile() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . '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 * @group framework */ public function testOS() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . '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 * @group framework */ public function testBrowser() : void { $request = new HttpRequest(new HttpUri('http://localhost:1234' . $GLOBALS['frameworkpath'] . '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 * @group framework */ public function testInvalidHttpsPort() : void { $this->expectException(\OutOfRangeException::class); $request = new HttpRequest(new HttpUri('http://www.google.com/test/path')); $request->isHttps(-1); } /** * @testdox A Invalid route verb throws a Exception * @covers phpOMS\Message\Http\HttpRequest * @group framework */ public function testInvalidRouteVerb() : void { $this->expectException(\Exception::class); $request = new HttpRequest(new HttpUri('http://www.google.com/test/path')); $request->setMethod('failure'); $request->getRouteVerb(); } }