diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 28ba7ae..b2fda12 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -234,8 +234,10 @@ final class ApiController extends Controller public function apiUnitImageSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $uploadedFiles = $request->getFiles() ?? []; - if (empty($uploadedFiles)) { + $this->fillJsonResponse($request, $response, NotificationLevel::ERROR, 'Unit', 'Invalid unit image', $uploadedFiles); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + return; } @@ -254,7 +256,7 @@ final class ApiController extends Controller $unit->setImage(\reset($uploaded)); $this->updateModel($request->getHeader()->getAccount(), $old, $unit, UnitMapper::class, 'unit', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Unit', 'Unit successfully updated', $unit); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Unit', 'Unit image successfully updated', $unit); } /** diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 6f789c8..c7cef24 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -143,6 +143,7 @@ final class BackendController extends Controller * @return array * * @since 1.0.0 + * @codeCoverageIgnore */ private function createOrgTree(array $components) : array { diff --git a/Models/Department.php b/Models/Department.php index de23f5b..fa0a98e 100755 --- a/Models/Department.php +++ b/Models/Department.php @@ -268,25 +268,16 @@ class Department implements \JsonSerializable, ArrayableInterface public function toArray() : array { return [ - 'id' => $this->id, - 'name' => $this->name, - 'description' => $this->description, - 'unit' => $this->unit ?? new NullUnit(), + 'id' => $this->id, + 'name' => $this->name, + 'status' => $this->status, + 'description' => $this->description, + 'descriptionRaw' => $this->descriptionRaw, + 'unit' => $this->unit ?? new NullUnit(), + 'parent' => $this->parent ?? new NullDepartment(), ]; } - /** - * Get string representation. - * - * @return string - * - * @since 1.0.0 - */ - public function __toString() - { - return (string) \json_encode($this->toArray()); - } - /** * {@inheritdoc} */ diff --git a/Models/Position.php b/Models/Position.php index d21cead..2d4ac78 100755 --- a/Models/Position.php +++ b/Models/Position.php @@ -256,11 +256,13 @@ class Position implements \JsonSerializable, ArrayableInterface public function toArray() : array { return [ - 'id' => $this->id, - 'name' => $this->name, - 'description' => $this->description, - 'department' => $this->department ?? new NullDepartment(), - 'parent' => $this->parent, + 'id' => $this->id, + 'name' => $this->name, + 'status' => $this->status, + 'description' => $this->description, + 'descriptionRaw' => $this->descriptionRaw, + 'department' => $this->department ?? new NullDepartment(), + 'parent' => $this->parent ?? new NullPosition(), ]; } diff --git a/Models/Unit.php b/Models/Unit.php index fb0681f..b492403 100755 --- a/Models/Unit.php +++ b/Models/Unit.php @@ -268,10 +268,13 @@ class Unit implements \JsonSerializable, ArrayableInterface public function toArray() : array { return [ - 'id' => $this->id, - 'name' => $this->name, - 'description' => $this->description, - 'parent' => $this->parent, + 'id' => $this->id, + 'name' => $this->name, + 'status' => $this->status, + 'description' => $this->description, + 'descriptionRaw' => $this->descriptionRaw, + 'parent' => $this->parent ?? new NullUnit(), + 'image' => $this->image, ]; } diff --git a/tests/ControllerTest.php b/tests/Controller/ApiControllerTest.php similarity index 66% rename from tests/ControllerTest.php rename to tests/Controller/ApiControllerTest.php index 686b3ba..b8d48f6 100755 --- a/tests/ControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -12,11 +12,12 @@ */ declare(strict_types=1); -namespace Modules\Organization\tests; +namespace Modules\Organization\tests\Controller; use Model\CoreSettings; use Modules\Admin\Models\AccountPermission; use Modules\Organization\Models\Status; +use Modules\Organization\Models\UnitMapper; use phpOMS\Account\Account; use phpOMS\Account\AccountManager; use phpOMS\Account\PermissionType; @@ -29,11 +30,13 @@ use phpOMS\Module\ModuleManager; use phpOMS\Router\WebRouter; use phpOMS\Uri\HttpUri; use phpOMS\Utils\TestUtils; +use phpOMS\Message\Http\RequestStatusCode; +use phpOMS\System\MimeType; /** * @internal */ -class ControllerTest extends \PHPUnit\Framework\TestCase +class ApiControllerTest extends \PHPUnit\Framework\TestCase { protected $app = null; @@ -48,7 +51,6 @@ class ControllerTest extends \PHPUnit\Framework\TestCase $this->app->dbPool = $GLOBALS['dbpool']; $this->app->orgId = 1; - $this->app->appName = 'Backend'; $this->app->accountManager = new AccountManager($GLOBALS['session']); $this->app->appSettings = new CoreSettings($this->app->dbPool->get()); $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../Modules'); @@ -117,6 +119,24 @@ class ControllerTest extends \PHPUnit\Framework\TestCase self::assertEquals('OMS', $response->get('')['response']->getName()); } + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiUnitFind() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('search', 'OMS'); + + $this->module->apiUnitFind($request, $response); + + self::assertEquals('OMS', $response->get('')[0]->getName()); + self::assertGreaterThan(0, $response->get('')[0]->getId()); + } + /** * @covers Modules\Organization\Controller\ApiController * @group module @@ -143,6 +163,22 @@ class ControllerTest extends \PHPUnit\Framework\TestCase self::assertGreaterThan(0, $response->get('')['response']->getId()); } + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiUnitCreateInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + + $this->module->apiUnitCreate($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } + protected static $departmentId = 0; /** @@ -168,6 +204,40 @@ class ControllerTest extends \PHPUnit\Framework\TestCase self::$departmentId = $response->get('')['response']->getId(); } + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiDepartmentFind() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('search', 'test'); + + $this->module->apiDepartmentFind($request, $response); + + self::assertEquals('test', $response->get('')[0]->getName()); + self::assertGreaterThan(0, $response->get('')[0]->getId()); + } + + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiDepartmentCreateInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + + $this->module->apiDepartmentCreate($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } + /** * @covers Modules\Organization\Controller\ApiController * @group module @@ -244,6 +314,40 @@ class ControllerTest extends \PHPUnit\Framework\TestCase self::$positionId = $response->get('')['response']->getId(); } + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiPositionFind() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('search', 'test'); + + $this->module->apiPositionFind($request, $response); + + self::assertEquals('test', $response->get('')[0]->getName()); + self::assertGreaterThan(0, $response->get('')[0]->getId()); + } + + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiPositionCreateInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + + $this->module->apiPositionCreate($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } + /** * @covers Modules\Organization\Controller\ApiController * @group module @@ -296,4 +400,48 @@ class ControllerTest extends \PHPUnit\Framework\TestCase self::assertGreaterThan(0, $response->get('')['response']->getId()); } + + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiUnitImageSet() : void + { + \copy(__DIR__ . '/icon.png', __DIR__ . '/temp_icon.png'); + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('name', 'Organization Logo'); + $request->setData('id', 1); + + TestUtils::setMember($request, 'files', [ + 'file1' => [ + 'name' => 'icon.png', + 'type' => MimeType::M_PNG, + 'tmp_name' => __DIR__ . '/temp_icon.png', + 'error' => \UPLOAD_ERR_OK, + 'size' => \filesize(__DIR__ . '/icon.png'), + ], + ]); + $this->module->apiUnitImageSet($request, $response); + + $image = UnitMapper::get(1)->getImage(); + self::assertEquals('Organization Logo', $image->getName()); + } + + /** + * @covers Modules\Organization\Controller\ApiController + * @group module + */ + public function testApiUnitImageSetInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $this->module->apiUnitImageSet($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } } diff --git a/tests/Controller/icon.png b/tests/Controller/icon.png new file mode 100644 index 0000000..587d4f9 Binary files /dev/null and b/tests/Controller/icon.png differ diff --git a/tests/Models/DepartmentTest.php b/tests/Models/DepartmentTest.php index 5ebb4e6..2ae8097 100755 --- a/tests/Models/DepartmentTest.php +++ b/tests/Models/DepartmentTest.php @@ -24,43 +24,113 @@ use Modules\Organization\Models\Status; */ class DepartmentTest extends \PHPUnit\Framework\TestCase { + private Department $department; + + public function setUp() : void + { + $this->department = new Department(); + } + /** * @covers Modules\Organization\Models\Department * @group module */ public function testDefault() : void { - $department = new Department(); - - self::assertEquals(0, $department->getId()); - self::assertEquals('', $department->getName()); - self::assertEquals('', $department->getDescription()); - self::assertInstanceOf('Modules\Organization\Models\NullDepartment', $department->getParent()); - self::assertEquals(0, $department->getUnit()->getId()); - self::assertEquals(Status::INACTIVE, $department->getStatus()); + self::assertEquals(0, $this->department->getId()); + self::assertEquals('', $this->department->getName()); + self::assertEquals('', $this->department->getDescription()); + self::assertEquals('', $this->department->getDescriptionRaw()); + self::assertInstanceOf(NullDepartment::class, $this->department->getParent()); + self::assertEquals(0, $this->department->getUnit()->getId()); + self::assertEquals(Status::INACTIVE, $this->department->getStatus()); } /** * @covers Modules\Organization\Models\Department * @group module */ - public function testSetGet() : void + public function testNameInputOutput() : void { - $department = new Department(); + $this->department->setName('Name'); + self::assertEquals('Name', $this->department->getName()); + } - $department->setName('Name'); - self::assertEquals('Name', $department->getName()); + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testDescriptionInputOutput() : void + { + $this->department->setDescription('Description'); + self::assertEquals('Description', $this->department->getDescription()); + } - $department->setStatus(Status::ACTIVE); - self::assertEquals(Status::ACTIVE, $department->getStatus()); + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testDescriptionRawInputOutput() : void + { + $this->department->setDescriptionRaw('DescriptionRaw'); + self::assertEquals('DescriptionRaw', $this->department->getDescriptionRaw()); + } - $department->setDescription('Description'); - self::assertEquals('Description', $department->getDescription()); + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testStatusInputOutput() : void + { + $this->department->setStatus(Status::ACTIVE); + self::assertEquals(Status::ACTIVE, $this->department->getStatus()); + } - $department->setParent(new NullDepartment(1)); - self::assertEquals(1, $department->getParent()->getId()); + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testParentInputOutput() : void + { + $this->department->setParent(new NullDepartment(1)); + self::assertEquals(1, $this->department->getParent()->getId()); + } - $department->setUnit(new NullUnit(1)); - self::assertEquals(1, $department->getUnit()->getId()); + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testUnitInputOutput() : void + { + $this->department->setUnit(new NullUnit(1)); + self::assertEquals(1, $this->department->getUnit()->getId()); + } + + /** + * @covers Modules\Organization\Models\Department + * @group module + */ + public function testSerialize() : void + { + $this->department->setName('Name'); + $this->department->setDescription('Description'); + $this->department->setDescriptionRaw('DescriptionRaw'); + $this->department->setStatus(Status::ACTIVE); + $this->department->setParent($p = new NullDepartment(1)); + $this->department->setUnit($u = new NullUnit(1)); + + self::assertEquals($this->department->toArray(), $this->department->jsonSerialize()); + self::assertEquals( + [ + 'id' => 0, + 'name' => 'Name', + 'status' => Status::ACTIVE, + 'description' => 'Description', + 'descriptionRaw' => 'DescriptionRaw', + 'parent' => $p, + 'unit' => $u, + ], + $this->department->toArray() + ); } } diff --git a/tests/Models/NullDepartmentTest.php b/tests/Models/NullDepartmentTest.php new file mode 100644 index 0000000..b3e1449 --- /dev/null +++ b/tests/Models/NullDepartmentTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullPositionTest.php b/tests/Models/NullPositionTest.php new file mode 100644 index 0000000..c4f5cca --- /dev/null +++ b/tests/Models/NullPositionTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/NullUnitTest.php b/tests/Models/NullUnitTest.php new file mode 100644 index 0000000..b457c84 --- /dev/null +++ b/tests/Models/NullUnitTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/PositionTest.php b/tests/Models/PositionTest.php index 2ad702e..d52e6e1 100755 --- a/tests/Models/PositionTest.php +++ b/tests/Models/PositionTest.php @@ -14,9 +14,10 @@ declare(strict_types=1); namespace Modules\Organization\tests\Models; +use Modules\Organization\Models\Position; use Modules\Organization\Models\NullDepartment; use Modules\Organization\Models\NullPosition; -use Modules\Organization\Models\Position; +use Modules\Organization\Models\NullUnit; use Modules\Organization\Models\Status; /** @@ -24,43 +25,113 @@ use Modules\Organization\Models\Status; */ class PositionTest extends \PHPUnit\Framework\TestCase { + private Position $position; + + public function setUp() : void + { + $this->position = new Position(); + } + /** * @covers Modules\Organization\Models\Position * @group module */ public function testDefault() : void { - $position = new Position(); - - self::assertEquals(0, $position->getId()); - self::assertEquals('', $position->getName()); - self::assertEquals('', $position->getDescription()); - self::assertInstanceOf('Modules\Organization\Models\NullPosition', $position->getParent()); - self::assertEquals(Status::INACTIVE, $position->getStatus()); - self::assertInstanceOf('\Modules\Organization\Models\NullDepartment', $position->getDepartment()); + self::assertEquals(0, $this->position->getId()); + self::assertEquals('', $this->position->getName()); + self::assertEquals('', $this->position->getDescription()); + self::assertEquals('', $this->position->getDescriptionRaw()); + self::assertInstanceOf(NullPosition::class, $this->position->getParent()); + self::assertEquals(0, $this->position->getDepartment()->getId()); + self::assertEquals(Status::INACTIVE, $this->position->getStatus()); } /** * @covers Modules\Organization\Models\Position * @group module */ - public function testSetGet() : void + public function testNameInputOutput() : void { - $position = new Position(); + $this->position->setName('Name'); + self::assertEquals('Name', $this->position->getName()); + } - $position->setName('Name'); - self::assertEquals('Name', $position->getName()); + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testDescriptionInputOutput() : void + { + $this->position->setDescription('Description'); + self::assertEquals('Description', $this->position->getDescription()); + } - $position->setStatus(Status::ACTIVE); - self::assertEquals(Status::ACTIVE, $position->getStatus()); + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testDescriptionRawInputOutput() : void + { + $this->position->setDescriptionRaw('DescriptionRaw'); + self::assertEquals('DescriptionRaw', $this->position->getDescriptionRaw()); + } - $position->setDepartment(new NullDepartment(2)); - self::assertEquals(2, $position->getDepartment()->getId()); + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testStatusInputOutput() : void + { + $this->position->setStatus(Status::ACTIVE); + self::assertEquals(Status::ACTIVE, $this->position->getStatus()); + } - $position->setDescription('Description'); - self::assertEquals('Description', $position->getDescription()); + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testParentInputOutput() : void + { + $this->position->setParent(new NullPosition(1)); + self::assertEquals(1, $this->position->getParent()->getId()); + } - $position->setParent(new NullPosition(2)); - self::assertEquals(2, $position->getParent()->getId()); + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testDepartmentInputOutput() : void + { + $this->position->setDepartment(new NullDepartment(1)); + self::assertEquals(1, $this->position->getDepartment()->getId()); + } + + /** + * @covers Modules\Organization\Models\Position + * @group module + */ + public function testSerialize() : void + { + $this->position->setName('Name'); + $this->position->setDescription('Description'); + $this->position->setDescriptionRaw('DescriptionRaw'); + $this->position->setStatus(Status::ACTIVE); + $this->position->setParent($p = new NullPosition(1)); + $this->position->setDepartment($d = new NullDepartment(1)); + + self::assertEquals($this->position->toArray(), $this->position->jsonSerialize()); + self::assertEquals( + [ + 'id' => 0, + 'name' => 'Name', + 'status' => Status::ACTIVE, + 'description' => 'Description', + 'descriptionRaw' => 'DescriptionRaw', + 'parent' => $p, + 'department' => $d, + ], + $this->position->toArray() + ); } } diff --git a/tests/Models/UnitTest.php b/tests/Models/UnitTest.php index e3d5989..0d0189d 100755 --- a/tests/Models/UnitTest.php +++ b/tests/Models/UnitTest.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Modules\Organization\tests\Models; +use Modules\Media\Models\NullMedia; use Modules\Organization\Models\NullUnit; use Modules\Organization\Models\Status; use Modules\Organization\Models\Unit; @@ -23,39 +24,113 @@ use Modules\Organization\Models\Unit; */ class UnitTest extends \PHPUnit\Framework\TestCase { + private Unit $unit; + + public function setUp() : void + { + $this->unit = new Unit(); + } + /** * @covers Modules\Organization\Models\Unit * @group module */ public function testDefault() : void { - $unit = new Unit(); - - self::assertEquals(0, $unit->getId()); - self::assertEquals('', $unit->getName()); - self::assertEquals('', $unit->getDescription()); - self::assertInstanceOf('Modules\Organization\Models\NullUnit', $unit->getParent()); - self::assertEquals(Status::INACTIVE, $unit->getStatus()); + self::assertEquals(0, $this->unit->getId()); + self::assertEquals('', $this->unit->getName()); + self::assertEquals('', $this->unit->getDescription()); + self::assertEquals('', $this->unit->getDescriptionRaw()); + self::assertInstanceOf('Modules\Organization\Models\NullUnit', $this->unit->getParent()); + self::assertInstanceOf('Modules\Media\Models\NullMedia', $this->unit->getImage()); + self::assertEquals(Status::INACTIVE, $this->unit->getStatus()); } /** * @covers Modules\Organization\Models\Unit * @group module */ - public function testSetGet() : void + public function testNameInputOutput() : void { - $unit = new Unit(); + $this->unit->setName('Name'); + self::assertEquals('Name', $this->unit->getName()); + } - $unit->setName('Name'); - self::assertEquals('Name', $unit->getName()); + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testStatusInputOutput() : void + { + $this->unit->setStatus(Status::ACTIVE); + self::assertEquals(Status::ACTIVE, $this->unit->getStatus()); + } - $unit->setStatus(Status::ACTIVE); - self::assertEquals(Status::ACTIVE, $unit->getStatus()); + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testDescriptionInputOutput() : void + { + $this->unit->setDescription('Description'); + self::assertEquals('Description', $this->unit->getDescription()); + } - $unit->setDescription('Description'); - self::assertEquals('Description', $unit->getDescription()); + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testDescriptionRawInputOutput() : void + { + $this->unit->setDescriptionRaw('DescriptionRaw'); + self::assertEquals('DescriptionRaw', $this->unit->getDescriptionRaw()); + } - $unit->setParent(new NullUnit(1)); - self::assertEquals(1, $unit->getParent()->getId()); + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testParentInputOutput() : void + { + $this->unit->setParent(new NullUnit(1)); + self::assertEquals(1, $this->unit->getParent()->getId()); + } + + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testImageInputOutput() : void + { + $this->unit->setImage(new NullMedia(1)); + self::assertEquals(1, $this->unit->getImage()->getId()); + } + + /** + * @covers Modules\Organization\Models\Unit + * @group module + */ + public function testSerialize() : void + { + $this->unit->setName('Name'); + $this->unit->setDescription('Description'); + $this->unit->setDescriptionRaw('DescriptionRaw'); + $this->unit->setStatus(Status::ACTIVE); + $this->unit->setParent($p = new NullUnit(1)); + $this->unit->setImage($i = new NullMedia(1)); + + self::assertEquals($this->unit->toArray(), $this->unit->jsonSerialize()); + self::assertEquals( + [ + 'id' => 0, + 'name' => 'Name', + 'status' => Status::ACTIVE, + 'description' => 'Description', + 'descriptionRaw' => 'DescriptionRaw', + 'parent' => $p, + 'image' => $i, + ], + $this->unit->toArray() + ); } }