v2.0-alpha
This commit is contained in:
@@ -1,21 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Configuration\Configuration;
|
||||
use Driver\SQL\Query\CreateTable;
|
||||
use Driver\SQL\SQL;
|
||||
use Objects\Context;
|
||||
use Objects\DatabaseEntity\DatabaseEntityHandler;
|
||||
use Objects\DatabaseEntity\User;
|
||||
|
||||
class DatabaseEntityTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
static \Objects\User $USER;
|
||||
static \Driver\SQL\SQL $SQL;
|
||||
static \Objects\DatabaseEntity\DatabaseEntityHandler $HANDLER;
|
||||
static User $USER;
|
||||
static SQL $SQL;
|
||||
static Context $CONTEXT;
|
||||
static DatabaseEntityHandler $HANDLER;
|
||||
|
||||
public static function setUpBeforeClass(): void {
|
||||
parent::setUpBeforeClass();
|
||||
self::$USER = new Objects\User(new \Configuration\Configuration());
|
||||
self::$SQL = self::$USER->getSQL();
|
||||
self::$CONTEXT = new Context();
|
||||
if (!self::$CONTEXT->initSQL()) {
|
||||
throw new Exception("Could not establish database connection");
|
||||
}
|
||||
|
||||
self::$SQL = self::$CONTEXT->getSQL();
|
||||
self::$HANDLER = TestEntity::getHandler(self::$SQL);
|
||||
self::$HANDLER->getLogger()->unitTestMode();
|
||||
}
|
||||
|
||||
public function testCreateTable() {
|
||||
$this->assertInstanceOf(\Driver\SQL\Query\CreateTable::class, self::$HANDLER->getTableQuery());
|
||||
$this->assertInstanceOf(CreateTable::class, self::$HANDLER->getTableQuery());
|
||||
$this->assertTrue(self::$HANDLER->createTable());
|
||||
}
|
||||
|
||||
@@ -60,7 +72,8 @@ class DatabaseEntityTest extends \PHPUnit\Framework\TestCase {
|
||||
$allEntities = TestEntity::findAll(self::$SQL);
|
||||
$this->assertIsArray($allEntities);
|
||||
$this->assertCount(1, $allEntities);
|
||||
$this->assertEquals($entityId, $allEntities[0]->getId());
|
||||
$this->assertTrue(array_key_exists($entityId, $allEntities));
|
||||
$this->assertEquals($entityId, $allEntities[$entityId]->getId());
|
||||
|
||||
// delete
|
||||
$this->assertTrue($entity->delete(self::$SQL));
|
||||
@@ -94,4 +107,16 @@ class TestEntity extends \Objects\DatabaseEntity\DatabaseEntity {
|
||||
public float $d;
|
||||
public \DateTime $e;
|
||||
public ?int $f;
|
||||
|
||||
public function jsonSerialize(): array {
|
||||
return [
|
||||
"id" => $this->getId(),
|
||||
"a" => $this->a,
|
||||
"b" => $this->b,
|
||||
"c" => $this->c,
|
||||
"d" => $this->d,
|
||||
"e" => $this->e,
|
||||
"f" => $this->f,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
use Api\Request;
|
||||
use Configuration\Configuration;
|
||||
use Objects\User;
|
||||
use Objects\Context;
|
||||
use Objects\DatabaseEntity\User;
|
||||
|
||||
function __new_header_impl(string $line) {
|
||||
if (preg_match("/^HTTP\/([0-9.]+) (\d+) (.*)$/", $line, $m)) {
|
||||
@@ -34,6 +35,7 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
const FUNCTION_OVERRIDES = ["header", "http_response_code"];
|
||||
static User $USER;
|
||||
static User $USER_LOGGED_IN;
|
||||
static Context $CONTEXT;
|
||||
|
||||
static ?string $SENT_CONTENT;
|
||||
static array $SENT_HEADERS;
|
||||
@@ -41,13 +43,9 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
public static function setUpBeforeClass(): void {
|
||||
|
||||
$config = new Configuration();
|
||||
RequestTest::$USER = new User($config);
|
||||
RequestTest::$USER_LOGGED_IN = new User($config);
|
||||
if (!RequestTest::$USER->getSQL() || !RequestTest::$USER->getSQL()->isConnected()) {
|
||||
RequestTest::$CONTEXT = new Context();
|
||||
if (!RequestTest::$CONTEXT->initSQL()) {
|
||||
throw new Exception("Could not establish database connection");
|
||||
} else {
|
||||
RequestTest::$USER->setLanguage(\Objects\Language::DEFAULT_LANGUAGE());
|
||||
}
|
||||
|
||||
if (!function_exists("runkit7_function_rename") || !function_exists("runkit7_function_remove")) {
|
||||
@@ -65,7 +63,7 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
}
|
||||
|
||||
public static function tearDownAfterClass(): void {
|
||||
RequestTest::$USER->getSQL()->close();
|
||||
RequestTest::$CONTEXT->getSQL()?->close();
|
||||
foreach (self::FUNCTION_OVERRIDES as $functionName) {
|
||||
runkit7_function_remove($functionName);
|
||||
runkit7_function_rename("__orig_${functionName}_impl", $functionName);
|
||||
@@ -74,7 +72,7 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
private function simulateRequest(Request $request, string $method, array $get = [], array $post = [], array $headers = []): bool {
|
||||
|
||||
if (!is_cli()) {
|
||||
if (!self::$CONTEXT->isCLI()) {
|
||||
self::throwException(new \Exception("Cannot simulate request outside cli"));
|
||||
}
|
||||
|
||||
@@ -97,7 +95,7 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
public function testAllMethods() {
|
||||
// all methods allowed
|
||||
$allMethodsAllowed = new RequestAllMethods(RequestTest::$USER, true);
|
||||
$allMethodsAllowed = new RequestAllMethods(RequestTest::$CONTEXT, true);
|
||||
$this->assertTrue($this->simulateRequest($allMethodsAllowed, "GET"), $allMethodsAllowed->getLastError());
|
||||
$this->assertTrue($this->simulateRequest($allMethodsAllowed, "POST"), $allMethodsAllowed->getLastError());
|
||||
$this->assertFalse($this->simulateRequest($allMethodsAllowed, "PUT"), $allMethodsAllowed->getLastError());
|
||||
@@ -109,7 +107,7 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
public function testOnlyPost() {
|
||||
// only post allowed
|
||||
$onlyPostAllowed = new RequestOnlyPost(RequestTest::$USER, true);
|
||||
$onlyPostAllowed = new RequestOnlyPost(RequestTest::$CONTEXT, true);
|
||||
$this->assertFalse($this->simulateRequest($onlyPostAllowed, "GET"));
|
||||
$this->assertEquals("This method is not allowed", $onlyPostAllowed->getLastError(), $onlyPostAllowed->getLastError());
|
||||
$this->assertEquals(405, self::$SENT_STATUS_CODE);
|
||||
@@ -121,25 +119,25 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
public function testPrivate() {
|
||||
// private method
|
||||
$privateExternal = new RequestPrivate(RequestTest::$USER, true);
|
||||
$privateExternal = new RequestPrivate(RequestTest::$CONTEXT, true);
|
||||
$this->assertFalse($this->simulateRequest($privateExternal, "GET"));
|
||||
$this->assertEquals("This function is private.", $privateExternal->getLastError());
|
||||
$this->assertEquals(403, self::$SENT_STATUS_CODE);
|
||||
|
||||
$privateInternal = new RequestPrivate(RequestTest::$USER, false);
|
||||
$privateInternal = new RequestPrivate(RequestTest::$CONTEXT, false);
|
||||
$this->assertTrue($privateInternal->execute());
|
||||
}
|
||||
|
||||
public function testDisabled() {
|
||||
// disabled method
|
||||
$disabledMethod = new RequestDisabled(RequestTest::$USER, true);
|
||||
$disabledMethod = new RequestDisabled(RequestTest::$CONTEXT, true);
|
||||
$this->assertFalse($this->simulateRequest($disabledMethod, "GET"));
|
||||
$this->assertEquals("This function is currently disabled.", $disabledMethod->getLastError(), $disabledMethod->getLastError());
|
||||
$this->assertEquals(503, self::$SENT_STATUS_CODE);
|
||||
}
|
||||
|
||||
public function testLoginRequired() {
|
||||
$loginRequired = new RequestLoginRequired(RequestTest::$USER, true);
|
||||
$loginRequired = new RequestLoginRequired(RequestTest::$CONTEXT, true);
|
||||
$this->assertFalse($this->simulateRequest($loginRequired, "GET"));
|
||||
$this->assertEquals("You are not logged in.", $loginRequired->getLastError(), $loginRequired->getLastError());
|
||||
$this->assertEquals(401, self::$SENT_STATUS_CODE);
|
||||
@@ -147,8 +145,8 @@ class RequestTest extends \PHPUnit\Framework\TestCase {
|
||||
}
|
||||
|
||||
abstract class TestRequest extends Request {
|
||||
public function __construct(User $user, bool $externalCall = false, $params = []) {
|
||||
parent::__construct($user, $externalCall, $params);
|
||||
public function __construct(Context $context, bool $externalCall = false, $params = []) {
|
||||
parent::__construct($context, $externalCall, $params);
|
||||
}
|
||||
|
||||
protected function _die(string $data = ""): bool {
|
||||
@@ -162,35 +160,35 @@ abstract class TestRequest extends Request {
|
||||
}
|
||||
|
||||
class RequestAllMethods extends TestRequest {
|
||||
public function __construct(User $user, bool $externalCall = false) {
|
||||
parent::__construct($user, $externalCall, []);
|
||||
public function __construct(Context $context, bool $externalCall = false) {
|
||||
parent::__construct($context, $externalCall, []);
|
||||
}
|
||||
}
|
||||
|
||||
class RequestOnlyPost extends TestRequest {
|
||||
public function __construct(User $user, bool $externalCall = false) {
|
||||
parent::__construct($user, $externalCall, []);
|
||||
public function __construct(Context $context, bool $externalCall = false) {
|
||||
parent::__construct($context, $externalCall, []);
|
||||
$this->forbidMethod("GET");
|
||||
}
|
||||
}
|
||||
|
||||
class RequestPrivate extends TestRequest {
|
||||
public function __construct(User $user, bool $externalCall = false) {
|
||||
parent::__construct($user, $externalCall, []);
|
||||
public function __construct(Context $context, bool $externalCall = false) {
|
||||
parent::__construct($context, $externalCall, []);
|
||||
$this->isPublic = false;
|
||||
}
|
||||
}
|
||||
|
||||
class RequestDisabled extends TestRequest {
|
||||
public function __construct(User $user, bool $externalCall = false) {
|
||||
parent::__construct($user, $externalCall, []);
|
||||
public function __construct(Context $context, bool $externalCall = false) {
|
||||
parent::__construct($context, $externalCall, []);
|
||||
$this->isDisabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
class RequestLoginRequired extends TestRequest {
|
||||
public function __construct(User $user, bool $externalCall = false) {
|
||||
parent::__construct($user, $externalCall, []);
|
||||
public function __construct(Context $context, bool $externalCall = false) {
|
||||
parent::__construct($context, $externalCall, []);
|
||||
$this->loginRequired = true;
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,17 @@
|
||||
<?php
|
||||
|
||||
use Configuration\Configuration;
|
||||
use Objects\Context;
|
||||
use Objects\Router\EmptyRoute;
|
||||
use Objects\Router\Router;
|
||||
use Objects\User;
|
||||
|
||||
class RouterTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
private static User $USER;
|
||||
private static Router $ROUTER;
|
||||
private static Context $CONTEXT;
|
||||
|
||||
public static function setUpBeforeClass(): void {
|
||||
|
||||
$config = new Configuration();
|
||||
RouterTest::$USER = new User($config);
|
||||
RouterTest::$ROUTER = new Router(RouterTest::$USER);
|
||||
RouterTest::$CONTEXT = new Context();
|
||||
RouterTest::$ROUTER = new Router(RouterTest::$CONTEXT);
|
||||
}
|
||||
|
||||
public function testSimpleRoutes() {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
use Base32\Base32;
|
||||
use Configuration\Configuration;
|
||||
use Objects\TwoFactor\TimeBasedTwoFactorToken;
|
||||
use Objects\User;
|
||||
use Objects\DatabaseEntity\User;
|
||||
|
||||
class TimeBasedTwoFactorTokenTest extends PHPUnit\Framework\TestCase {
|
||||
|
||||
@@ -31,13 +31,14 @@ class TimeBasedTwoFactorTokenTest extends PHPUnit\Framework\TestCase {
|
||||
|
||||
public function testURL() {
|
||||
$secret = Base32::encode("12345678901234567890");
|
||||
$configuration = new Configuration();
|
||||
$user = new User($configuration);
|
||||
$context = new \Objects\Context();
|
||||
|
||||
// $context->
|
||||
|
||||
$token = new TimeBasedTwoFactorToken($secret);
|
||||
$siteName = $configuration->getSettings()->getSiteName();
|
||||
$username = $user->getUsername();
|
||||
$url = $token->getUrl($user);
|
||||
$siteName = $context->getSettings()->getSiteName();
|
||||
$username = $context->getUser()->getUsername();
|
||||
$url = $token->getUrl($context);
|
||||
$this->assertEquals("otpauth://totp/$username?secret=$secret&issuer=$siteName", $url);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user