From ace115837a2d4fc9b1a4b0c9fd756a3ebc1d4e15 Mon Sep 17 00:00:00 2001 From: Leo Germani Date: Tue, 18 Sep 2018 10:20:15 -0300 Subject: [PATCH] add validation to date metadata type --- .../date/class-tainacan-date.php | 17 ++++ src/importer/class-tainacan-test-importer.php | 2 +- tests/test-date-metadatum-types.php | 81 +++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 tests/test-date-metadatum-types.php diff --git a/src/classes/metadata-types/date/class-tainacan-date.php b/src/classes/metadata-types/date/class-tainacan-date.php index 98a7e61d7..9bbd54035 100644 --- a/src/classes/metadata-types/date/class-tainacan-date.php +++ b/src/classes/metadata-types/date/class-tainacan-date.php @@ -2,6 +2,8 @@ namespace Tainacan\Metadata_Types; +use Tainacan\Entities\Item_Metadata_Entity; + defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); use Tainacan\Helpers; @@ -28,4 +30,19 @@ class Date extends Metadata_Type { value=\''.json_encode( $itemMetadata->get_value() ).'\' name="'.$itemMetadata->get_metadatum()->get_name().'">'; } + + + public function validate( Item_Metadata_Entity $item_metadata) { + + $value = $item_metadata->get_value(); + + $format = 'Y-m-d'; + + $d = \DateTime::createFromFormat($format, $value); + + return $d && $d->format($format) === $value; + + } + + } \ No newline at end of file diff --git a/src/importer/class-tainacan-test-importer.php b/src/importer/class-tainacan-test-importer.php index ac41b7603..f954e8820 100644 --- a/src/importer/class-tainacan-test-importer.php +++ b/src/importer/class-tainacan-test-importer.php @@ -56,7 +56,7 @@ class Test_Importer extends Importer { ]; protected $date_values = [ - '03/04/1993', '03/12/1998', '10/09/2001', '03/01/2018', '13/11/2016', '22/04/1993' + '1993-12-03', '1998-04-03', '2001-09-10', '2018-01-03', '2016-11-13', '1993-04-22' ]; protected $numeric_values = [ diff --git a/tests/test-date-metadatum-types.php b/tests/test-date-metadatum-types.php new file mode 100644 index 000000000..2822dfdc3 --- /dev/null +++ b/tests/test-date-metadatum-types.php @@ -0,0 +1,81 @@ +tainacan_entity_factory->create_entity( + 'collection', + array( + 'name' => 'test', + ), + true + ); + + + $metadatum = $this->tainacan_entity_factory->create_entity( + 'metadatum', + array( + 'name' => 'meta', + 'description' => 'description', + 'collection' => $collection, + 'metadata_type' => 'Tainacan\Metadata_Types\Date', + 'status' => 'publish', + ), + true + ); + + $i = $this->tainacan_entity_factory->create_entity( + 'item', + array( + 'title' => 'item test', + 'description' => 'adasdasdsa', + 'collection' => $collection, + 'status' => 'publish', + ), + true + ); + + + $item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($i, $metadatum); + + $item_metadata->set_value('2010-01-01'); + $this->assertTrue($item_metadata->validate()); + + $item_metadata->set_value('2010-12-01'); + $this->assertTrue($item_metadata->validate()); + + $item_metadata->set_value('2010-12-31'); + $this->assertTrue($item_metadata->validate()); + + $item_metadata->set_value('2010-22-01'); + $this->assertFalse($item_metadata->validate()); + + $item_metadata->set_value('3/3/1202'); + $this->assertFalse($item_metadata->validate()); + + $item_metadata->set_value('2010-02-30'); + $this->assertFalse($item_metadata->validate()); + + } + + +} \ No newline at end of file