diff --git a/src/classes/entities/class-tainacan-entity.php b/src/classes/entities/class-tainacan-entity.php index a11bc0cd7..df6f49370 100644 --- a/src/classes/entities/class-tainacan-entity.php +++ b/src/classes/entities/class-tainacan-entity.php @@ -14,22 +14,34 @@ class Entity { * @var \Tainacan\Repositories\Repository */ protected $repository; + /** * Array of errors, for example, register validations errors * @var array */ private $errors = []; + /** * The WordPress post_type for store this class if is needed, false otherwise * @var string */ protected static $post_type = false; + /** * Store the WordPress post object * @var \WP_Post */ public $WP_Post; - + + /** + * Indicates wether an entity was validated, calling the validate() method + * + * Entities MUST be validated before attempt to save + * + * @var boolean + */ + private $validated = false; + /** * return the value for a mapped property * @param string $prop id of property @@ -75,6 +87,7 @@ class Entity { * @param mixed $value the value to be setted */ public function set_mapped_property($prop, $value) { + $this->set_validated(false); $this->$prop = $value; } @@ -96,6 +109,7 @@ class Entity { $is_valid = false; } + $this->set_validated($is_valid); return $is_valid; } @@ -158,5 +172,19 @@ class Entity { public function reset_errors() { $this->errors = []; } + + public function get_validated() { + return $this->validated; + } + + protected function set_validated($value) { + $this->validated = $value; + } + + protected function set_as_valid() { + $this->reset_errors(); + $this->set_validated(true); + return true; + } } \ No newline at end of file diff --git a/src/classes/entities/class-tainacan-item-metadata-entity.php b/src/classes/entities/class-tainacan-item-metadata-entity.php index 5d814c982..834b21304 100644 --- a/src/classes/entities/class-tainacan-item-metadata-entity.php +++ b/src/classes/entities/class-tainacan-item-metadata-entity.php @@ -146,7 +146,7 @@ class Item_Metadata_Entity extends Entity { return false; } - $this->reset_errors(); + $this->set_as_valid(); return true; } else { $this->add_error('invalid', $metadata->get_name() . ' is invalid'); @@ -174,7 +174,7 @@ class Item_Metadata_Entity extends Entity { // TODO: call fieldType validation // - $this->reset_errors(); + $this->set_as_valid(); return true; } } diff --git a/src/classes/entities/class-tainacan-log.php b/src/classes/entities/class-tainacan-log.php index bc4848581..8fa8d890e 100644 --- a/src/classes/entities/class-tainacan-log.php +++ b/src/classes/entities/class-tainacan-log.php @@ -224,7 +224,11 @@ class Log extends Entity { throw new \Exception('msn or new_value is need to log'); } global $Tainacan_Logs; - return $Tainacan_Logs->insert($log); + if ($log->validate()) { + return $Tainacan_Logs->insert($log); + } else { + throw new \Exception('Invalid log'); + } } } \ No newline at end of file diff --git a/src/classes/repositories/class-tainacan-logs.php b/src/classes/repositories/class-tainacan-logs.php index 2734fcb41..23df3a1f3 100644 --- a/src/classes/repositories/class-tainacan-logs.php +++ b/src/classes/repositories/class-tainacan-logs.php @@ -158,7 +158,7 @@ class Logs extends Repository { foreach ($posts as $post) { $log = new Entities\Log($post); } - // TODO: Pegar coleções registradas via código + return $log; } diff --git a/src/classes/repositories/class-tainacan-repository.php b/src/classes/repositories/class-tainacan-repository.php index d8397fe8e..5c3b1cdfb 100644 --- a/src/classes/repositories/class-tainacan-repository.php +++ b/src/classes/repositories/class-tainacan-repository.php @@ -25,10 +25,11 @@ abstract class Repository { */ public function insert($obj) { // validate - if (!$obj->validate()){ - return $obj->get_errors(); + if (!$obj->get_validated()){ + throw new \Exception('Entities must be validated before you can save them'); + // TODO: Throw Warning saying you must validate object before insert() } - // TODO: Throw Warning saying you must validate object before insert() + $map = $this->get_map(); diff --git a/tests/test-collections.php b/tests/test-collections.php index 5ab012fe0..1c5a22fcf 100644 --- a/tests/test-collections.php +++ b/tests/test-collections.php @@ -25,6 +25,7 @@ class Collections extends \WP_UnitTestCase { $x->set_default_order('DESC'); global $Tainacan_Collections; + $x->validate(); $col = $Tainacan_Collections->insert($x); $this->assertEquals('Tainacan\Entities\Collection', get_class($col)); @@ -50,6 +51,7 @@ class Collections extends \WP_UnitTestCase { $x->set_default_order('DESC'); global $Tainacan_Collections; + $x->validate(); $col = $Tainacan_Collections->insert($x); $collection = $Tainacan_Collections->fetch($col->get_id()); @@ -63,6 +65,7 @@ class Collections extends \WP_UnitTestCase { $i->set_collection($collection); global $Tainacan_Items; + $i->validate(); $item = $Tainacan_Items->insert( $i ); $item = $Tainacan_Items->fetch( $item->get_id() ); diff --git a/tests/test-filters.php b/tests/test-filters.php index d2d17aee5..774ea6920 100644 --- a/tests/test-filters.php +++ b/tests/test-filters.php @@ -21,6 +21,7 @@ class Filters extends \WP_UnitTestCase { $filter = new \Tainacan\Entities\Filter(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -28,6 +29,7 @@ class Filters extends \WP_UnitTestCase { $filter->set_collection( $collection ); //inserindo o metadado + $filter->validate(); $filter = $Tainacan_Filters->insert( $filter ); $test = $Tainacan_Filters->fetch( $filter->get_id() ); @@ -47,6 +49,7 @@ class Filters extends \WP_UnitTestCase { $filter_range_type = new \Tainacan\Filter_Types\Range(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -56,6 +59,7 @@ class Filters extends \WP_UnitTestCase { //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); //inserindo o filtro @@ -68,6 +72,7 @@ class Filters extends \WP_UnitTestCase { $filter->set_filter_type_object( $filter_list_type ); + $filter->validate(); $filter = $Tainacan_Filters->insert( $filter ); $test = $Tainacan_Filters->fetch( $filter->get_id() ); diff --git a/tests/test-item-metadata.php b/tests/test-item-metadata.php index 66084cda3..95a53d384 100644 --- a/tests/test-item-metadata.php +++ b/tests/test-item-metadata.php @@ -24,6 +24,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata = new \Tainacan\Entities\Metadata(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -32,6 +33,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata->set_collection( $collection ); //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $test = $Tainacan_Metadatas->fetch($metadata->get_id()); @@ -43,6 +45,7 @@ class Item_Metadata extends \WP_UnitTestCase { $i->set_collection($collection); global $Tainacan_Items; + $i->validate(); $item = $Tainacan_Items->insert($i); $item = $Tainacan_Items->fetch($item->get_id()); @@ -69,6 +72,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata = new \Tainacan\Entities\Metadata(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -78,6 +82,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata->set_required( 'yes' ); //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $test = $Tainacan_Metadatas->fetch($metadata->get_id()); @@ -89,6 +94,7 @@ class Item_Metadata extends \WP_UnitTestCase { $i->set_collection($collection); global $Tainacan_Items; + $i->validate(); $item = $Tainacan_Items->insert($i); $item = $Tainacan_Items->fetch($item->get_id()); @@ -114,6 +120,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata = new \Tainacan\Entities\Metadata(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -123,6 +130,7 @@ class Item_Metadata extends \WP_UnitTestCase { $metadata->set_collection_key( 'yes' ); //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $test = $Tainacan_Metadatas->fetch($metadata->get_id()); @@ -134,6 +142,7 @@ class Item_Metadata extends \WP_UnitTestCase { $i->set_collection($collection); global $Tainacan_Items; + $i->validate(); $item = $Tainacan_Items->insert($i); $item = $Tainacan_Items->fetch($item->get_id()); @@ -145,6 +154,7 @@ class Item_Metadata extends \WP_UnitTestCase { $item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($item, $metadata); $item_metadata->set_value($value); $this->assertTrue($item_metadata->validate()); + $item_metadata->validate(); $item_metadata = $Tainacan_Item_Metadata->insert($item_metadata); $n_item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($item, $metadata); diff --git a/tests/test-items.php b/tests/test-items.php index 5d125f125..d48b8ae76 100644 --- a/tests/test-items.php +++ b/tests/test-items.php @@ -23,8 +23,10 @@ class Items extends \WP_UnitTestCase { $collection2 = new \Tainacan\Entities\Collection(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); $collection2->set_name('teste2'); + $collection2->validate(); $collection2 = $Tainacan_Collections->insert($collection2); $metadata = new \Tainacan\Entities\Metadata(); @@ -33,12 +35,15 @@ class Items extends \WP_UnitTestCase { $metadata->set_name('metadado'); $metadata->set_collection( $collection ); + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $metadata2->set_name('metadado2'); $metadata2->set_collection( $collection2 ); + $metadata2->validate(); $metadata2 = $Tainacan_Metadatas->insert($metadata2); $metadata3->set_name('metadado3'); $metadata3->set_collection( $collection2 ); + $metadata3->validate(); $metadata3 = $Tainacan_Metadatas->insert($metadata3); global $Tainacan_Items; @@ -46,6 +51,7 @@ class Items extends \WP_UnitTestCase { $i->set_title('orange'); $i->set_collection($collection); $i->add_metadata($metadata, 'value_1'); + $i->validate(); $item = $Tainacan_Items->insert($i); $item = $Tainacan_Items->fetch($item->get_id()); @@ -60,6 +66,7 @@ class Items extends \WP_UnitTestCase { $i->set_collection($collection2); $i->add_metadata($metadata2, 'value_2'); $i->add_metadata($metadata3, 'value_2'); + $i->validate(); $item = $Tainacan_Items->insert($i); $i = new \Tainacan\Entities\Item(); @@ -68,6 +75,7 @@ class Items extends \WP_UnitTestCase { $i->add_metadata($metadata2, 'value_2'); $i->add_metadata($metadata2, 'value_3'); // if we set twice, value is overridden $i->add_metadata($metadata3, 'value_3'); + $i->validate(); $item = $Tainacan_Items->insert($i); $i = new \Tainacan\Entities\Item(); @@ -75,6 +83,7 @@ class Items extends \WP_UnitTestCase { $i->set_collection($collection2); $i->add_metadata($metadata2, 'value_3'); $i->add_metadata($metadata3, 'value_6'); + $i->validate(); $item = $Tainacan_Items->insert($i); // should return all 4 items diff --git a/tests/test-logs.php b/tests/test-logs.php index 39fb5ec97..eaeb160a2 100644 --- a/tests/test-logs.php +++ b/tests/test-logs.php @@ -32,6 +32,7 @@ class Logs extends \WP_UnitTestCase { $blog_id = get_current_blog_id(); //inserindo + $log->validate(); $log = $Tainacan_Logs->insert($log); //retorna a taxonomia @@ -48,9 +49,11 @@ class Logs extends \WP_UnitTestCase { $value->set_default_order('DESC'); global $Tainacan_Collections; + $value->validate(); $value = $Tainacan_Collections->insert($value); $value->set_name('new_testeLogs'); + $value->validate(); $new_value = $Tainacan_Collections->insert($value); $create_log = Log::create('teste create', 'testing a log creation function', $new_value, $value); diff --git a/tests/test-metadata.php b/tests/test-metadata.php index f76a04636..01f09072b 100644 --- a/tests/test-metadata.php +++ b/tests/test-metadata.php @@ -23,6 +23,7 @@ class Metadata extends \WP_UnitTestCase { $metadata = new \Tainacan\Entities\Metadata(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -31,6 +32,7 @@ class Metadata extends \WP_UnitTestCase { $metadata->set_collection( $collection ); //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $test = $Tainacan_Metadatas->fetch($metadata->get_id()); @@ -52,6 +54,7 @@ class Metadata extends \WP_UnitTestCase { $type = new \Tainacan\Field_Types\Text(); $collection->set_name('teste'); + $collection->validate(); $collection = $Tainacan_Collections->insert($collection); //setando os valores na classe do metadado @@ -61,6 +64,7 @@ class Metadata extends \WP_UnitTestCase { //inserindo o metadado + $metadata->validate(); $metadata = $Tainacan_Metadatas->insert($metadata); $test = $Tainacan_Metadatas->fetch($metadata->get_id()); @@ -88,21 +92,25 @@ class Metadata extends \WP_UnitTestCase { $metadata_default->set_name('metadata default'); $metadata_default->set_collection_id( $Tainacan_Metadatas->get_default_metadata_attribute() ); $metadata_default->set_field_type_object( $type ); + $metadata_default->validate(); $Tainacan_Metadatas->insert($metadata_default); //creating collection grandfather $collection_grandfather->set_name('collection grandfather'); + $collection_grandfather->validate(); $collection_grandfather = $Tainacan_Collections->insert($collection_grandfather); //creating metadata grandfather $metadata_grandfather->set_name('metadata grandfather'); $metadata_grandfather->set_collection_id( $collection_grandfather->get_id() ); $metadata_grandfather->set_field_type_object( $type ); + $metadata_grandfather->validate(); $Tainacan_Metadatas->insert($metadata_grandfather); //creating collection father $collection_father->set_name('collection father'); $collection_father->set_parent( $collection_grandfather->get_id() ); + $collection_father->validate(); $collection_father = $Tainacan_Collections->insert( $collection_father ); $this->assertEquals( $collection_grandfather->get_id(), $collection_father->get_parent() ); @@ -111,11 +119,13 @@ class Metadata extends \WP_UnitTestCase { $metadata_father->set_name('metadata father'); $metadata_father->set_collection_id( $collection_father->get_id() ); $metadata_father->set_field_type_object( $type ); + $metadata_father->validate(); $Tainacan_Metadatas->insert($metadata_father); //creating collection son $collection_son->set_name('collection son'); $collection_son->set_parent( $collection_father->get_id() ); + $collection_son->validate(); $collection_son = $Tainacan_Collections->insert($collection_son); $this->assertEquals( $collection_father->get_id(), $collection_son->get_parent() ); @@ -124,6 +134,7 @@ class Metadata extends \WP_UnitTestCase { $metadata_son->set_name('metadata son'); $metadata_son->set_collection_id( $collection_son->get_id() ); $metadata_son->set_field_type_object( $type ); + $metadata_son->validate(); $Tainacan_Metadatas->insert($metadata_son); $retrieve_metadata = $Tainacan_Metadatas->fetch_by_collection( $collection_son, [], 'OBJECT' ); diff --git a/tests/test-taxonomies.php b/tests/test-taxonomies.php index 1756f68d2..f4ed83835 100644 --- a/tests/test-taxonomies.php +++ b/tests/test-taxonomies.php @@ -28,6 +28,7 @@ class Taxonomies extends \WP_UnitTestCase { $taxonomy->set_allow_insert(true); //inserindo + $taxonomy->validate(); $taxonomy = $Tainacan_Taxonomies->insert($taxonomy); //retorna a taxonomia @@ -48,6 +49,7 @@ class Taxonomies extends \WP_UnitTestCase { $taxonomy->set_name('genero'); //insere a taxonomia + $taxonomy->validate(); $taxonomy = $Tainacan_Taxonomies->insert($taxonomy); //retorna a taxonomia