diff options
Diffstat (limited to 'engine/tests/api/metastrings.php')
| -rw-r--r-- | engine/tests/api/metastrings.php | 190 | 
1 files changed, 190 insertions, 0 deletions
| diff --git a/engine/tests/api/metastrings.php b/engine/tests/api/metastrings.php new file mode 100644 index 000000000..0a8945084 --- /dev/null +++ b/engine/tests/api/metastrings.php @@ -0,0 +1,190 @@ +<?php +/** + * Elgg Metastrings test + * + * @package Elgg.Core + * @subpackage Metastrings.Test + */ +class ElggCoreMetastringsTest extends ElggCoreUnitTest { + +	public $metastringTypes = array('metadata', 'annotations'); + +	/** +	 * Called before each test object. +	 */ +	public function __construct() { +		parent::__construct(); + +		$this->metastrings = array(); +		$this->object = new ElggObject(); +		$this->object->save(); +	} + +	public function createAnnotations($max = 1) { +		$annotations = array(); +		for ($i=0; $i<$max; $i++) { +			$name = 'test_annotation_name' . rand(); +			$value = 'test_annotation_value' . rand(); +			$id = create_annotation($this->object->guid, $name, $value); +			$annotations[] = $id; +		} + +		return $annotations; +	} + +	public function createMetadata($max = 1) { +		$metadata = array(); +		for ($i=0; $i<$max; $i++) { +			$name = 'test_metadata_name' . rand(); +			$value = 'test_metadata_value' . rand(); +			$id = create_metadata($this->object->guid, $name, $value); +			$metadata[] = $id; +		} + +		return $metadata; +	} + +	/** +	 * Called before each test method. +	 */ +	public function setUp() { + +	} + +	/** +	 * Called after each test method. +	 */ +	public function tearDown() { +		// do not allow SimpleTest to interpret Elgg notices as exceptions +		$this->swallowErrors(); +	} + +	/** +	 * Called after each test object. +	 */ +	public function __destruct() { +		$this->object->delete(); + +		parent::__destruct(); +	} + +	public function testDeleteByID() { +		$db_prefix = elgg_get_config('dbprefix'); +		$annotations = $this->createAnnotations(1); +		$metadata = $this->createMetadata(1); + +		foreach ($this->metastringTypes as $type) { +			$id = ${$type}[0]; +			$table = $db_prefix . $type; +			$q = "SELECT * FROM $table WHERE id = $id"; +			$test = get_data($q); + +			$this->assertEqual($test[0]->id, $id); +			$this->assertIdentical(true, elgg_delete_metastring_based_object_by_id($id, $type)); +			$this->assertIdentical(array(), get_data($q)); +		} +	} + +	public function testGetMetastringObjectFromID() { +		$db_prefix = elgg_get_config('dbprefix'); +		$annotations = $this->createAnnotations(1); +		$metadata = $this->createMetadata(1); + +		foreach ($this->metastringTypes as $type) { +			$id = ${$type}[0]; +			$test = elgg_get_metastring_based_object_from_id($id, $type); + +			$this->assertEqual($id, $test->id); +		} +	} + +	public function testEnableDisableByID() { +		$db_prefix = elgg_get_config('dbprefix'); +		$annotations = $this->createAnnotations(1); +		$metadata = $this->createMetadata(1); + +		foreach ($this->metastringTypes as $type) { +			$id = ${$type}[0]; +			$table = $db_prefix . $type; +			$q = "SELECT * FROM $table WHERE id = $id"; +			$test = get_data($q); + +			// disable +			$this->assertEqual($test[0]->enabled, 'yes'); +			$this->assertTrue(elgg_set_metastring_based_object_enabled_by_id($id, 'no', $type)); + +			$test = get_data($q); +			$this->assertEqual($test[0]->enabled, 'no'); + +			// enable +			$ashe = access_get_show_hidden_status(); +			access_show_hidden_entities(true); +			flush(); +			$this->assertTrue(elgg_set_metastring_based_object_enabled_by_id($id, 'yes', $type)); + +			$test = get_data($q); +			$this->assertEqual($test[0]->enabled, 'yes'); + +			access_show_hidden_entities($ashe); +		} +	} + +	public function testKeepMeFromDeletingEverything() { +		foreach ($this->metastringTypes as $type) { +			$required = array( +				'guid', 'guids' +			); + +			switch ($type) { +				case 'metadata': +					$metadata_required = array( +						'metadata_owner_guid', 'metadata_owner_guids', +						'metadata_name', 'metadata_names', +						'metadata_value', 'metadata_values' +					); + +					$required = array_merge($required, $metadata_required); +					break; + +				case 'annotations': +					$annotations_required = array( +						'annotation_owner_guid', 'annotation_owner_guids', +						'annotation_name', 'annotation_names', +						'annotation_value', 'annotation_values' +					); + +					$required = array_merge($required, $annotations_required); +					break; +			} + +			$options = array(); +			$this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type)); + +			// limit alone isn't valid: +			$options = array('limit' => 10); +			$this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type)); + +			foreach ($required as $key) { +				$options = array(); + +				$options[$key] = ELGG_ENTITIES_ANY_VALUE; +				$this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = ELGG_ENTITIES_ANY_VALUE"); + +				$options[$key] = ELGG_ENTITIES_NO_VALUE; +				$this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = ELGG_ENTITIES_NO_VALUE"); + +				$options[$key] = false; +				$this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = bool false"); + +				$options[$key] = true; +				$this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = bool true"); + +				$options[$key] = 'test'; +				$this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = 'test'"); + +				$options[$key] = array('test'); +				$this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = array('test')"); +			} +		} +	} +} | 
