1<?php
2/**
3 *
4 */
5
6namespace Elgg;
7
8use Elgg\Database\Seeds\Seeding;
9use ElggEntity;
10
11trait TestSeeding {
12
13	use Seeding;
14
15	/**
16	 * @var ElggEntity
17	 */
18	private $_seeds = [];
19
20	public function clearSeeds() {
21
22		_elgg_services()->hooks->backup();
23		_elgg_services()->events->backup();
24
25		foreach ($this->_seeds as $seed) {
26			$seed->delete();
27		}
28
29		_elgg_services()->hooks->restore();
30		_elgg_services()->events->restore();
31	}
32
33	/**
34	 * Create an entity for testing with all hooks, events and permissions check disabled
35	 *
36	 * @param string $types      An array of entity types
37	 * @param array  $attributes Entity attributes
38	 * @param array  $metadata   Entity metadata
39	 *
40	 * @return ElggEntity
41	 */
42	public function createOne($types = 'object', array $attributes = [], array $metadata = []) {
43		$seeds = $this->createMany($types, 1, $attributes, $metadata);
44
45		return array_shift($seeds);
46	}
47
48	/**
49	 * Create a set of entities for testing with all hooks, events and permissions check disabled
50	 *
51	 * @param mixed $types An array of entity types
52	 * @param int   $limit Number of entities to seed
53	 *
54	 * @return ElggEntity[]
55	 */
56	public function createMany($types = 'object', $limit = 2, array $attributes = [], array $metadata = []) {
57
58		_elgg_services()->hooks->backup();
59		_elgg_services()->events->backup();
60
61		$types = (array) $types;
62
63		$seeds = [];
64
65		foreach ($types as $type) {
66			$seeded = 0;
67			while ($seeded < $limit) {
68				$seeded++;
69				if (!isset($attributes['subtype'])) {
70					$attributes['subtype'] = $this->getRandomSubtype();
71				}
72				switch ($type) {
73					case 'object' :
74						$seeds[] = $this->createObject($attributes, $metadata);
75						break;
76
77					case 'user' :
78						$seeds[] = $this->createUser($attributes, $metadata);
79						break;
80
81					case 'group' :
82						$seeds[] = $this->createGroup($attributes, $metadata);
83						break;
84				}
85
86			}
87		}
88
89		$this->_seeds = array_merge($this->_seeds, $seeds);
90
91		_elgg_services()->hooks->restore();
92		_elgg_services()->events->restore();
93
94		return $seeds;
95	}
96}
97