81 : TreeInterface
82 {
83 $mock = $this->createMock(TreeInterface::class);
84
85
86 $mock->method('isDeleted')
87 ->willReturnCallback(function (int $child) {
88 foreach ($this->tree_data as $tree_id => $entries) {
89 if (isset($entries[$child])) {
90 return ($tree_id < 0);
91 }
92 }
93 return false;
94 });
95
96
97 $mock->method('getNodeData')
98 ->willReturnCallback(function (int $child) use ($tree_id) {
99 return $this->tree_data[$tree_id][$child];
100 });
101
102 $mock->method('useCache')
103 ->willReturnCallback(function (bool $a_use) {
104 });
105
106
107 $mock->method('getSubTree')
108 ->willReturnCallback(function (array $node) use ($tree_id) {
109 $childs[$node["child"]] = $node;
110 $data = $this->tree_data[$tree_id];
112 return $childs;
113 });
114
115
116 $mock->method('getDeletedTreeNodeIds')
117 ->willReturnCallback(function (array $ids) use ($mock) {
118 $deleted_ids = [];
119 foreach ($ids as
$id) {
120 if ($mock->isDeleted(
$id)) {
121 $deleted_ids[] =
$id;
122 }
123 }
124 return $deleted_ids;
125 });
126
127
128 $mock->method('getTree')
129 ->willReturnCallback(function (int $tree_id) {
131 });
132
133
134 $mock->method('getTrashTree')
135 ->willReturnCallback(function (int $child) use ($mock) {
136 foreach ($this->tree_data as $tree_id => $entries) {
137 if (isset($entries[$child]) && $tree_id < 0) {
138 return $mock->getTree($tree_id);
139 }
140 }
141 });
142
143
144 $mock->method('moveToTrash')
145 ->willReturnCallback(function (int $child) use ($mock, $tree_id) {
146 $moved = false;
147 foreach ($mock->getSubTree($mock->getNodeData($child)) as $subnode) {
148 if (isset($this->tree_data[$tree_id][$subnode["child"]])) {
149 unset($this->tree_data[$tree_id][$subnode["child"]]);
150 $subnode["tree"] = -$child;
151 $this->tree_data[-$child][$subnode["child"]] = $subnode;
152 $moved = true;
153 }
154 }
155 return $moved;
156 });
157
158
159 $mock->method('deleteTree')
160 ->willReturnCallback(function (array $node_data) use ($mock, $tree_id) {
161 foreach ($mock->getSubTree($node_data) as $subnode) {
162 unset($this->tree_data[$tree_id][$subnode["child"]]);
163 }
164 });
165
166
167 $mock->method('getTrashedSubtrees')
168 ->willReturnCallback(
function (
int $ref_id) {
169 $tree_ids = [];
170 foreach ($this->tree_data as $tree_id => $entries) {
171 foreach ($entries as $entry) {
172 if ($entry[
"parent"] ==
$ref_id) {
173 if ($tree_id < 0 && $tree_id === -1 * $entry["child"]) {
174 $tree_ids[] = $tree_id;
175 }
176 }
177 }
178 }
179 return $tree_ids;
180 });
181
182 return $mock;
183 }
createTreeInterfaceMock(int $tree_id)