-
Notifications
You must be signed in to change notification settings - Fork 81
Expand file tree
/
Copy pathFieldTestCase.php
More file actions
114 lines (94 loc) · 3.65 KB
/
Copy pathFieldTestCase.php
File metadata and controls
114 lines (94 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
/**
* -------------------------------------------------------------------------
* Fields plugin for GLPI
* -------------------------------------------------------------------------
*
* LICENSE
*
* This file is part of Fields.
*
* Fields is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Fields is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Fields. If not, see <http://www.gnu.org/licenses/>.
* -------------------------------------------------------------------------
* @copyright Copyright (C) 2013-2023 by Fields plugin team.
* @license GPLv2 https://www.gnu.org/licenses/gpl-2.0.html
* @link https://github.com/pluginsGLPI/fields
* -------------------------------------------------------------------------
*/
namespace GlpiPlugin\Field\Tests;
use DBmysql;
use Glpi\Form\Question;
use PluginFieldsContainer;
use PluginFieldsField;
use PluginFieldsQuestionType;
trait FieldTestTrait
{
/** @var PluginFieldsContainer[] */
private static array $createdContainers = [];
/** @var PluginFieldsField[] */
private static array $createdFields = [];
public function tearDownFieldTest(): void
{
// Re-login to ensure we are logged in
$this->login();
// Clean all questions that use QuestionTypeField to avoid issues with foreign key constraints when deleting fields
array_map(
fn(Question $question) => $question->delete($question->fields, true),
iterator_to_array(Question::getSeveralFromDBByCrit(['type' => PluginFieldsQuestionType::class])),
);
// Clean created containers
array_map(
fn(PluginFieldsContainer $container) => $container->delete($container->fields, true),
self::$createdContainers,
);
self::$createdContainers = [];
// Clean created fields
array_map(
fn(PluginFieldsField $field) => $field->delete($field->fields, true),
self::$createdFields,
);
self::$createdFields = [];
/** @var DBmysql $DB */
global $DB;
$DB->clearSchemaCache();
}
public function createFieldContainer(array $inputs): PluginFieldsContainer
{
// Re-login to ensure we are logged in
$this->login();
$container = $this->createItem(PluginFieldsContainer::class, $inputs, ['itemtypes']);
self::$createdContainers[] = $container;
// Re-initialize fields plugin to register new container logic
plugin_init_fields();
// Clear DB schema cache to avoid issues with new container
/** @var DBmysql $DB */
global $DB;
$DB->clearSchemaCache();
return $container;
}
public function createField(array $inputs): PluginFieldsField
{
// Re-login to ensure we are logged in
$this->login();
$field = $this->createItem(PluginFieldsField::class, $inputs, ['allowed_values', 'question_types']);
self::$createdFields[] = $field;
// Re-initialize fields plugin to register new field logic
plugin_init_fields();
// Clear DB schema cache to avoid issues with new field
/** @var DBmysql $DB */
global $DB;
$DB->clearSchemaCache();
return $field;
}
}