From 866dc81dd8f407995c7d36bb40e2476a85850cfd Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Wed, 12 Aug 2020 14:25:41 +0200 Subject: [PATCH] FEAT #14537 TIME 2:45 range tu + some fixes --- phpunit.xml | 1 + sql/structure.sql | 13 + .../RegisteredNumberRangeController.php | 15 +- .../models/RegisteredNumberRangeModel.php | 9 +- .../IssuingSiteControllerTest.php | 28 +- .../RegisteredNumberRangeControllerTest.php | 426 ++++++++++++++++++ 6 files changed, 469 insertions(+), 23 deletions(-) create mode 100644 test/unitTests/app/registeredMail/RegisteredNumberRangeControllerTest.php diff --git a/phpunit.xml b/phpunit.xml index 3dcac176837..5565820a6c4 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -49,6 +49,7 @@ <file>test/unitTests/app/acknowledgementReceipt/AcknowledgementReceiptControllerTest.php</file> <file>test/unitTests/app/notification/DiffusionTypesControllerTest.php</file> <file>test/unitTests/app/registeredMail/IssuingSiteControllerTest.php</file> + <file>test/unitTests/app/registeredMail/RegisteredNumberRangeControllerTest.php</file> <!-- The last one should be history --> <file>test/unitTests/app/history/HistoryControllerTest.php</file> </testsuite> diff --git a/sql/structure.sql b/sql/structure.sql index 3a727e5ab04..67f53d3234f 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -1430,3 +1430,16 @@ CREATE TABLE IF NOT EXISTS issuing_sites_entities CONSTRAINT issuing_sites_entities_pkey PRIMARY KEY (id), CONSTRAINT issuing_sites_entities_unique_key UNIQUE (site_id, entity_id) ); +CREATE TABLE IF NOT EXISTS registered_number_range ( + id SERIAL NOT NULL, + type CHARACTER VARYING(15) NOT NULL, + tracking_account_number CHARACTER VARYING(256), + range_start INTEGER, + range_end INTEGER, + creator INTEGER, + created timestamp without time zone DEFAULT CURRENT_TIMESTAMP, + site_id INTEGER, + status CHARACTER VARYING(10), + current_number INTEGER DEFAULT 0 NOT NULL, + CONSTRAINT registered_number_range_pkey PRIMARY KEY (id) +); diff --git a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php index 222e60d5746..1fb22d17904 100644 --- a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php +++ b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php @@ -32,9 +32,11 @@ class RegisteredNumberRangeController $ranges = RegisteredNumberRangeModel::get(); foreach ($ranges as $key => $range) { - $fullness = $range['currentNumber'] - $range['range_start']; + $fullness = $range['current_number'] - $range['range_start']; $rangeSize = $range['range_end'] - $range['range_start']; $fullness = ($fullness / $rangeSize) * 100; + $fullness = $fullness < 0 ? 0 : $fullness; + $fullness = round($fullness, 2); $site = IssuingSiteModel::getById(['id' => $range['site_id']]); $ranges[$key] = [ @@ -48,7 +50,7 @@ class RegisteredNumberRangeController 'siteId' => $range['site_id'], 'status' => $range['status'], 'customerAccountNumber' => $site['account_number'], - 'currentNumber' => $range['currentNumber'], + 'currentNumber' => $range['current_number'], 'fullness' => $fullness ]; } @@ -70,9 +72,11 @@ class RegisteredNumberRangeController $site = IssuingSiteModel::getById(['id' => $range['site_id']]); - $fullness = $range['currentNumber'] - $range['range_start']; + $fullness = $range['current_number'] - $range['range_start']; $rangeSize = $range['range_end'] - $range['range_start']; $fullness = ($fullness / $rangeSize) * 100; + $fullness = $fullness < 0 ? 0 : $fullness; + $fullness = round($fullness, 2); $range = [ 'id' => $range['id'], @@ -85,7 +89,7 @@ class RegisteredNumberRangeController 'siteId' => $range['site_id'], 'status' => $range['status'], 'customerAccountNumber' => $site['account_number'], - 'currentNumber' => $range['currentNumber'], + 'currentNumber' => $range['current_number'], 'fullness' => $fullness ]; @@ -128,7 +132,8 @@ class RegisteredNumberRangeController 'rangeEnd' => $body['rangeEnd'], 'creator' => $GLOBALS['id'], 'siteId' => $body['siteId'], - 'status' => $body['status'] + 'status' => $body['status'], + 'currentNumber' => $body['rangeStart'] ]); HistoryController::add([ diff --git a/src/app/registeredMail/models/RegisteredNumberRangeModel.php b/src/app/registeredMail/models/RegisteredNumberRangeModel.php index 11626e977e9..771cba84639 100644 --- a/src/app/registeredMail/models/RegisteredNumberRangeModel.php +++ b/src/app/registeredMail/models/RegisteredNumberRangeModel.php @@ -50,9 +50,9 @@ class RegisteredNumberRangeModel public static function create(array $args) { - ValidatorModel::notEmpty($args, ['type', 'rangeStart', 'rangeEnd', 'siteId']); + ValidatorModel::notEmpty($args, ['type', 'rangeStart', 'rangeEnd', 'siteId', 'currentNumber']); ValidatorModel::stringType($args, ['type']); - ValidatorModel::intVal($args, ['rangeStart', 'rangeEnd', 'siteId']); + ValidatorModel::intVal($args, ['rangeStart', 'rangeEnd', 'siteId', 'currentNumber']); $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'registered_number_range_id_seq']); @@ -64,8 +64,9 @@ class RegisteredNumberRangeModel 'tracking_account_number' => $args['trackingAccountNumber'], 'range_start' => $args['rangeStart'], 'range_end' => $args['rangeEnd'], - 'creator' => $args['id'], - 'site_id' => $args['siteId'] + 'creator' => $args['creator'], + 'site_id' => $args['siteId'], + 'current_number' => $args['currentNumber'] ] ]); diff --git a/test/unitTests/app/registeredMail/IssuingSiteControllerTest.php b/test/unitTests/app/registeredMail/IssuingSiteControllerTest.php index 847a8c8c0a0..8858885c9ca 100644 --- a/test/unitTests/app/registeredMail/IssuingSiteControllerTest.php +++ b/test/unitTests/app/registeredMail/IssuingSiteControllerTest.php @@ -26,7 +26,7 @@ class IssuingSiteControllerTest extends TestCase 'postOfficeLabel' => 'Scranton Post Office', 'accountNumber' => 42, 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', @@ -55,8 +55,8 @@ class IssuingSiteControllerTest extends TestCase $this->assertSame('Scranton Post Office', $responseBody['site']['postOfficeLabel']); $this->assertSame('42', $responseBody['site']['accountNumber']); $this->assertSame('1725', $responseBody['site']['addressStreet']); - $this->assertEmpty($responseBody['site']['ddressAdditional1']); - $this->assertEmpty($responseBody['site']['ddressAdditional2']); + $this->assertEmpty($responseBody['site']['addressAdditional1']); + $this->assertEmpty($responseBody['site']['addressAdditional2']); $this->assertSame('18505', $responseBody['site']['addressPostcode']); $this->assertSame('Scranton', $responseBody['site']['addressTown']); $this->assertSame('USA', $responseBody['site']['addressCountry']); @@ -82,7 +82,7 @@ class IssuingSiteControllerTest extends TestCase 'postOfficeLabel' => 'Scranton Post Office', 'accountNumber' => 42, 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', @@ -101,7 +101,7 @@ class IssuingSiteControllerTest extends TestCase 'postOfficeLabel' => 'Scranton Post Office', 'accountNumber' => 42, 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', @@ -155,8 +155,8 @@ class IssuingSiteControllerTest extends TestCase $this->assertSame('Scranton Post Office', $responseBody['sites'][0]['postOfficeLabel']); $this->assertSame('42', $responseBody['sites'][0]['accountNumber']); $this->assertSame('1725', $responseBody['sites'][0]['addressStreet']); - $this->assertEmpty($responseBody['sites'][0]['ddressAdditional1']); - $this->assertEmpty($responseBody['sites'][0]['ddressAdditional2']); + $this->assertEmpty($responseBody['sites'][0]['addressAdditional1']); + $this->assertEmpty($responseBody['sites'][0]['addressAdditional2']); $this->assertSame('18505', $responseBody['sites'][0]['addressPostcode']); $this->assertSame('Scranton', $responseBody['sites'][0]['addressTown']); $this->assertSame('USA', $responseBody['sites'][0]['addressCountry']); @@ -193,8 +193,8 @@ class IssuingSiteControllerTest extends TestCase $this->assertSame('Scranton Post Office', $responseBody['site']['postOfficeLabel']); $this->assertSame('42', $responseBody['site']['accountNumber']); $this->assertSame('1725', $responseBody['site']['addressStreet']); - $this->assertEmpty($responseBody['site']['ddressAdditional1']); - $this->assertEmpty($responseBody['site']['ddressAdditional2']); + $this->assertEmpty($responseBody['site']['addressAdditional1']); + $this->assertEmpty($responseBody['site']['addressAdditional2']); $this->assertSame('18505', $responseBody['site']['addressPostcode']); $this->assertSame('Scranton', $responseBody['site']['addressTown']); $this->assertSame('USA', $responseBody['site']['addressCountry']); @@ -230,7 +230,7 @@ class IssuingSiteControllerTest extends TestCase 'accountNumber' => 42, 'addressName' => 'Dunder Mifflin Scranton', 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', @@ -254,8 +254,8 @@ class IssuingSiteControllerTest extends TestCase $this->assertSame('Scranton Post Office', $responseBody['site']['postOfficeLabel']); $this->assertSame('42', $responseBody['site']['accountNumber']); $this->assertSame('1725', $responseBody['site']['addressStreet']); - $this->assertEmpty($responseBody['site']['ddressAdditional1']); - $this->assertEmpty($responseBody['site']['ddressAdditional2']); + $this->assertEmpty($responseBody['site']['addressAdditional1']); + $this->assertEmpty($responseBody['site']['addressAdditional2']); $this->assertSame('18505', $responseBody['site']['addressPostcode']); $this->assertSame('Scranton', $responseBody['site']['addressTown']); $this->assertSame('USA', $responseBody['site']['addressCountry']); @@ -282,7 +282,7 @@ class IssuingSiteControllerTest extends TestCase 'postOfficeLabel' => 'Scranton Post Office', 'accountNumber' => 42, 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', @@ -301,7 +301,7 @@ class IssuingSiteControllerTest extends TestCase 'postOfficeLabel' => 'Scranton Post Office', 'accountNumber' => 42, 'addressStreet' => '1725', - 'ddressAdditional1' => null, + 'addressAdditional1' => null, 'addressAdditional2' => null, 'addressPostcode' => '18505', 'addressTown' => 'Scranton', diff --git a/test/unitTests/app/registeredMail/RegisteredNumberRangeControllerTest.php b/test/unitTests/app/registeredMail/RegisteredNumberRangeControllerTest.php new file mode 100644 index 00000000000..1d2972bb539 --- /dev/null +++ b/test/unitTests/app/registeredMail/RegisteredNumberRangeControllerTest.php @@ -0,0 +1,426 @@ +<?php + +/** + * Copyright Maarch since 2008 under licence GPLv3. + * See LICENCE.txt file at the root folder for more details. + * This file is part of Maarch software. + * + */ + +use PHPUnit\Framework\TestCase; + +class RegisteredNumberRangeControllerTest extends TestCase +{ + private static $id = null; + private static $siteId = null; + + public function testCreate() + { + $registeredNumberRangeController = new \RegisteredMail\controllers\RegisteredNumberRangeController(); + $issuingSiteController = new \RegisteredMail\controllers\IssuingSiteController(); + + // CREATE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + 'siteLabel' => 'Scranton', + 'postOfficeLabel' => 'Scranton Post Office', + 'accountNumber' => 42, + 'addressStreet' => '1725', + 'addressAdditional1' => null, + 'addressAdditional2' => null, + 'addressPostcode' => '18505', + 'addressTown' => 'Scranton', + 'addressCountry' => 'USA', + 'entities' => [6] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $issuingSiteController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertIsInt($responseBody['id']); + + self::$siteId = $responseBody['id']; + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 1000, + 'siteId' => self::$siteId + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertIsInt($responseBody['id']); + + self::$id = $responseBody['id']; + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $registeredNumberRangeController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertNotEmpty($responseBody['range']); + $this->assertSame(self::$id, $responseBody['range']['id']); + $this->assertSame('B01', $responseBody['range']['registeredMailType']); + $this->assertSame('AZPOKF30KDZP', $responseBody['range']['trackerNumber']); + $this->assertSame(1, $responseBody['range']['rangeStart']); + $this->assertSame(1000, $responseBody['range']['rangeEnd']); + $this->assertSame(self::$siteId, $responseBody['range']['siteId']); + $this->assertSame($GLOBALS['id'], $responseBody['range']['creator']); + $this->assertSame(1, $responseBody['range']['currentNumber']); + $this->assertSame(0, $responseBody['range']['fullness']); + + // fail + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body registeredMailType is empty or not a string', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01' + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body trackerNumber is empty or not a string', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body rangeStart is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body rangeEnd is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 1000, + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body siteId is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 1000, + 'siteId' => self::$siteId * 1000 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body siteId does not exist', $responseBody['errors']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $registeredNumberRangeController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testGet() + { + $registeredNumberRangeController = new \RegisteredMail\controllers\RegisteredNumberRangeController(); + + // GET + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $registeredNumberRangeController->get($request, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['ranges']); + $this->assertNotEmpty($responseBody['ranges']); + + $this->assertIsArray($responseBody['ranges'][0]); + $this->assertNotEmpty($responseBody['ranges'][0]); + + $this->assertNotEmpty($responseBody['ranges'][0]); + $this->assertSame(self::$id, $responseBody['ranges'][0]['id']); + $this->assertSame('B01', $responseBody['ranges'][0]['registeredMailType']); + $this->assertSame('AZPOKF30KDZP', $responseBody['ranges'][0]['trackerNumber']); + $this->assertSame(1, $responseBody['ranges'][0]['rangeStart']); + $this->assertSame(1000, $responseBody['ranges'][0]['rangeEnd']); + $this->assertSame(self::$siteId, $responseBody['ranges'][0]['siteId']); + $this->assertSame($GLOBALS['id'], $responseBody['ranges'][0]['creator']); + $this->assertSame(1, $responseBody['ranges'][0]['currentNumber']); + $this->assertSame(0, $responseBody['ranges'][0]['fullness']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $registeredNumberRangeController->get($request, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testGetById() + { + $registeredNumberRangeController = new \RegisteredMail\controllers\RegisteredNumberRangeController(); + + // GET + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $registeredNumberRangeController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertNotEmpty($responseBody['range']); + $this->assertSame(self::$id, $responseBody['range']['id']); + $this->assertSame('B01', $responseBody['range']['registeredMailType']); + $this->assertSame('AZPOKF30KDZP', $responseBody['range']['trackerNumber']); + $this->assertSame(1, $responseBody['range']['rangeStart']); + $this->assertSame(1000, $responseBody['range']['rangeEnd']); + $this->assertSame(self::$siteId, $responseBody['range']['siteId']); + $this->assertSame($GLOBALS['id'], $responseBody['range']['creator']); + $this->assertSame(1, $responseBody['range']['currentNumber']); + $this->assertSame(0, $responseBody['range']['fullness']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $registeredNumberRangeController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testUpdate() + { + $registeredNumberRangeController = new \RegisteredMail\controllers\RegisteredNumberRangeController(); + + // UPDATE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 2000, + 'siteId' => self::$siteId + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(204, $response->getStatusCode()); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $registeredNumberRangeController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertNotEmpty($responseBody['range']); + $this->assertSame(self::$id, $responseBody['range']['id']); + $this->assertSame('B01', $responseBody['range']['registeredMailType']); + $this->assertSame('AZPOKF30KDZP', $responseBody['range']['trackerNumber']); + $this->assertSame(1, $responseBody['range']['rangeStart']); + $this->assertSame(2000, $responseBody['range']['rangeEnd']); + $this->assertSame(self::$siteId, $responseBody['range']['siteId']); + $this->assertSame($GLOBALS['id'], $responseBody['range']['creator']); + $this->assertSame(1, $responseBody['range']['currentNumber']); + $this->assertSame(0, $responseBody['range']['fullness']); + + // fail + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body registeredMailType is empty or not a string', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01' + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body trackerNumber is empty or not a string', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body rangeStart is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body rangeEnd is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 1000, + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body siteId is empty or not an integer', $responseBody['errors']); + + $body = [ + 'registeredMailType' => 'B01', + 'trackerNumber' => 'AZPOKF30KDZP', + 'rangeStart' => 1, + 'rangeEnd' => 1000, + 'siteId' => self::$siteId * 1000 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body siteId does not exist', $responseBody['errors']); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id * 1000]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Range not found', $responseBody['errors']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $body = [ + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testDelete() + { + $registeredNumberRangeController = new \RegisteredMail\controllers\RegisteredNumberRangeController(); + $issuingSiteController = new \RegisteredMail\controllers\IssuingSiteController(); + + // DELETE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $response = $registeredNumberRangeController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(204, $response->getStatusCode()); + + $response = $registeredNumberRangeController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(204, $response->getStatusCode()); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $registeredNumberRangeController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Range not found', $responseBody['errors']); + + // Fail + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $body = [ + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $registeredNumberRangeController->delete($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $issuingSiteController->delete($request, new \Slim\Http\Response(), ['id' => self::$siteId]); + $this->assertSame(204, $response->getStatusCode()); + } +} -- GitLab