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