Skip to content

Commit cd16915

Browse files
committed
feat(issue): change status conversion matrix
Signed-off-by: Thierry Bugier <tbugier@teclib.com>
1 parent 183abfd commit cd16915

File tree

3 files changed

+65
-12
lines changed

3 files changed

+65
-12
lines changed

inc/common.class.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,12 @@ public static function cancelMyTicket(int $id) : bool {
247247
* +-------------+---------+---------+----------+
248248
* |NULL or NONE | WAITING | REFUSED | ACCEPTED |
249249
* + ---------+-------------+---------+---------+----------+
250-
* T S | INCOMING | T V V T
251-
* i t | ASSIGNED | T V V T
252-
* c a | PLANNED | T V V T
253-
* k t | WAITING | T V V T
254-
* e u | SOLVED | T V T T
255-
* t s | CLOSED | T V T T
250+
* T S | INCOMING | T V V T
251+
* i t | ASSIGNED | T V V T
252+
* c a | PLANNED | T V V T
253+
* k t | WAITING | T V V T
254+
* e u | SOLVED | T T T T
255+
* t s | CLOSED | T T T T
256256
*
257257
* T = status picked from Ticket
258258
* V = status picked from Validation
@@ -277,7 +277,9 @@ public static function getTicketStatusForIssue(Ticket $item) : array {
277277
if ($ticketValidationCount > 0 && !in_array($item->fields['global_validation'], [TicketValidation::ACCEPTED, TicketValidation::NONE])) {
278278
switch ($item->fields['global_validation']) {
279279
case CommonITILValidation::WAITING:
280-
$status = PluginFormcreatorFormAnswer::STATUS_WAITING;
280+
if (!in_array($item->fields['status'], [Ticket::SOLVED, Ticket::CLOSED])) {
281+
$status = PluginFormcreatorFormAnswer::STATUS_WAITING;
282+
}
281283
break;
282284
case CommonITILValidation::REFUSED:
283285
if (!in_array($item->fields['status'], [Ticket::SOLVED, Ticket::CLOSED])) {

inc/issue.class.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public static function getSyncIssuesRequest() : AbstractQuery {
142142
`$ticketTable`.`status`,
143143
IF(`$ticketTable`.`global_validation` IN ('" . CommonITILValidation::NONE . "', '" . CommonITILValidation::ACCEPTED . "'),
144144
`$ticketTable`.`status`,
145-
IF(`$ticketTable`.`status` IN ('" . CommonITILObject::SOLVED . "', '" . CommonITILObject::CLOSED . "') AND `$ticketTable`.`global_validation` = '" . CommonITILValidation::REFUSED . "',
145+
IF(`$ticketTable`.`status` IN ('" . CommonITILObject::SOLVED . "', '" . CommonITILObject::CLOSED . "'),
146146
`$ticketTable`.`status`,
147147
IF(`$ticketTable`.`global_validation` = '" . CommonITILValidation::WAITING . "',
148148
'" . PluginFormcreatorFormAnswer::STATUS_WAITING . "',

tests/3-unit/PluginFormcreatorCommon.php

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public function beforeTestMethod($method) {
3939
case 'testGetTicketStatusForIssue':
4040
$this->login('glpi', 'glpi');
4141
$_SESSION['glpiset_default_tech'] = false;
42+
$this->beforeGetTicketStatusForIssue();
4243
break;
4344
}
4445
}
@@ -164,11 +165,16 @@ public function testCleanOldCaptchas() {
164165
}
165166

166167
public function beforeGetTicketStatusForIssue() {
168+
global $CFG_GLPI;
167169

170+
$CFG_GLPI['use_notifications'] = '0';
168171
}
169172

170173
public function providerGetTicketStatusForIssue() {
171174
$data = [];
175+
176+
// Build test cases for 1st and last columns of tabhe in docblock of
177+
// PluginFormcreatorCommon::getTicketStatusForIssue (total 18 test cases)
172178
$expectedStatus = [
173179
\Ticket::INCOMING,
174180
\Ticket::ASSIGNED,
@@ -240,11 +246,22 @@ public function providerGetTicketStatusForIssue() {
240246
'expected' => ['user' => 4, 'status' => $ticketStatus]
241247
];
242248
$data["validation accepted, " . \Ticket::getStatus($ticketStatus)] = $dataSet;
249+
}
243250

251+
// Build test cases for 2nd column of tabhe in docblock of
252+
// PluginFormcreatorCommon::getTicketStatusForIssue (total 4 test cases)
253+
$expectedStatus = [
254+
\Ticket::INCOMING,
255+
\Ticket::ASSIGNED,
256+
\Ticket::PLANNED,
257+
\Ticket::WAITING,
258+
];
259+
foreach ($expectedStatus as $ticketStatus) {
260+
// generate tickets with a validation
244261
$ticket = new \Ticket();
245262
$ticket->add([
246263
'name' => 'a ticket',
247-
'content' => "should be " . \Ticket::getStatus($ticketStatus),
264+
'content' => "should be " . \CommonITILValidation::getStatus(\CommonITILValidation::WAITING),
248265
'status' => \CommonITILObject::INCOMING,
249266
'_add_validation' => '0',
250267
'validatortype' => User::class,
@@ -264,20 +281,54 @@ public function providerGetTicketStatusForIssue() {
264281
'ticket' => $ticket,
265282
'expected' => ['user' => 4, 'status' => \PluginFormcreatorFormAnswer::STATUS_WAITING]
266283
];
284+
$data["validation waiting, " . \CommonITILValidation::getStatus(\CommonITILValidation::WAITING)] = $dataSet;
285+
}
286+
287+
$expectedStatus = [
288+
\Ticket::SOLVED,
289+
\Ticket::CLOSED,
290+
];
291+
foreach ($expectedStatus as $ticketStatus) {
292+
$ticket = new \Ticket();
293+
$ticket->add([
294+
'name' => 'a ticket',
295+
'content' => "should be " . \Ticket::getStatus($ticketStatus),
296+
'status' => \CommonITILObject::INCOMING,
297+
'_add_validation' => '0',
298+
'validatortype' => User::class,
299+
'users_id_validate' => [4], // Tech
300+
]);
301+
$this->boolean($ticket->isNewItem())->isFalse();
302+
// Creating a ticket directly with status solved or closed
303+
// will prevent credation of ticketvalidation item
304+
$ticket->update([
305+
'id' => $ticket->getID(),
306+
'status' => $ticketStatus,
307+
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
308+
]);
309+
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
310+
$ticket->fields['global_validation'] = \CommonITILValidation::WAITING;
311+
$dataSet = [
312+
'ticket' => $ticket,
313+
'expected' => ['user' => 4, 'status' => $ticketStatus]
314+
];
267315
$data["validation waiting, " . \Ticket::getStatus($ticketStatus)] = $dataSet;
268316
}
269317

318+
// Build test cases for 3rd column of tabhe in docblock of
319+
// PluginFormcreatorCommon::getTicketStatusForIssue (total 4 test cases)
270320
$expectedStatus = [
271321
\Ticket::INCOMING,
272322
\Ticket::ASSIGNED,
273323
\Ticket::PLANNED,
274324
\Ticket::WAITING,
275325
];
276326
foreach ($expectedStatus as $ticketStatus) {
327+
// generate tickets with a validation
277328
$ticket = new \Ticket();
278329
$ticket->add([
279330
'name' => 'a ticket',
280-
'content' => "should be " . \Ticket::getStatus($ticketStatus),
331+
'content' => "should be " . \CommonITILValidation::getStatus(\CommonITILValidation::REFUSED),
281332
'status' => \CommonITILObject::INCOMING,
282333
'_add_validation' => '0',
283334
'validatortype' => User::class,
@@ -297,7 +348,7 @@ public function providerGetTicketStatusForIssue() {
297348
'ticket' => $ticket,
298349
'expected' => ['user' => 4, 'status' => \PluginFormcreatorFormAnswer::STATUS_REFUSED]
299350
];
300-
$data["validation waiting, " . \Ticket::getStatus($ticketStatus)] = $dataSet;
351+
$data["validation refused, " . \CommonITILValidation::getStatus(\CommonITILValidation::REFUSED)] = $dataSet;
301352
}
302353

303354
$expectedStatus = [
@@ -328,7 +379,7 @@ public function providerGetTicketStatusForIssue() {
328379
'ticket' => $ticket,
329380
'expected' => ['user' => 4, 'status' => $ticketStatus]
330381
];
331-
$data["validation waiting, " . \Ticket::getStatus($ticketStatus)] = $dataSet;
382+
$data["validation refused, " . \Ticket::getStatus($ticketStatus)] = $dataSet;
332383
}
333384

334385
return $data;

0 commit comments

Comments
 (0)