forçando entidades a serem validadas antes de salvar

This commit is contained in:
Leo Germani 2017-11-30 16:00:25 -02:00
parent 1eb0dad205
commit 0124e57c07
12 changed files with 84 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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');
}
}
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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() );

View File

@ -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() );

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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' );

View File

@ -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