From e458e976579c74819a9be3929c9120f45d131b80 Mon Sep 17 00:00:00 2001 From: Art4 Date: Fri, 22 Dec 2023 09:36:55 +0100 Subject: [PATCH] Restore BC in Tracker::all() --- src/Redmine/Api/Tracker.php | 14 ++++++++++++-- tests/Unit/Api/TrackerTest.php | 28 ++++++++++++++++------------ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/Redmine/Api/Tracker.php b/src/Redmine/Api/Tracker.php index 95c66811..0df4e0b9 100644 --- a/src/Redmine/Api/Tracker.php +++ b/src/Redmine/Api/Tracker.php @@ -2,6 +2,8 @@ namespace Redmine\Api; +use Redmine\Exception; + /** * Listing trackers. * @@ -38,13 +40,21 @@ final public function list(array $params = []): array * * @param array $params optional parameters to be passed to the api (offset, limit, ...) * - * @return array list of trackers found + * @return array|string|false list of trackers found or error message or false */ public function all(array $params = []) { @trigger_error('`'.__METHOD__.'()` is deprecated since v2.4.0, use `'.__CLASS__.'::list()` instead.', E_USER_DEPRECATED); - return $this->list($params); + try { + return $this->list($params); + } catch (Exception $e) { + if ($this->client->getLastResponseBody() === '') { + return false; + } + + return $e->getMessage(); + } } /** diff --git a/tests/Unit/Api/TrackerTest.php b/tests/Unit/Api/TrackerTest.php index 041aa14b..35343bf1 100644 --- a/tests/Unit/Api/TrackerTest.php +++ b/tests/Unit/Api/TrackerTest.php @@ -44,34 +44,38 @@ function ($errno, $errstr): bool { * Test all(). * * @covers ::all + * @dataProvider getAllData * @test */ - public function testAllReturnsClientGetResponse() + public function testAllReturnsClientGetResponse($response, $responseType, $expectedResponse) { - // Test values - $response = '["API Response"]'; - $expectedReturn = ['API Response']; - // Create the used mock objects $client = $this->createMock(Client::class); - $client->expects($this->once()) + $client->expects($this->exactly(1)) ->method('requestGet') - ->with( - $this->stringStartsWith('/trackers.json') - ) + ->with('/trackers.json') ->willReturn(true); - $client->expects($this->exactly(1)) + $client->expects($this->atLeast(1)) ->method('getLastResponseBody') ->willReturn($response); $client->expects($this->exactly(1)) ->method('getLastResponseContentType') - ->willReturn('application/json'); + ->willReturn($responseType); // Create the object under test $api = new Tracker($client); // Perform the tests - $this->assertSame($expectedReturn, $api->all()); + $this->assertSame($expectedResponse, $api->all()); + } + + public static function getAllData(): array + { + return [ + 'array response' => ['["API Response"]', 'application/json', ['API Response']], + 'string response' => ['"string"', 'application/json', 'Could not convert response body into array: "string"'], + 'false response' => ['', 'application/json', false], + ]; } /**