Skip to content

Commit ae1d7b3

Browse files
authored
Adding an function to get the column board configuration (#94)
* feat: Adding board configuration api to get column board configuration * fix: CI style ci fix --------- Co-authored-by: Romain MILLAN <rmillan@spiriit.com>
1 parent 9db03b8 commit ae1d7b3

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

src/Board/BoardColumn.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace JiraCloud\Board;
4+
5+
class BoardColumn implements \JsonSerializable
6+
{
7+
use \JiraCloud\JsonSerializableTrait;
8+
9+
public string $name;
10+
public ?int $max = null;
11+
public ?int $min = null;
12+
public array $statuses = [];
13+
}

src/Board/BoardColumnConfig.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace JiraCloud\Board;
4+
5+
class BoardColumnConfig implements \JsonSerializable
6+
{
7+
use \JiraCloud\JsonSerializableTrait;
8+
9+
/** @var BoardColumn[] */
10+
public array $columns;
11+
public string $constraintType;
12+
}

src/Board/BoardService.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class BoardService extends \JiraCloud\JiraClient
1414

1515
private $agileVersion = '1.0';
1616

17-
public function __construct(ConfigurationInterface $configuration = null, LoggerInterface $logger = null, $path = './')
17+
public function __construct(?ConfigurationInterface $configuration = null, ?LoggerInterface $logger = null, $path = './')
1818
{
1919
parent::__construct($configuration, $logger, $path);
2020
$this->setAPIUri('/rest/agile/'.$this->agileVersion);
@@ -141,4 +141,20 @@ public function getBoardEpics($boardId, $paramArray = []): ?\ArrayObject
141141
return null;
142142
}
143143
}
144+
145+
public function getBoardColumnConfiguration($boardId, $paramArray = []): ?BoardColumnConfig
146+
{
147+
$json = $this->exec($this->uri.'/'.$boardId.'/configuration'.$this->toHttpQueryParameter($paramArray), null);
148+
149+
try {
150+
return $this->json_mapper->map(
151+
json_decode($json, false, 512, $this->getJsonOptions())->columnConfig,
152+
BoardColumnConfig::class
153+
);
154+
} catch (\JsonException $exception) {
155+
$this->log->error("Response cannot be decoded from json\nException: {$exception->getMessage()}");
156+
157+
return null;
158+
}
159+
}
144160
}

tests/BoardTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace JiraCloud\Test;
44

55
use ArrayObject;
6+
use JiraCloud\Board\BoardColumn;
7+
use JiraCloud\Board\BoardColumnConfig;
68
use PHPUnit\Framework\TestCase;
79
use JiraCloud\Board\BoardService;
810
use JiraCloud\Board\Board;
@@ -83,4 +85,21 @@ public function testGetBoardIssues(string $last_board_id)
8385
}
8486
}
8587

88+
/**
89+
* @test
90+
*
91+
* @depends get_last_board
92+
* Test can get board column configuration
93+
*/
94+
public function get_board_configuration(string $last_board_id): void
95+
{
96+
$board_service = new BoardService();
97+
$board_column_configuration = $board_service->getBoardColumnConfiguration($last_board_id);
98+
99+
$this->assertInstanceOf(BoardColumnConfig::class, $board_column_configuration);
100+
$this->assertIsArray($board_column_configuration->columns);
101+
$this->assertInstanceOf(BoardColumn::class, $board_column_configuration->columns[0]);
102+
$this->assertIsString($board_column_configuration->constraintType);
103+
}
104+
86105
}

0 commit comments

Comments
 (0)