mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-11 17:58:41 +00:00
add tests and fix bugs
This commit is contained in:
parent
20a45ef0c8
commit
bbdd04b36e
|
|
@ -15,7 +15,7 @@ declare(strict_types=1);
|
||||||
namespace phpOMS\Account;
|
namespace phpOMS\Account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Null account class.
|
* Null group class.
|
||||||
*
|
*
|
||||||
* @package phpOMS\Account
|
* @package phpOMS\Account
|
||||||
* @license OMS License 1.0
|
* @license OMS License 1.0
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,10 @@ final class Weighted
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#243
|
||||||
|
* [JobScheduling] Implement sortByEnd test coverage
|
||||||
|
* All 3 if cases are not covered. Implement the tests!
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
private static function sortByEnd(JobInterface $j1, JobInterface $j2) : int
|
private static function sortByEnd(JobInterface $j1, JobInterface $j2) : int
|
||||||
|
|
@ -104,6 +108,10 @@ final class Weighted
|
||||||
*
|
*
|
||||||
* @return JobInterface[]
|
* @return JobInterface[]
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#244
|
||||||
|
* [JobScheduling] Implement test for Jobs with same value.
|
||||||
|
* There is no test case for the else clause in the `solve` function. Implement it.
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public static function solve(array $jobs) : array
|
public static function solve(array $jobs) : array
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,9 @@ final class ApplicationManager
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#245
|
||||||
|
* [ApplicationManager] Implement test for invalid source and invalid destination
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function install(string $source, string $destination) : void
|
public function install(string $source, string $destination) : void
|
||||||
|
|
|
||||||
|
|
@ -763,7 +763,12 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
throw new InvalidMapperException();
|
throw new InvalidMapperException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$values = $obj[$propertyName];
|
$values = $obj[$propertyName] ?? null;
|
||||||
|
|
||||||
|
if (!\is_array($values)) {
|
||||||
|
// conditionals
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/** @var self $mapper */
|
/** @var self $mapper */
|
||||||
$mapper = static::$hasMany[$propertyName]['mapper'];
|
$mapper = static::$hasMany[$propertyName]['mapper'];
|
||||||
|
|
@ -1028,6 +1033,11 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
|
|
||||||
$values = $property->getValue($obj);
|
$values = $property->getValue($obj);
|
||||||
|
|
||||||
|
if (!\is_array($values)) {
|
||||||
|
// conditionals
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!$isPublic) {
|
if (!$isPublic) {
|
||||||
$property->setAccessible(false);
|
$property->setAccessible(false);
|
||||||
}
|
}
|
||||||
|
|
@ -1109,7 +1119,12 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
throw new InvalidMapperException();
|
throw new InvalidMapperException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$values = $obj[$propertyName];
|
$values = $obj[$propertyName] ?? null;
|
||||||
|
|
||||||
|
if (!\is_array($values)) {
|
||||||
|
// conditionals
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/** @var self $mapper */
|
/** @var self $mapper */
|
||||||
$mapper = static::$hasMany[$propertyName]['mapper'];
|
$mapper = static::$hasMany[$propertyName]['mapper'];
|
||||||
|
|
@ -1566,6 +1581,11 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
|
|
||||||
$values = $property->getValue($obj);
|
$values = $property->getValue($obj);
|
||||||
|
|
||||||
|
if (!\is_array($values)) {
|
||||||
|
// conditionals
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!$isPublic) {
|
if (!$isPublic) {
|
||||||
$property->setAccessible(false);
|
$property->setAccessible(false);
|
||||||
}
|
}
|
||||||
|
|
@ -2159,7 +2179,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (static::$hasMany as $member => $def) {
|
foreach (static::$hasMany as $member => $def) {
|
||||||
$column = $def['mapper']::getColumnByMember($member);
|
$column = $def['mapper']::getColumnByMember($def['column'] ?? $member);
|
||||||
$alias = $column . '_' . ($depth - 1);
|
$alias = $column . '_' . ($depth - 1);
|
||||||
|
|
||||||
if (!\array_key_exists($alias, $result) || !isset($def['column'])) {
|
if (!\array_key_exists($alias, $result) || !isset($def['column'])) {
|
||||||
|
|
|
||||||
|
|
@ -571,22 +571,6 @@ class Builder extends BuilderAbstract
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get column of where condition
|
|
||||||
*
|
|
||||||
* One column can have multiple where conditions.
|
|
||||||
*
|
|
||||||
* @param mixed $column Column
|
|
||||||
*
|
|
||||||
* @return null|array
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
public function getWhereByColumn($column) : ?array
|
|
||||||
{
|
|
||||||
return $this->wheres[self::getPublicColumnName($column)] ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Where and sub condition.
|
* Where and sub condition.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,9 @@ final class EventManager implements \Countable
|
||||||
*
|
*
|
||||||
* @return bool returns true on successfully triggering the event, false if the event couldn't be triggered which also includes sub-requirements missing
|
* @return bool returns true on successfully triggering the event, false if the event couldn't be triggered which also includes sub-requirements missing
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#241
|
||||||
|
* [EventManager] Create an event with a regex id/name and trigger it
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function trigger(string $group, string $id = '', $data = null) : bool
|
public function trigger(string $group, string $id = '', $data = null) : bool
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,9 @@ final class L11nManager
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#247
|
||||||
|
* [L11nManager] Create currency rendering test for million and billion dividers
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function getCurrency(Localization $l11n, $currency, string $format = null, string $symbol = null, int $divide = 1) : string
|
public function getCurrency(Localization $l11n, $currency, string $format = null, string $symbol = null, int $divide = 1) : string
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,11 @@ final class FileLogger implements LoggerInterface
|
||||||
*
|
*
|
||||||
* @return FileLogger
|
* @return FileLogger
|
||||||
*
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#248
|
||||||
|
* [FileLogger] Create test for getInstance
|
||||||
|
* Maybe unset the instance static variable first because it might be defined already.
|
||||||
|
* In order to do this use the `TestUtils` functionality.
|
||||||
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public static function getInstance(string $path = '', bool $verbose = false) : self
|
public static function getInstance(string $path = '', bool $verbose = false) : self
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ final class Rest
|
||||||
|
|
||||||
\curl_setopt($curl, \CURLOPT_HTTPHEADER, $headers);
|
\curl_setopt($curl, \CURLOPT_HTTPHEADER, $headers);
|
||||||
\curl_setopt($curl, \CURLOPT_HEADER, true);
|
\curl_setopt($curl, \CURLOPT_HEADER, true);
|
||||||
|
\curl_setopt($curl, \CURLOPT_CONNECTTIMEOUT, 5);
|
||||||
|
\curl_setopt($curl, \CURLOPT_TIMEOUT, 30);
|
||||||
|
|
||||||
switch ($request->getMethod()) {
|
switch ($request->getMethod()) {
|
||||||
case RequestMethod::GET:
|
case RequestMethod::GET:
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,10 @@ final class WebRouter implements RouterInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// if validation check is invalid
|
// if validation check is invalid
|
||||||
|
/**
|
||||||
|
* @todo Orange-Management/phpOMS#251
|
||||||
|
* [WebRouter] Implement test to validate the provided data
|
||||||
|
*/
|
||||||
if (isset($d['validation'])) {
|
if (isset($d['validation'])) {
|
||||||
foreach ($d['validation'] as $name => $pattern) {
|
foreach ($d['validation'] as $name => $pattern) {
|
||||||
if (!isset($data[$name]) || \preg_match($pattern, $data[$name]) !== 1) {
|
if (!isset($data[$name]) || \preg_match($pattern, $data[$name]) !== 1) {
|
||||||
|
|
@ -158,6 +162,10 @@ final class WebRouter implements RouterInterface
|
||||||
$temp = ['dest' => $d['dest']];
|
$temp = ['dest' => $d['dest']];
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
|
/**
|
||||||
|
* @todo Orange-Management/phpOMS#252
|
||||||
|
* [WebRouter] Implement test for defining data from route
|
||||||
|
*/
|
||||||
if (isset($d['pattern'])) {
|
if (isset($d['pattern'])) {
|
||||||
\preg_match($d['pattern'], $route, $matches);
|
\preg_match($d['pattern'], $route, $matches);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,10 @@ class Tar implements ArchiveInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#250
|
||||||
|
* [Tar] Create tar test without destination path/name
|
||||||
|
* Simply call `Tar::pack([src1, src2, ...], 'output.tar')`
|
||||||
*/
|
*/
|
||||||
public static function pack($sources, string $destination, bool $overwrite = false) : bool
|
public static function pack($sources, string $destination, bool $overwrite = false) : bool
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,10 @@ class Zip implements ArchiveInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @todo Orange-Management/phpOMS#249
|
||||||
|
* [Zip] Create zip test without destination path/name
|
||||||
|
* Simply call `Zip::pack([src1, src2, ...], 'output.zip')`
|
||||||
*/
|
*/
|
||||||
public static function pack($sources, string $destination, bool $overwrite = false) : bool
|
public static function pack($sources, string $destination, bool $overwrite = false) : bool
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -241,16 +241,16 @@ final class MbStringUtils
|
||||||
*/
|
*/
|
||||||
public static function mb_entropy(string $value) : float
|
public static function mb_entropy(string $value) : float
|
||||||
{
|
{
|
||||||
$entroy = 0.0;
|
$entropy = 0.0;
|
||||||
$size = \mb_strlen($value);
|
$size = \mb_strlen($value);
|
||||||
$countChars = self::mb_count_chars($value);
|
$countChars = self::mb_count_chars($value);
|
||||||
|
|
||||||
foreach ($countChars as $v) {
|
foreach ($countChars as $v) {
|
||||||
$p = $v / $size;
|
$p = $v / $size;
|
||||||
$entroy -= $p * \log($p) / \log(2);
|
$entropy -= $p * \log($p) / \log(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $entroy;
|
return $entropy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -173,16 +173,16 @@ final class StringUtils
|
||||||
*/
|
*/
|
||||||
public static function entropy(string $value) : float
|
public static function entropy(string $value) : float
|
||||||
{
|
{
|
||||||
$entroy = 0.0;
|
$entropy = 0.0;
|
||||||
$size = \strlen($value);
|
$size = \strlen($value);
|
||||||
$countChars = \count_chars($value);
|
$countChars = \count_chars($value, 1);
|
||||||
|
|
||||||
foreach ($countChars as $v) {
|
foreach ($countChars as $v) {
|
||||||
$p = $v / $size;
|
$p = $v / $size;
|
||||||
$entroy -= $p * \log($p) / \log(2);
|
$entropy -= $p * \log($p) / \log(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $entroy;
|
return $entropy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -27,4 +27,10 @@ final class NullAccountTest extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
self::assertInstanceOf('\phpOMS\Account\Account', new NullAccount());
|
self::assertInstanceOf('\phpOMS\Account\Account', new NullAccount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testId() : void
|
||||||
|
{
|
||||||
|
$null = new NullAccount(2);
|
||||||
|
self::assertEquals(2, $null->getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ namespace phpOMS\tests\DataStorage\Database\Connection;
|
||||||
|
|
||||||
use phpOMS\DataStorage\Database\Connection\MysqlConnection;
|
use phpOMS\DataStorage\Database\Connection\MysqlConnection;
|
||||||
use phpOMS\DataStorage\Database\DatabaseStatus;
|
use phpOMS\DataStorage\Database\DatabaseStatus;
|
||||||
|
use phpOMS\DataStorage\Database\DatabaseType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox phpOMS\tests\DataStorage\Database\Connection\MysqlConnectionTest: Mysql connection
|
* @testdox phpOMS\tests\DataStorage\Database\Connection\MysqlConnectionTest: Mysql connection
|
||||||
|
|
@ -35,7 +36,7 @@ class MysqlConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Valid mysql connection data result in a valid database connection
|
* @testdox Valid mysql connection data result in a valid database connection
|
||||||
* @covers phpOMS\DataStorage\Database\Connection\MysqlConnection
|
* @covers phpOMS\DataStorage\Database\Connection\MysqlConnection<extended>
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testConnect() : void
|
public function testConnect() : void
|
||||||
|
|
@ -47,6 +48,7 @@ class MysqlConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals($GLOBALS['CONFIG']['db']['core']['masters']['admin']['host'], $mysql->getHost());
|
self::assertEquals($GLOBALS['CONFIG']['db']['core']['masters']['admin']['host'], $mysql->getHost());
|
||||||
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['masters']['admin']['port'], $mysql->getPort());
|
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['masters']['admin']['port'], $mysql->getPort());
|
||||||
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\MysqlGrammar', $mysql->getGrammar());
|
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\MysqlGrammar', $mysql->getGrammar());
|
||||||
|
self::assertEquals(DatabaseType::MYSQL, $mysql->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ final class NullConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @testdox A null connection can be created as placeholder
|
* @testdox A null connection can be created as placeholder
|
||||||
* @covers phpOMS\DataStorage\Database\Connection\PostgresConnection
|
* @covers phpOMS\DataStorage\Database\Connection\NullConnection<extended>
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testConnect() : void
|
public function testConnect() : void
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ namespace phpOMS\tests\DataStorage\Database\Connection;
|
||||||
|
|
||||||
use phpOMS\DataStorage\Database\Connection\PostgresConnection;
|
use phpOMS\DataStorage\Database\Connection\PostgresConnection;
|
||||||
use phpOMS\DataStorage\Database\DatabaseStatus;
|
use phpOMS\DataStorage\Database\DatabaseStatus;
|
||||||
|
use phpOMS\DataStorage\Database\DatabaseType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox phpOMS\tests\DataStorage\Database\Connection\PostgresConnectionTest: Postgresql connection
|
* @testdox phpOMS\tests\DataStorage\Database\Connection\PostgresConnectionTest: Postgresql connection
|
||||||
|
|
@ -34,7 +35,7 @@ class PostgresConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Valid postgresql connection data result in a valid database connection
|
* @testdox Valid postgresql connection data result in a valid database connection
|
||||||
* @covers phpOMS\DataStorage\Database\Connection\PostgresConnection
|
* @covers phpOMS\DataStorage\Database\Connection\PostgresConnection<extended>
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testConnect() : void
|
public function testConnect() : void
|
||||||
|
|
@ -45,6 +46,7 @@ class PostgresConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals($GLOBALS['CONFIG']['db']['core']['postgresql']['admin']['host'], $psql->getHost());
|
self::assertEquals($GLOBALS['CONFIG']['db']['core']['postgresql']['admin']['host'], $psql->getHost());
|
||||||
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['postgresql']['admin']['port'], $psql->getPort());
|
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['postgresql']['admin']['port'], $psql->getPort());
|
||||||
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\PostgresGrammar', $psql->getGrammar());
|
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\PostgresGrammar', $psql->getGrammar());
|
||||||
|
self::assertEquals(DatabaseType::PGSQL, $psql->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ namespace phpOMS\tests\DataStorage\Database\Connection;
|
||||||
|
|
||||||
use phpOMS\DataStorage\Database\Connection\SQLiteConnection;
|
use phpOMS\DataStorage\Database\Connection\SQLiteConnection;
|
||||||
use phpOMS\DataStorage\Database\DatabaseStatus;
|
use phpOMS\DataStorage\Database\DatabaseStatus;
|
||||||
|
use phpOMS\DataStorage\Database\DatabaseType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox phpOMS\tests\DataStorage\Database\Connection\SQLiteConnectionTest: SQLite connection
|
* @testdox phpOMS\tests\DataStorage\Database\Connection\SQLiteConnectionTest: SQLite connection
|
||||||
|
|
@ -34,7 +35,7 @@ class SQLiteConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Valid sqlite connection data result in a valid database connection
|
* @testdox Valid sqlite connection data result in a valid database connection
|
||||||
* @covers phpOMS\DataStorage\Database\Connection\SQLiteConnection
|
* @covers phpOMS\DataStorage\Database\Connection\SQLiteConnection<extended>
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testConnect() : void
|
public function testConnect() : void
|
||||||
|
|
@ -43,6 +44,7 @@ class SQLiteConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals(DatabaseStatus::OK, $sqlite->getStatus());
|
self::assertEquals(DatabaseStatus::OK, $sqlite->getStatus());
|
||||||
self::assertEquals($GLOBALS['CONFIG']['db']['core']['sqlite']['admin']['database'], $sqlite->getDatabase());
|
self::assertEquals($GLOBALS['CONFIG']['db']['core']['sqlite']['admin']['database'], $sqlite->getDatabase());
|
||||||
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\SQLiteGrammar', $sqlite->getGrammar());
|
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\SQLiteGrammar', $sqlite->getGrammar());
|
||||||
|
self::assertEquals(DatabaseType::SQLITE, $sqlite->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ namespace phpOMS\tests\DataStorage\Database\Connection;
|
||||||
|
|
||||||
use phpOMS\DataStorage\Database\Connection\SqlServerConnection;
|
use phpOMS\DataStorage\Database\Connection\SqlServerConnection;
|
||||||
use phpOMS\DataStorage\Database\DatabaseStatus;
|
use phpOMS\DataStorage\Database\DatabaseStatus;
|
||||||
|
use phpOMS\DataStorage\Database\DatabaseType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox phpOMS\tests\DataStorage\Database\Connection\SqlServerConnectionTest: Sqlserver connection
|
* @testdox phpOMS\tests\DataStorage\Database\Connection\SqlServerConnectionTest: Sqlserver connection
|
||||||
|
|
@ -35,7 +36,7 @@ class SqlServerConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Valid sqlserver connection data result in a valid database connection
|
* @testdox Valid sqlserver connection data result in a valid database connection
|
||||||
* @covers phpOMS\DataStorage\Database\Connection\SqlServerConnection
|
* @covers phpOMS\DataStorage\Database\Connection\SqlServerConnection<extended>
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testConnect() : void
|
public function testConnect() : void
|
||||||
|
|
@ -46,6 +47,7 @@ class SqlServerConnectionTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals($GLOBALS['CONFIG']['db']['core']['mssql']['admin']['host'], $ssql->getHost());
|
self::assertEquals($GLOBALS['CONFIG']['db']['core']['mssql']['admin']['host'], $ssql->getHost());
|
||||||
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['mssql']['admin']['port'], $ssql->getPort());
|
self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['mssql']['admin']['port'], $ssql->getPort());
|
||||||
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\SqlServerGrammar', $ssql->getGrammar());
|
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\SqlServerGrammar', $ssql->getGrammar());
|
||||||
|
self::assertEquals(DatabaseType::SQLSRV, $ssql->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ namespace phpOMS\tests\DataStorage\Database;
|
||||||
|
|
||||||
use phpOMS\tests\DataStorage\Database\TestModel\BaseModel;
|
use phpOMS\tests\DataStorage\Database\TestModel\BaseModel;
|
||||||
use phpOMS\tests\DataStorage\Database\TestModel\BaseModelMapper;
|
use phpOMS\tests\DataStorage\Database\TestModel\BaseModelMapper;
|
||||||
|
use phpOMS\tests\DataStorage\Database\TestModel\Conditional;
|
||||||
|
use phpOMS\tests\DataStorage\Database\TestModel\ConditionalMapper;
|
||||||
use phpOMS\tests\DataStorage\Database\TestModel\ManyToManyDirectModelMapper;
|
use phpOMS\tests\DataStorage\Database\TestModel\ManyToManyDirectModelMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -46,6 +48,7 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
},
|
},
|
||||||
'datetime' => new \DateTime('2005-10-11'),
|
'datetime' => new \DateTime('2005-10-11'),
|
||||||
'datetime_null' => null,
|
'datetime_null' => null,
|
||||||
|
'conditional' => '',
|
||||||
'ownsOneSelf' => [
|
'ownsOneSelf' => [
|
||||||
'id' => 0,
|
'id' => 0,
|
||||||
'string' => 'OwnsOne',
|
'string' => 'OwnsOne',
|
||||||
|
|
@ -96,6 +99,16 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
||||||
)->execute();
|
)->execute();
|
||||||
|
|
||||||
|
$GLOBALS['dbpool']->get()->con->prepare(
|
||||||
|
'CREATE TABLE `test_conditional` (
|
||||||
|
`test_conditional_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`test_conditional_title` varchar(254) NOT NULL,
|
||||||
|
`test_conditional_base` int(11) NOT NULL,
|
||||||
|
`test_conditional_language` varchar(254) NOT NULL,
|
||||||
|
PRIMARY KEY (`test_conditional_id`)
|
||||||
|
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
||||||
|
)->execute();
|
||||||
|
|
||||||
$GLOBALS['dbpool']->get()->con->prepare(
|
$GLOBALS['dbpool']->get()->con->prepare(
|
||||||
'CREATE TABLE `test_belongs_to_one` (
|
'CREATE TABLE `test_belongs_to_one` (
|
||||||
`test_belongs_to_one_id` int(11) NOT NULL AUTO_INCREMENT,
|
`test_belongs_to_one_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
|
@ -141,6 +154,7 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
protected function tearDown() : void
|
protected function tearDown() : void
|
||||||
{
|
{
|
||||||
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_conditional')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_base')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_base')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_belongs_to_one')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_belongs_to_one')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_owns_one')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_owns_one')->execute();
|
||||||
|
|
@ -227,6 +241,66 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertCount(1, BaseModelMapper::getAll());
|
self::assertCount(1, BaseModelMapper::getAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFind() : void
|
||||||
|
{
|
||||||
|
$model1 = clone $this->model;
|
||||||
|
$model2 = clone $this->model;
|
||||||
|
$model3 = clone $this->model;
|
||||||
|
|
||||||
|
$model1->string = 'abc';
|
||||||
|
$model2->string = 'hallo sir';
|
||||||
|
$model3->string = 'seasiren';
|
||||||
|
|
||||||
|
BaseModelMapper::create($model1);
|
||||||
|
BaseModelMapper::create($model2);
|
||||||
|
BaseModelMapper::create($model3);
|
||||||
|
|
||||||
|
$found = BaseModelMapper::find('sir');
|
||||||
|
self::assertCount(2, $found);
|
||||||
|
self::assertEquals($model2->string, reset($found)->string);
|
||||||
|
self::assertEquals($model3->string, end($found)->string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithConditional() : void
|
||||||
|
{
|
||||||
|
$model1 = clone $this->model;
|
||||||
|
$model2 = clone $this->model;
|
||||||
|
$model3 = clone $this->model;
|
||||||
|
|
||||||
|
$model1->string = 'abc';
|
||||||
|
$model2->string = 'hallo sir';
|
||||||
|
$model3->string = 'seasiren';
|
||||||
|
|
||||||
|
$id1 = BaseModelMapper::create($model1);
|
||||||
|
$id2 = BaseModelMapper::create($model2);
|
||||||
|
$id3 = BaseModelMapper::create($model3);
|
||||||
|
|
||||||
|
$cond1 = new Conditional();
|
||||||
|
$cond1->language = 'de';
|
||||||
|
$cond1->title = 'cond1_de';
|
||||||
|
$cond1->base = $id1;
|
||||||
|
ConditionalMapper::create($cond1);
|
||||||
|
|
||||||
|
$cond2 = new Conditional();
|
||||||
|
$cond2->language = 'en';
|
||||||
|
$cond2->title = 'cond1_en';
|
||||||
|
$cond2->base = $id1;
|
||||||
|
ConditionalMapper::create($cond2);
|
||||||
|
|
||||||
|
$cond3 = new Conditional();
|
||||||
|
$cond3->language = 'de';
|
||||||
|
$cond3->title = 'cond2_de';
|
||||||
|
$cond3->base = $id2;
|
||||||
|
ConditionalMapper::create($cond3);
|
||||||
|
|
||||||
|
$found = BaseModelMapper::withConditional('language', 'de')::getAll();
|
||||||
|
self::assertCount(2, $found);
|
||||||
|
self::assertEquals($model1->string, reset($found)->string);
|
||||||
|
self::assertEquals($model2->string, end($found)->string);
|
||||||
|
self::assertEquals('cond1_de', reset($found)->conditional);
|
||||||
|
self::assertEquals('cond2_de', end($found)->conditional);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox The datamapper successfully returns a database entry as array
|
* @testdox The datamapper successfully returns a database entry as array
|
||||||
* @covers phpOMS\DataStorage\Database\DataMapperAbstract
|
* @covers phpOMS\DataStorage\Database\DataMapperAbstract
|
||||||
|
|
@ -307,12 +381,12 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
$id = BaseModelMapper::createArray($this->modelArray);
|
$id = BaseModelMapper::createArray($this->modelArray);
|
||||||
$modelR = BaseModelMapper::getArray($id);
|
$modelR = BaseModelMapper::getArray($id);
|
||||||
|
|
||||||
$modelR['string'] = 'Update';
|
$modelR['string'] = 'Update';
|
||||||
$modelR['int'] = '321';
|
$modelR['int'] = '321';
|
||||||
$modelR['bool'] = true;
|
$modelR['bool'] = true;
|
||||||
$modelR['float'] = 3.15;
|
$modelR['float'] = 3.15;
|
||||||
$modelR['null'] = null;
|
$modelR['null'] = null;
|
||||||
$modelR['datetime'] = new \DateTime('now');
|
$modelR['datetime'] = new \DateTime('now');
|
||||||
$modelR['datetime_null'] = null;
|
$modelR['datetime_null'] = null;
|
||||||
|
|
||||||
$id2 = BaseModelMapper::updateArray($modelR);
|
$id2 = BaseModelMapper::updateArray($modelR);
|
||||||
|
|
|
||||||
|
|
@ -24,5 +24,8 @@ class InvalidMapperExceptionTest extends \PHPUnit\Framework\TestCase
|
||||||
public function testException() : void
|
public function testException() : void
|
||||||
{
|
{
|
||||||
self::assertInstanceOf(\RuntimeException::class, new InvalidMapperException(''));
|
self::assertInstanceOf(\RuntimeException::class, new InvalidMapperException(''));
|
||||||
|
|
||||||
|
$e = new InvalidMapperException('TestMapper');
|
||||||
|
self::assertStringContainsString('TestMapper', $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -352,11 +352,21 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals('SELECT test.val FROM test;', $query->raw('SELECT test.val FROM test;')->toSql());
|
self::assertEquals('SELECT test.val FROM test;', $query->raw('SELECT test.val FROM test;')->toSql());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Read only queries allow selects
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testReadOnlyRawSelect() : void
|
||||||
|
{
|
||||||
|
$query = new Builder($this->con, true);
|
||||||
|
self::assertInstanceOf(Builder::class, $query->raw('SELECT * from oms;'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Read only queries don't allow drops
|
* @testdox Read only queries don't allow drops
|
||||||
* @group framework
|
* @group framework
|
||||||
*/
|
*/
|
||||||
public function testReadOnlyRaw() : void
|
public function testReadOnlyRawDrop() : void
|
||||||
{
|
{
|
||||||
self::expectException(\Exception::class);
|
self::expectException(\Exception::class);
|
||||||
|
|
||||||
|
|
@ -364,6 +374,42 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
||||||
$query->raw('DROP DATABASE oms;');
|
$query->raw('DROP DATABASE oms;');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Read only queries don't allow deletes
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testReadOnlyRawDelete() : void
|
||||||
|
{
|
||||||
|
self::expectException(\Exception::class);
|
||||||
|
|
||||||
|
$query = new Builder($this->con, true);
|
||||||
|
$query->raw('DELETE oms;');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Read only queries don't allow creates
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testReadOnlyRawCreate() : void
|
||||||
|
{
|
||||||
|
self::expectException(\Exception::class);
|
||||||
|
|
||||||
|
$query = new Builder($this->con, true);
|
||||||
|
$query->raw('CREATE oms;');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Read only queries don't allow modifications
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testReadOnlyRawAlter() : void
|
||||||
|
{
|
||||||
|
self::expectException(\Exception::class);
|
||||||
|
|
||||||
|
$query = new Builder($this->con, true);
|
||||||
|
$query->raw('ALTER oms;');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Read only queries don't allow inserts
|
* @testdox Read only queries don't allow inserts
|
||||||
* @group framework
|
* @group framework
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ class BaseModel
|
||||||
|
|
||||||
public $string = 'Base';
|
public $string = 'Base';
|
||||||
|
|
||||||
|
public $conditional = '';
|
||||||
|
|
||||||
public $int = 11;
|
public $int = 11;
|
||||||
|
|
||||||
public $bool = false;
|
public $bool = false;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class BaseModelMapper extends DataMapperAbstract
|
||||||
*/
|
*/
|
||||||
protected static array $columns = [
|
protected static array $columns = [
|
||||||
'test_base_id' => ['name' => 'test_base_id', 'type' => 'int', 'internal' => 'id'],
|
'test_base_id' => ['name' => 'test_base_id', 'type' => 'int', 'internal' => 'id'],
|
||||||
'test_base_string' => ['name' => 'test_base_string', 'type' => 'string', 'internal' => 'string'],
|
'test_base_string' => ['name' => 'test_base_string', 'type' => 'string', 'internal' => 'string', 'autocomplete' => true],
|
||||||
'test_base_int' => ['name' => 'test_base_int', 'type' => 'int', 'internal' => 'int'],
|
'test_base_int' => ['name' => 'test_base_int', 'type' => 'int', 'internal' => 'int'],
|
||||||
'test_base_bool' => ['name' => 'test_base_bool', 'type' => 'bool', 'internal' => 'bool'],
|
'test_base_bool' => ['name' => 'test_base_bool', 'type' => 'bool', 'internal' => 'bool'],
|
||||||
'test_base_null' => ['name' => 'test_base_null', 'type' => 'int', 'internal' => 'null'],
|
'test_base_null' => ['name' => 'test_base_null', 'type' => 'int', 'internal' => 'null'],
|
||||||
|
|
@ -68,14 +68,21 @@ class BaseModelMapper extends DataMapperAbstract
|
||||||
'hasManyDirect' => [
|
'hasManyDirect' => [
|
||||||
'mapper' => ManyToManyDirectModelMapper::class,
|
'mapper' => ManyToManyDirectModelMapper::class,
|
||||||
'table' => 'test_has_many_direct',
|
'table' => 'test_has_many_direct',
|
||||||
'external' => 'test_has_many_direct_to',
|
'external' => 'test_has_many_direct_to',
|
||||||
'self' => null,
|
'self' => null,
|
||||||
],
|
],
|
||||||
'hasManyRelations' => [
|
'hasManyRelations' => [
|
||||||
'mapper' => ManyToManyRelModelMapper::class,
|
'mapper' => ManyToManyRelModelMapper::class,
|
||||||
'table' => 'test_has_many_rel_relations',
|
'table' => 'test_has_many_rel_relations',
|
||||||
'external' => 'test_has_many_rel_relations_dest',
|
'external' => 'test_has_many_rel_relations_dest',
|
||||||
'self' => 'test_has_many_rel_relations_src',
|
'self' => 'test_has_many_rel_relations_src',
|
||||||
|
],
|
||||||
|
'conditional' => [
|
||||||
|
'mapper' => ConditionalMapper::class,
|
||||||
|
'table' => 'test_conditional',
|
||||||
|
'external' => 'test_conditional_base',
|
||||||
|
'column' => 'title',
|
||||||
|
'self' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
26
tests/DataStorage/Database/TestModel/Conditional.php
Normal file
26
tests/DataStorage/Database/TestModel/Conditional.php
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Orange Management
|
||||||
|
*
|
||||||
|
* PHP Version 7.4
|
||||||
|
*
|
||||||
|
* @package tests
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace phpOMS\tests\DataStorage\Database\TestModel;
|
||||||
|
|
||||||
|
class Conditional
|
||||||
|
{
|
||||||
|
public int $id = 0;
|
||||||
|
|
||||||
|
public int $base = 0;
|
||||||
|
|
||||||
|
public string $title = '';
|
||||||
|
|
||||||
|
public string $language = '';
|
||||||
|
}
|
||||||
57
tests/DataStorage/Database/TestModel/ConditionalMapper.php
Normal file
57
tests/DataStorage/Database/TestModel/ConditionalMapper.php
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Orange Management
|
||||||
|
*
|
||||||
|
* PHP Version 7.4
|
||||||
|
*
|
||||||
|
* @package Modules\Tag\Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace phpOMS\tests\DataStorage\Database\TestModel;
|
||||||
|
|
||||||
|
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tag mapper class.
|
||||||
|
*
|
||||||
|
* @package Modules\Tag\Models
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
final class ConditionalMapper extends DataMapperAbstract
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Columns.
|
||||||
|
*
|
||||||
|
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected static array $columns = [
|
||||||
|
'test_conditional_id' => ['name' => 'test_conditional_id', 'type' => 'int', 'internal' => 'id'],
|
||||||
|
'test_conditional_title' => ['name' => 'test_conditional_title', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true],
|
||||||
|
'test_conditional_base' => ['name' => 'test_conditional_base', 'type' => 'int', 'internal' => 'base'],
|
||||||
|
'test_conditional_language' => ['name' => 'test_conditional_language', 'type' => 'string', 'internal' => 'language'],
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary table.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected static string $table = 'test_conditional';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary field name.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected static string $primaryField = 'test_conditional_id';
|
||||||
|
}
|
||||||
|
|
@ -95,9 +95,24 @@ class AverageTest extends \PHPUnit\Framework\TestCase
|
||||||
63.94, 64.13, 64.50, 62.81, 61.88, 62.50, 61.44, 60.13, 61.31, 61.38,
|
63.94, 64.13, 64.50, 62.81, 61.88, 62.50, 61.44, 60.13, 61.31, 61.38,
|
||||||
];
|
];
|
||||||
|
|
||||||
$average = [66.39, 66.03, 65.79, 65.6, 65.24, 64.8, 64.46, 63.94, 63.3, 62.87, 62.4];
|
$average = [
|
||||||
|
66.626, 66.302, 66.328, 66.352, 66.19, 66.152, 65.764, 65.264, 64.852, 64.288, 63.452, 63.164, 62.626, 61.752, 61.452, 61.352
|
||||||
|
];
|
||||||
|
|
||||||
self::assertEqualsWithDelta($average, Average::totalMovingAverage($data, 10), 0.1);
|
self::assertEqualsWithDelta($average, Average::totalMovingAverage($data, 5), 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox The weighted moving average is correctly calculated
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testWeightedMovingAverage() : void
|
||||||
|
{
|
||||||
|
$data = [67.5, 66.5, 66.44, 66.44, 66.25, 65.88, 66.63];
|
||||||
|
$weights = [0.1, 0.2, 0.3, 0.1, 0.2, 0.05, 0.05];
|
||||||
|
$average = [39.982, 39.876, 39.826, 23.188, 19.876];
|
||||||
|
|
||||||
|
self::assertEqualsWithDelta($average, Average::totalMovingAverage($data, 3, $weights), 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,90 @@ class MetricsNDTest extends \PHPUnit\Framework\TestCase
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the manhattan metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidManhattanDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::manhattan([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the euclidean metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidEuclideanDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::euclidean([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the chebyshev metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidChebyshevDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::chebyshev([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the minkowski metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidMinkowskiDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::minkowski([3, 6, 4], [4, 6, 8, 3], 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the canberra metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidCanberraDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::canberra([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the Bray Curtis metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidBrayCurtisDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::brayCurtis([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Different dimension sizes for the coordinates in the angular separation metric throw a InvalidDimensionException
|
||||||
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testInvalidAngularSeparationDimension() : void
|
||||||
|
{
|
||||||
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
|
MetricsND::angularSeparation([3, 6, 4], [4, 6, 8, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Different dimension sizes for the coordinates in the hamming metric throw a InvalidDimensionException
|
* @testdox Different dimension sizes for the coordinates in the hamming metric throw a InvalidDimensionException
|
||||||
* @covers phpOMS\Math\Topology\MetricsND
|
* @covers phpOMS\Math\Topology\MetricsND
|
||||||
|
|
@ -142,6 +226,6 @@ class MetricsNDTest extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
self::expectException(\phpOMS\Math\Matrix\Exception\InvalidDimensionException::class);
|
||||||
|
|
||||||
Metrics2D::ulam([3, 6, 4], [4, 6, 8, 3]);
|
MetricsND::hamming([3, 6, 4], [4, 6, 8, 3]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ use phpOMS\System\MimeType;
|
||||||
use phpOMS\Uri\HttpUri;
|
use phpOMS\Uri\HttpUri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox phpOMS\tests\Message\Http\RequestTest: HttpRequest wrapper for http requests
|
* @testdox phpOMS\tests\Message\Http\HttpRequestTest: HttpRequest wrapper for http requests
|
||||||
*
|
*
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,16 @@ class ModuleAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
||||||
)->execute();
|
)->execute();
|
||||||
|
|
||||||
|
$GLOBALS['dbpool']->get()->con->prepare(
|
||||||
|
'CREATE TABLE `test_conditional` (
|
||||||
|
`test_conditional_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`test_conditional_title` varchar(254) NOT NULL,
|
||||||
|
`test_conditional_base` int(11) NOT NULL,
|
||||||
|
`test_conditional_language` varchar(254) NOT NULL,
|
||||||
|
PRIMARY KEY (`test_conditional_id`)
|
||||||
|
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;'
|
||||||
|
)->execute();
|
||||||
|
|
||||||
$GLOBALS['dbpool']->get()->con->prepare(
|
$GLOBALS['dbpool']->get()->con->prepare(
|
||||||
'CREATE TABLE `test_belongs_to_one` (
|
'CREATE TABLE `test_belongs_to_one` (
|
||||||
`test_belongs_to_one_id` int(11) NOT NULL AUTO_INCREMENT,
|
`test_belongs_to_one_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
|
@ -277,6 +287,7 @@ class ModuleAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
private function dbTeardown() : void
|
private function dbTeardown() : void
|
||||||
{
|
{
|
||||||
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_conditional')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_base')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_base')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_belongs_to_one')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_belongs_to_one')->execute();
|
||||||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_owns_one')->execute();
|
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE test_owns_one')->execute();
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,27 @@ require_once __DIR__ . '/../Autoloader.php';
|
||||||
*/
|
*/
|
||||||
class MbStringUtilsTest extends \PHPUnit\Framework\TestCase
|
class MbStringUtilsTest extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @testdox The entropy of a string can be calculated
|
||||||
|
* @covers phpOMS\Utils\StringUtils
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testEntropy() : void
|
||||||
|
{
|
||||||
|
self::assertEqualsWithDelta(2.75, MbStringUtils::mb_entropy('akj@!©¥j'), 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox A string can be checked for multi-byte characters
|
||||||
|
* @covers phpOMS\Utils\StringUtils
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testHasMultiBytes() : void
|
||||||
|
{
|
||||||
|
self::assertTrue(MbStringUtils::hasMultiBytes('akj@!¥aj'));
|
||||||
|
self::assertFalse(MbStringUtils::hasMultiBytes('akjc!aj'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox A multi-byte string can be checked if it starts with a defined string
|
* @testdox A multi-byte string can be checked if it starts with a defined string
|
||||||
* @covers phpOMS\Utils\MbStringUtils
|
* @covers phpOMS\Utils\MbStringUtils
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user