From 9a7fe5a5e857c87da30b3941200ae1851e89d687 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 16 Nov 2021 00:05:43 +0100 Subject: [PATCH] cs fixes, bug fixes, code coverage --- Controller/ApiController.php | 18 +- Controller/BackendController.php | 1 - Models/NullSupplierAttribute.php | 1 + Models/Supplier.php | 114 +++------ Models/SupplierAttribute.php | 18 +- Models/SupplierAttributeType.php | 43 +--- Models/SupplierAttributeTypeL11n.php | 31 +-- Models/SupplierAttributeValue.php | 36 ++- Models/SupplierStatus.php | 34 +++ Theme/Backend/supplier-list.tpl.php | 1 + Theme/Backend/supplier-profile.tpl.php | 2 +- .../Api/ApiControllerAttributeTrait.php | 221 ++++++++++++++++++ .../Api/ApiControllerSupplierTrait.php | 210 +++++++++++++++++ tests/Controller/Api/Test file.txt | 1 + tests/Controller/Api/m_icon.png | Bin 0 -> 94524 bytes tests/Controller/ApiControllerTest.php | 93 ++++++++ tests/Models/NullSupplierAttributeTest.php | 42 ++++ .../NullSupplierAttributeTypeL11nTest.php | 42 ++++ .../Models/NullSupplierAttributeTypeTest.php | 42 ++++ .../Models/NullSupplierAttributeValueTest.php | 42 ++++ tests/Models/SupplierAttributeTest.php | 63 +++++ .../Models/SupplierAttributeTypeL11nTest.php | 87 +++++++ tests/Models/SupplierAttributeTypeTest.php | 82 +++++++ tests/Models/SupplierAttributeValueTest.php | 133 +++++++++++ tests/Models/SupplierTest.php | 137 +++++++++++ 25 files changed, 1346 insertions(+), 148 deletions(-) create mode 100644 Models/SupplierStatus.php create mode 100644 tests/Controller/Api/ApiControllerAttributeTrait.php create mode 100644 tests/Controller/Api/ApiControllerSupplierTrait.php create mode 100644 tests/Controller/Api/Test file.txt create mode 100644 tests/Controller/Api/m_icon.png create mode 100644 tests/Controller/ApiControllerTest.php create mode 100644 tests/Models/NullSupplierAttributeTest.php create mode 100644 tests/Models/NullSupplierAttributeTypeL11nTest.php create mode 100644 tests/Models/NullSupplierAttributeTypeTest.php create mode 100644 tests/Models/NullSupplierAttributeValueTest.php create mode 100644 tests/Models/SupplierAttributeTest.php create mode 100644 tests/Models/SupplierAttributeTypeL11nTest.php create mode 100644 tests/Models/SupplierAttributeTypeTest.php create mode 100644 tests/Models/SupplierAttributeValueTest.php create mode 100644 tests/Models/SupplierTest.php diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 4bd91e0..e7b4ed4 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -32,6 +32,7 @@ use Modules\SupplierManagement\Models\SupplierAttributeTypeMapper; use Modules\SupplierManagement\Models\SupplierAttributeValue; use Modules\SupplierManagement\Models\SupplierAttributeValueMapper; use Modules\SupplierManagement\Models\SupplierMapper; +use phpOMS\Localization\ISO639x1Enum; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; @@ -269,8 +270,8 @@ final class ApiController extends Controller */ private function createSupplierAttributeTypeL11nFromRequest(RequestAbstract $request) : SupplierAttributeTypeL11n { - $attrL11n = new SupplierAttributeTypeL11n(); - $attrL11n->setType((int) ($request->getData('type') ?? 0)); + $attrL11n = new SupplierAttributeTypeL11n(); + $attrL11n->type = (int) ($request->getData('type') ?? 0); $attrL11n->setLanguage((string) ( $request->getData('language') ?? $request->getLanguage() )); @@ -323,7 +324,6 @@ final class ApiController extends Controller } $attrType = $this->createSupplierAttributeTypeFromRequest($request); - $attrType->setL11n($request->getData('title'), $request->getData('language')); $this->createModel($request->header->account, $attrType, SupplierAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); @@ -341,9 +341,9 @@ final class ApiController extends Controller private function createSupplierAttributeTypeFromRequest(RequestAbstract $request) : SupplierAttributeType { $attrType = new SupplierAttributeType(); - $attrType->setL11n((string) ($request->getData('name') ?? '')); - $attrType->setFields((int) ($request->getData('fields') ?? 0)); - $attrType->setCustom((bool) ($request->getData('custom') ?? false)); + $attrType->setL11n((string) ($request->getData('title') ?? ''), $request->getData('language') ?? ISO639x1Enum::_EN); + $attrType->fields = (int) ($request->getData('fields') ?? 0); + $attrType->custom = (bool) ($request->getData('custom') ?? false); return $attrType; } @@ -360,8 +360,7 @@ final class ApiController extends Controller private function validateSupplierAttributeTypeCreate(RequestAbstract $request) : array { $val = []; - if (($val['name'] = empty($request->getData('name'))) - || ($val['title'] = empty($request->getData('title'))) + if (($val['title'] = empty($request->getData('title'))) ) { return $val; } @@ -490,7 +489,8 @@ final class ApiController extends Controller } $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( - [$request->getData('name') ?? ''], + $request->getDataList('names') ?? [], + $request->getDataList('filenames') ?? [], $uploadedFiles, $request->header->account, __DIR__ . '/../../../Modules/Media/Files/Modules/SupplierManagement/' . ($request->getData('supplier') ?? '0'), diff --git a/Controller/BackendController.php b/Controller/BackendController.php index e3e1b47..4c26e6f 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -16,7 +16,6 @@ namespace Modules\SupplierManagement\Controller; use Modules\Billing\Models\BillTypeL11n; use Modules\Billing\Models\PurchaseBillMapper; -use Modules\Media\Models\Media; use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\Asset\AssetType; use phpOMS\Contract\RenderableInterface; diff --git a/Models/NullSupplierAttribute.php b/Models/NullSupplierAttribute.php index 8e18513..de5af51 100755 --- a/Models/NullSupplierAttribute.php +++ b/Models/NullSupplierAttribute.php @@ -33,6 +33,7 @@ final class NullSupplierAttribute extends SupplierAttribute */ public function __construct(int $id = 0) { + parent::__construct(); $this->id = $id; } } diff --git a/Models/Supplier.php b/Models/Supplier.php index 91f8072..44e7e65 100755 --- a/Models/Supplier.php +++ b/Models/Supplier.php @@ -18,7 +18,6 @@ use Modules\Admin\Models\Address; use Modules\Admin\Models\NullAddress; use Modules\Editor\Models\EditorDoc; use Modules\Media\Models\Media; -use Modules\Media\Models\NullMedia; use Modules\Profile\Models\ContactElement; use Modules\Profile\Models\NullContactElement; use Modules\Profile\Models\Profile; @@ -43,15 +42,15 @@ class Supplier public string $number = ''; - private string $numberReverse = ''; + public string $numberReverse = ''; - private int $status = 0; + private int $status = SupplierStatus::ACTIVE; private int $type = 0; public string $info = ''; - private \DateTimeImmutable $createdAt; + public \DateTimeImmutable $createdAt; public Profile $profile; @@ -79,6 +78,8 @@ class Supplier public Address $mainAddress; + private array $partners = []; + /** * Constructor. * @@ -103,36 +104,6 @@ class Supplier return $this->id; } - /** - * Get reverse number. - * - * @return string - * - * @since 1.0.0 - */ - public function getReverseNumber() : string - { - return $this->numberReverse; - } - - /** - * Set revers number. - * - * @param string $numberReverse Reverse number - * - * @return void - * - * @since 1.0.0 - */ - public function setReverseNumber(string $numberReverse) : void - { - if (!\is_scalar($numberReverse)) { - throw new \Exception(); - } - - $this->numberReverse = $numberReverse; - } - /** * Get status. * @@ -185,32 +156,6 @@ class Supplier $this->type = $type; } - /** - * Get info. - * - * @return string - * - * @since 1.0.0 - */ - public function getInfo() : string - { - return $this->info; - } - - /** - * Set info. - * - * @param string $info Info - * - * @return void - * - * @since 1.0.0 - */ - public function setInfo(string $info) : void - { - $this->info = $info; - } - /** * Add doc to item * @@ -299,7 +244,7 @@ class Supplier */ private function orderContactElements(ContactElement $a, ContactElement $b) : int { - return $a->getOrder() <=> $b->getOrder(); + return $a->order <=> $b->order; } /** @@ -338,36 +283,16 @@ class Supplier $this->contactElements[] = $element; } - /** - * Get media file by type - * - * @param string $type Media type - * - * @return Media - * - * @since 1.0.0 - */ - public function getFileByType(string $type) : Media - { - foreach ($this->files as $file) { - if ($file->type === $type) { - return $file; - } - } - - return new NullMedia(); - } - /** * Get all media files by type * - * @param string $type Media type + * @param null|int $type Media type * * @return Media[] * * @since 1.0.0 */ - public function getFilesByType(string $type) : array + public function getFilesByType(int $type = null) : array { $files = []; foreach ($this->files as $file) { @@ -378,4 +303,27 @@ class Supplier return $files; } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + 'number' => $this->number, + 'numberReverse' => $this->numberReverse, + 'status' => $this->status, + 'type' => $this->type, + 'info' => $this->info, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() + { + return $this->toArray(); + } } diff --git a/Models/SupplierAttribute.php b/Models/SupplierAttribute.php index 8455a5c..b4e7e4f 100755 --- a/Models/SupplierAttribute.php +++ b/Models/SupplierAttribute.php @@ -58,6 +58,17 @@ class SupplierAttribute implements \JsonSerializable, ArrayableInterface */ public SupplierAttributeValue $value; + /** + * Constructor. + * + * @since 1.0.0 + */ + public function __construct() + { + $this->type = new SupplierAttributeType(); + $this->value = new SupplierAttributeValue(); + } + /** * Get id * @@ -75,7 +86,12 @@ class SupplierAttribute implements \JsonSerializable, ArrayableInterface */ public function toArray() : array { - return []; + return [ + 'id' => $this->id, + 'supplier' => $this->supplier, + 'type' => $this->type, + 'value' => $this->value, + ]; } /** diff --git a/Models/SupplierAttributeType.php b/Models/SupplierAttributeType.php index 95091a5..fe80c14 100755 --- a/Models/SupplierAttributeType.php +++ b/Models/SupplierAttributeType.php @@ -41,7 +41,7 @@ class SupplierAttributeType implements \JsonSerializable, ArrayableInterface * @var string * @since 1.0.0 */ - protected string $name = ''; // @todo: currently not filled, should be used as identifier or if not required removed (at the moment it seems like it is useless?!) + public string $name = ''; // @todo: currently not filled, should be used as identifier or if not required removed (at the moment it seems like it is useless?!) /** * Which field data type is required (string, int, ...) in the value @@ -49,7 +49,7 @@ class SupplierAttributeType implements \JsonSerializable, ArrayableInterface * @var int * @since 1.0.0 */ - protected int $fields = 0; + public int $fields = 0; /** * Is a custom value allowed (e.g. custom string) @@ -57,7 +57,7 @@ class SupplierAttributeType implements \JsonSerializable, ArrayableInterface * @var bool * @since 1.0.0 */ - protected bool $custom = false; + public bool $custom = false; public string $validationPattern = ''; @@ -134,40 +134,19 @@ class SupplierAttributeType implements \JsonSerializable, ArrayableInterface return $this->l11n instanceof SupplierAttributeTypeL11n ? $this->l11n->title : $this->l11n; } - /** - * Set fields - * - * @param int $fields Fields - * - * @return void - * - * @since 1.0.0 - */ - public function setFields(int $fields) : void - { - $this->fields = $fields; - } - - /** - * Set custom - * - * @param bool $custom FieldsCustom - * - * @return void - * - * @since 1.0.0 - */ - public function setCustom(bool $custom) : void - { - $this->custom = $custom; - } - /** * {@inheritdoc} */ public function toArray() : array { - return []; + return [ + 'id' => $this->id, + 'name' => $this->name, + 'fields' => $this->fields, + 'custom' => $this->custom, + 'validationPattern' => $this->validationPattern, + 'isRequired' => $this->isRequired, + ]; } /** diff --git a/Models/SupplierAttributeTypeL11n.php b/Models/SupplierAttributeTypeL11n.php index 40e8e5f..1c58b1f 100755 --- a/Models/SupplierAttributeTypeL11n.php +++ b/Models/SupplierAttributeTypeL11n.php @@ -41,7 +41,7 @@ class SupplierAttributeTypeL11n implements \JsonSerializable, ArrayableInterface * @var int|SupplierAttributeType * @since 1.0.0 */ - protected int | SupplierAttributeType $type = 0; + public int | SupplierAttributeType $type = 0; /** * Language. @@ -88,29 +88,15 @@ class SupplierAttributeTypeL11n implements \JsonSerializable, ArrayableInterface } /** - * Get attribute type + * Get language * - * @return int|SupplierAttributeType + * @return string * * @since 1.0.0 */ - public function getType() + public function getLanguage() : string { - return $this->type; - } - - /** - * Set type. - * - * @param int $type Type id - * - * @return void - * - * @since 1.0.0 - */ - public function setType(int $type) : void - { - $this->type = $type; + return $this->language; } /** @@ -132,7 +118,12 @@ class SupplierAttributeTypeL11n implements \JsonSerializable, ArrayableInterface */ public function toArray() : array { - return []; + return [ + 'id' => $this->id, + 'title' => $this->title, + 'type' => $this->type, + 'language' => $this->language, + ]; } /** diff --git a/Models/SupplierAttributeValue.php b/Models/SupplierAttributeValue.php index a43332a..ee134bb 100755 --- a/Models/SupplierAttributeValue.php +++ b/Models/SupplierAttributeValue.php @@ -189,6 +189,18 @@ class SupplierAttributeValue implements \JsonSerializable, ArrayableInterface $this->language = $language; } + /** + * Get language + * + * @return string + * + * @since 1.0.0 + */ + public function getLanguage() : string + { + return $this->language; + } + /** * Set country * @@ -203,12 +215,34 @@ class SupplierAttributeValue implements \JsonSerializable, ArrayableInterface $this->country = $country; } + /** + * Get country + * + * @return string + * + * @since 1.0.0 + */ + public function getCountry() : string + { + return $this->country; + } + /** * {@inheritdoc} */ public function toArray() : array { - return []; + return [ + 'id' => $this->id, + 'type' => $this->type, + 'valueInt' => $this->valueInt, + 'valueStr' => $this->valueStr, + 'valueDec' => $this->valueDec, + 'valueDat' => $this->valueDat, + 'isDefault' => $this->isDefault, + 'language' => $this->language, + 'country' => $this->country, + ]; } /** diff --git a/Models/SupplierStatus.php b/Models/SupplierStatus.php new file mode 100644 index 0000000..dd20f57 --- /dev/null +++ b/Models/SupplierStatus.php @@ -0,0 +1,34 @@ +getData('nav')->render();
- +
diff --git a/tests/Controller/Api/ApiControllerAttributeTrait.php b/tests/Controller/Api/ApiControllerAttributeTrait.php new file mode 100644 index 0000000..299dbdb --- /dev/null +++ b/tests/Controller/Api/ApiControllerAttributeTrait.php @@ -0,0 +1,221 @@ +header->account = 1; + $request->setData('title', 'EN:1'); + $request->setData('language', ISO639x1Enum::_EN); + + $this->module->apiSupplierAttributeTypeCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeTypeL11nCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', 'DE:2'); + $request->setData('type', '1'); + $request->setData('language', ISO639x1Enum::_DE); + + $this->module->apiSupplierAttributeTypeL11nCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeValueIntCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('default', '1'); + $request->setData('attributetype', '1'); + $request->setData('type', AttributeValueType::_INT); + $request->setData('value', '1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->module->apiSupplierAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeValueStrCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', AttributeValueType::_STRING); + $request->setData('value', '1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->module->apiSupplierAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeValueFloatCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', AttributeValueType::_FLOAT); + $request->setData('value', '1.1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->module->apiSupplierAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeValueDatCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', AttributeValueType::_DATETIME); + $request->setData('value', '2020-08-02'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->module->apiSupplierAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('supplier', '1'); + $request->setData('value', '1'); + $request->setData('type', '1'); + + $this->module->apiSupplierAttributeCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeValueCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiSupplierAttributeValueCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeTypeCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiSupplierAttributeTypeCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeTypeL11nCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiSupplierAttributeTypeL11nCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierAttributeCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiSupplierAttributeCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } +} diff --git a/tests/Controller/Api/ApiControllerSupplierTrait.php b/tests/Controller/Api/ApiControllerSupplierTrait.php new file mode 100644 index 0000000..82608de --- /dev/null +++ b/tests/Controller/Api/ApiControllerSupplierTrait.php @@ -0,0 +1,210 @@ +header->account = 1; + $request->setData('number', '123456'); + $request->setData('name1', 'Name1'); + $request->setData('name2', 'Name2'); + $request->setData('info', 'Info text'); + $request->setData('address', 'Address'); + $request->setData('postal', 'Postal'); + $request->setData('city', 'City'); + $request->setData('country', ISO3166TwoEnum::_USA); + + $this->module->apiSupplierCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierContactElementCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('account', '1'); // supplier id in this case + $request->setData('type', ContactType::EMAIL); + $request->setData('content', 'email@email.com'); + + $this->module->apiContactElementCreate($request, $response); + + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierContactElementCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiContactElementCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiSupplierCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierProfileImageCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + \copy(__DIR__ . '/m_icon.png', __DIR__ . '/m_icon_tmp.png'); + + $request->header->account = 1; + $request->setData('name', '123456 backend'); + $request->setData('supplier', 1); + $request->setData('type', 'backend_image'); + + TestUtils::setMember($request, 'files', [ + 'file1' => [ + 'name' => '123456.png', + 'type' => MimeType::M_PNG, + 'tmp_name' => __DIR__ . '/m_icon_tmp.png', + 'error' => \UPLOAD_ERR_OK, + 'size' => \filesize(__DIR__ . '/m_icon_tmp.png'), + ], + ]); + + $this->module->apiFileCreate($request, $response); + $file = $response->get('')['response']; + self::assertGreaterThan(0, \reset($file)->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierFileCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + \copy(__DIR__ . '/Test file.txt', __DIR__ . '/Test file_tmp.txt'); + + $request->header->account = 1; + $request->setData('name', 'test file backend'); + $request->setData('supplier', 1); + + TestUtils::setMember($request, 'files', [ + 'file1' => [ + 'name' => 'Test file.txt', + 'type' => MimeType::M_TXT, + 'tmp_name' => __DIR__ . '/Test file_tmp.txt', + 'error' => \UPLOAD_ERR_OK, + 'size' => \filesize(__DIR__ . '/Test file_tmp.txt'), + ], + ]); + + $this->module->apiFileCreate($request, $response); + $file = $response->get('')['response']; + self::assertGreaterThan(0, \reset($file)->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiSupplierNoteCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + + $MARKDOWN = "# Test Title\n\nThis is **some** text."; + + $request->setData('id', 1); + $request->setData('title', \trim(\strtok($MARKDOWN, "\n"), ' #')); + $request->setData('plain', \preg_replace('/^.+\n/', '', $MARKDOWN)); + + $this->module->apiNoteCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\SupplierManagement\Controller\ApiController + * @group module + */ + public function testApiFileCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiFileCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } +} diff --git a/tests/Controller/Api/Test file.txt b/tests/Controller/Api/Test file.txt new file mode 100644 index 0000000..bdf08de --- /dev/null +++ b/tests/Controller/Api/Test file.txt @@ -0,0 +1 @@ +test file \ No newline at end of file diff --git a/tests/Controller/Api/m_icon.png b/tests/Controller/Api/m_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..587d4f9f1a75f6dcf41574b048b7e251c11d5ba3 GIT binary patch literal 94524 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 literal 0 HcmV?d00001 diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php new file mode 100644 index 0000000..c2e9b49 --- /dev/null +++ b/tests/Controller/ApiControllerTest.php @@ -0,0 +1,93 @@ +app = new class() extends ApplicationAbstract + { + protected string $appName = 'Api'; + }; + + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->orgId = 1; + $this->app->accountManager = new AccountManager($GLOBALS['session']); + $this->app->appSettings = new CoreSettings(); + $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules/'); + $this->app->dispatcher = new Dispatcher($this->app); + $this->app->eventManager = new EventManager($this->app->dispatcher); + $this->app->eventManager->importFromFile(__DIR__ . '/../../../../Web/Api/Hooks.php'); + $this->app->sessionManager = new HttpSession(36000); + + $account = new Account(); + TestUtils::setMember($account, 'id', 1); + + $permission = new AccountPermission(); + $permission->setUnit(1); + $permission->setApp('backend'); + $permission->setPermission( + PermissionType::READ + | PermissionType::CREATE + | PermissionType::MODIFY + | PermissionType::DELETE + | PermissionType::PERMISSION + ); + + $account->addPermission($permission); + + $this->app->accountManager->add($account); + $this->app->router = new WebRouter(); + + $this->module = $this->app->moduleManager->get('SupplierManagement'); + + TestUtils::setMember($this->module, 'app', $this->app); + } + + use ApiControllerSupplierTrait; + use ApiControllerAttributeTrait; +} diff --git a/tests/Models/NullSupplierAttributeTest.php b/tests/Models/NullSupplierAttributeTest.php new file mode 100644 index 0000000..d01c97b --- /dev/null +++ b/tests/Models/NullSupplierAttributeTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullSupplierAttributeTypeL11nTest.php b/tests/Models/NullSupplierAttributeTypeL11nTest.php new file mode 100644 index 0000000..566d51d --- /dev/null +++ b/tests/Models/NullSupplierAttributeTypeL11nTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullSupplierAttributeTypeTest.php b/tests/Models/NullSupplierAttributeTypeTest.php new file mode 100644 index 0000000..bca6b8f --- /dev/null +++ b/tests/Models/NullSupplierAttributeTypeTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullSupplierAttributeValueTest.php b/tests/Models/NullSupplierAttributeValueTest.php new file mode 100644 index 0000000..c64ccd2 --- /dev/null +++ b/tests/Models/NullSupplierAttributeValueTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/SupplierAttributeTest.php b/tests/Models/SupplierAttributeTest.php new file mode 100644 index 0000000..bdd84ff --- /dev/null +++ b/tests/Models/SupplierAttributeTest.php @@ -0,0 +1,63 @@ +attribute = new SupplierAttribute(); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttribute + * @group module + */ + public function testDefault() : void + { + self::assertEquals(0, $this->attribute->getId()); + self::assertInstanceOf('\Modules\SupplierManagement\Models\SupplierAttributeType', $this->attribute->type); + self::assertInstanceOf('\Modules\SupplierManagement\Models\SupplierAttributeValue', $this->attribute->value); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttribute + * @group module + */ + public function testSerialize() : void + { + $serialized = $this->attribute->jsonSerialize(); + + self::assertEquals( + [ + 'id', + 'supplier', + 'type', + 'value', + ], + \array_keys($serialized) + ); + } +} diff --git a/tests/Models/SupplierAttributeTypeL11nTest.php b/tests/Models/SupplierAttributeTypeL11nTest.php new file mode 100644 index 0000000..771d557 --- /dev/null +++ b/tests/Models/SupplierAttributeTypeL11nTest.php @@ -0,0 +1,87 @@ +l11n = new SupplierAttributeTypeL11n(); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeTypeL11n + * @group module + */ + public function testDefault() : void + { + self::assertEquals(0, $this->l11n->getId()); + self::assertEquals('', $this->l11n->title); + self::assertEquals(0, $this->l11n->type); + self::assertEquals(ISO639x1Enum::_EN, $this->l11n->getLanguage()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeTypeL11n + * @group module + */ + public function testNameInputOutput() : void + { + $this->l11n->title = 'TestName'; + self::assertEquals('TestName', $this->l11n->title); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeTypeL11n + * @group module + */ + public function testLanguageInputOutput() : void + { + $this->l11n->setLanguage(ISO639x1Enum::_DE); + self::assertEquals(ISO639x1Enum::_DE, $this->l11n->getLanguage()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeTypeL11n + * @group module + */ + public function testSerialize() : void + { + $this->l11n->title = 'Title'; + $this->l11n->type = 2; + $this->l11n->setLanguage(ISO639x1Enum::_DE); + + self::assertEquals( + [ + 'id' => 0, + 'title' => 'Title', + 'type' => 2, + 'language' => ISO639x1Enum::_DE, + ], + $this->l11n->jsonSerialize() + ); + } +} diff --git a/tests/Models/SupplierAttributeTypeTest.php b/tests/Models/SupplierAttributeTypeTest.php new file mode 100644 index 0000000..bf44fb7 --- /dev/null +++ b/tests/Models/SupplierAttributeTypeTest.php @@ -0,0 +1,82 @@ +type = new SupplierAttributeType(); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeType + * @group module + */ + public function testDefault() : void + { + self::assertEquals(0, $this->type->getId()); + self::assertEquals('', $this->type->getL11n()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeType + * @group module + */ + public function testL11nInputOutput() : void + { + $this->type->setL11n('Test'); + self::assertEquals('Test', $this->type->getL11n()); + + $this->type->setL11n(new SupplierAttributeTypeL11n(0, 'NewTest')); + self::assertEquals('NewTest', $this->type->getL11n()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeType + * @group module + */ + public function testSerialize() : void + { + $this->type->name = 'Title'; + $this->type->fields = 2; + $this->type->custom = true; + $this->type->validationPattern = '\d*'; + $this->type->isRequired = true; + + self::assertEquals( + [ + 'id' => 0, + 'name' => 'Title', + 'fields' => 2, + 'custom' => true, + 'validationPattern' => '\d*', + 'isRequired' => true, + ], + $this->type->jsonSerialize() + ); + } +} diff --git a/tests/Models/SupplierAttributeValueTest.php b/tests/Models/SupplierAttributeValueTest.php new file mode 100644 index 0000000..488f5da --- /dev/null +++ b/tests/Models/SupplierAttributeValueTest.php @@ -0,0 +1,133 @@ +value = new SupplierAttributeValue(); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testDefault() : void + { + self::assertEquals(0, $this->value->getId()); + self::assertNull($this->value->getValue()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testLanguageInputOutput() : void + { + $this->value->setLanguage(ISO639x1Enum::_DE); + self::assertEquals(ISO639x1Enum::_DE, $this->value->getLanguage()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testCountryInputOutput() : void + { + $this->value->setCountry(ISO3166TwoEnum::_DEU); + self::assertEquals(ISO3166TwoEnum::_DEU, $this->value->getCountry()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testValueIntInputOutput() : void + { + $this->value->setValue(1); + self::assertEquals(1, $this->value->getValue()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testValueFloatInputOutput() : void + { + $this->value->setValue(1.1); + self::assertEquals(1.1, $this->value->getValue()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testValueStringInputOutput() : void + { + $this->value->setValue('test'); + self::assertEquals('test', $this->value->getValue()); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testValueDateInputOutput() : void + { + $this->value->setValue($dat = new \DateTime('now')); + self::assertEquals($dat->format('Y-m-d'), $this->value->getValue()->format('Y-m-d')); + } + + /** + * @covers Modules\SupplierManagement\Models\SupplierAttributeValue + * @group module + */ + public function testSerialize() : void + { + $this->value->type = 1; + $this->value->setValue('test'); + $this->value->isDefault = true; + $this->value->setLanguage(ISO639x1Enum::_DE); + $this->value->setCountry(ISO3166TwoEnum::_DEU); + + self::assertEquals( + [ + 'id' => 0, + 'type' => 1, + 'valueInt' => null, + 'valueStr' => 'test', + 'valueDec' => null, + 'valueDat' => null, + 'isDefault' => true, + 'language' => ISO639x1Enum::_DE, + 'country' => ISO3166TwoEnum::_DEU, + ], + $this->value->jsonSerialize() + ); + } +} diff --git a/tests/Models/SupplierTest.php b/tests/Models/SupplierTest.php new file mode 100644 index 0000000..51000bc --- /dev/null +++ b/tests/Models/SupplierTest.php @@ -0,0 +1,137 @@ +supplier = new Supplier(); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testDefault() : void + { + self::assertEquals(0, $this->supplier->getId()); + self::assertEquals('', $this->supplier->number); + self::assertEquals('', $this->supplier->numberReverse); + self::assertEquals('', $this->supplier->info); + self::assertEquals(SupplierStatus::ACTIVE, $this->supplier->getStatus()); + self::assertEquals(0, $this->supplier->getType()); + self::assertEquals([], $this->supplier->getNotes()); + self::assertEquals([], $this->supplier->getFiles()); + self::assertEquals([], $this->supplier->getAddresses()); + self::assertEquals([], $this->supplier->getContactElements()); + self::assertEquals([], $this->supplier->getFilesByType(0)); + self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->supplier->createdAt->format('Y-m-d')); + self::assertInstanceOf('\Modules\Profile\Models\Profile', $this->supplier->profile); + self::assertInstanceOf('\Modules\Admin\Models\Address', $this->supplier->mainAddress); + self::assertInstanceOf('\Modules\Profile\Models\NullContactElement', $this->supplier->getMainContactElement(0)); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testStatusInputOutput() : void + { + $this->supplier->setStatus(SupplierStatus::INACTIVE); + self::assertEquals(SupplierStatus::INACTIVE, $this->supplier->getStatus()); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testTypeInputOutput() : void + { + $this->supplier->setType(2); + self::assertEquals(2, $this->supplier->getType()); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testFileInputOutput() : void + { + $this->supplier->addFile($temp = new Media()); + self::assertCount(1, $this->supplier->getFiles()); + self::assertEquals([$temp], $this->supplier->getFilesByType()); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testContactElementInputOutput() : void + { + $this->supplier->addContactElement($temp = new ContactElement()); + self::assertCount(1, $this->supplier->getContactElements()); + self::assertEquals($temp, $this->supplier->getMainContactElement(0)); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testNoteInputOutput() : void + { + $this->supplier->addNote(new EditorDoc()); + self::assertCount(1, $this->supplier->getNotes()); + } + + /** + * @covers Modules\SupplierManagement\Models\Supplier + * @group module + */ + public function testSerialize() : void + { + $this->supplier->number = '123456'; + $this->supplier->numberReverse = '654321'; + $this->supplier->setStatus(SupplierStatus::INACTIVE); + $this->supplier->setType(2); + $this->supplier->info = 'Test info'; + + self::assertEquals( + [ + 'id' => 0, + 'number' => '123456', + 'numberReverse' => '654321', + 'status' => SupplierStatus::INACTIVE, + 'type' => 2, + 'info' => 'Test info', + ], + $this->supplier->jsonSerialize() + ); + } +}