Skip to content

Commit 2fd6cf5

Browse files
committed
fix(targetticket): request source may be unexpected value
1 parent dc8c931 commit 2fd6cf5

File tree

2 files changed

+86
-4
lines changed

2 files changed

+86
-4
lines changed

inc/targetticket.class.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -1031,11 +1031,8 @@ protected function setTargetLocation($data, $formanswer) {
10311031
}
10321032

10331033
protected function setTargetSource(array $data, PluginFormcreatorFormAnswer $formanswer): array {
1034+
// do nothing with self::REQUESTSOURCE_NONE
10341035
switch ($this->fields['source_rule']) {
1035-
case self::REQUESTSOURCE_NONE:
1036-
$data['requesttypes_id'] = PluginFormcreatorCommon::getFormcreatorRequestTypeId();
1037-
break;
1038-
10391036
case self::REQUESTSOURCE_FORMCREATOR:
10401037
$data['requesttypes_id'] = $this->fields['source_question'];
10411038
break;

tests/3-unit/PluginFormcreatorTargetTicket.php

+85
Original file line numberDiff line numberDiff line change
@@ -1727,4 +1727,89 @@ public function testSetTargetLocation($instance, $formanswer, $expected) {
17271727

17281728
$this->integer((int) $output['locations_id'])->isEqualTo($expected);
17291729
}
1730+
1731+
public function providerRequestSource() {
1732+
$testedClassName = $this->getTestedClassName();
1733+
1734+
$form = $this->getForm();
1735+
yield [
1736+
'instance' => $this->getTargetTicket([
1737+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
1738+
'source_rule' => $testedClassName::REQUESTSOURCE_FORMCREATOR,
1739+
'source_question' => PluginFormcreatorCommon::getFormcreatorRequestTypeId(),
1740+
]),
1741+
'expected' => PluginFormcreatorCommon::getFormcreatorRequestTypeId()
1742+
];
1743+
1744+
$form = $this->getForm();
1745+
$user = $this->getGlpiCoreItem(User::class, [
1746+
'name' => 'user' . $this->getUniqueString(),
1747+
'password' => 'password',
1748+
'password2' => 'password',
1749+
'default_requesttypes_id' => 2, // e-mail, see table glpi_requesttypes
1750+
]);
1751+
$this->login($user->fields['name'], 'password');
1752+
1753+
yield [
1754+
'instance' => $this->getTargetTicket([
1755+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
1756+
'source_rule' => $testedClassName::REQUESTSOURCE_NONE
1757+
]),
1758+
'expected' => 2
1759+
];
1760+
1761+
$form = $this->getForm();
1762+
$user = $this->getGlpiCoreItem(User::class, [
1763+
'name' => 'user' . $this->getUniqueString(),
1764+
'password' => 'password',
1765+
'password2' => 'password',
1766+
'default_requesttypes_id' => 0, // unset
1767+
]);
1768+
$this->login($user->fields['name'], 'password');
1769+
1770+
yield [
1771+
'instance' => $this->getTargetTicket([
1772+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
1773+
'source_rule' => $testedClassName::REQUESTSOURCE_NONE,
1774+
]),
1775+
'expected' => 0 // Unset (see Setup > General > Default values)
1776+
];
1777+
1778+
$form = $this->getForm();
1779+
$ticketTemplate = $this->getGlpiCoreItem(
1780+
TicketTemplate::getType(), [
1781+
'name' => 'template with predefined request type',
1782+
]
1783+
);
1784+
$this->getGlpiCoreItem(TicketTemplatePredefinedField::getType(), [
1785+
'tickettemplates_id' => $ticketTemplate->getID(),
1786+
'num' => 9, // RequestType
1787+
'value' => 1, // Helpdesk
1788+
]);
1789+
1790+
yield [
1791+
'instance' => $this->getTargetTicket([
1792+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
1793+
'source_rule' => $testedClassName::REQUESTSOURCE_NONE,
1794+
'tickettemplates_id' => $ticketTemplate->getID(),
1795+
]),
1796+
'expected' => 1 // Helpdesk (see Setup > General > Default values)
1797+
];
1798+
}
1799+
1800+
/**
1801+
* @dataProvider providerRequestSource
1802+
*/
1803+
public function testRequestSource($instance, $expected) {
1804+
$form = PluginFormcreatorForm::getByItem($instance);
1805+
$formAnswer = $this->getFormAnswer([
1806+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
1807+
]);
1808+
1809+
$generatedTargets = $formAnswer->targetList;
1810+
foreach ($generatedTargets as $target) {
1811+
$output = $target->fields['requesttypes_id'];
1812+
$this->integer((int) $output)->isEqualTo($expected);
1813+
}
1814+
}
17301815
}

0 commit comments

Comments
 (0)