From eda15fdc4091e7cf936db4d5a2bb122048c825a5 Mon Sep 17 00:00:00 2001 From: vnmedeiros Date: Wed, 3 Aug 2022 15:19:16 -0300 Subject: [PATCH] fix: return metadata section on delete --- .../class-tainacan-metadata-sections.php | 3 + .../class-tainacan-repository.php | 4 +- tests/test-metadata-section.php | 74 +++++++++++++++++-- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/classes/repositories/class-tainacan-metadata-sections.php b/src/classes/repositories/class-tainacan-metadata-sections.php index 19b2ea4f9..c1ed4b962 100644 --- a/src/classes/repositories/class-tainacan-metadata-sections.php +++ b/src/classes/repositories/class-tainacan-metadata-sections.php @@ -387,6 +387,9 @@ class Metadata_Sections extends Repository { */ public function delete( Entities\Entity $entity, $permanent = true ) { //test if not exist a metadata using this section + if ( !empty( $this->get_metadata_object_list($entity->get_id() ) ) ) { + throw new \Exception( 'The metadata section must not contain metadata before deleted' ); + } return parent::delete($entity, $permanent); } diff --git a/src/classes/repositories/class-tainacan-repository.php b/src/classes/repositories/class-tainacan-repository.php index 0da2ea5c9..f24466aff 100644 --- a/src/classes/repositories/class-tainacan-repository.php +++ b/src/classes/repositories/class-tainacan-repository.php @@ -515,6 +515,7 @@ abstract class Repository { $Tainacan_Metadata = Repositories\Metadata::get_instance(); $Tainacan_Taxonomies = Repositories\Taxonomies::get_instance(); $Tainacan_Terms = Repositories\Terms::get_instance(); + $Tainacan_Metadata_Sections = Repositories\Metadata_Sections::get_instance(); $tnc_globals = [ $Tainacan_Collections, @@ -522,7 +523,8 @@ abstract class Repository { $Tainacan_Filters, $Tainacan_Taxonomies, $Tainacan_Terms, - $Tainacan_Logs + $Tainacan_Logs, + $Tainacan_Metadata_Sections ]; foreach ( $tnc_globals as $tnc_repository ) { $tnc_entity = new $tnc_repository->entities_type(); diff --git a/tests/test-metadata-section.php b/tests/test-metadata-section.php index c3efac2f3..ccd7650bc 100644 --- a/tests/test-metadata-section.php +++ b/tests/test-metadata-section.php @@ -9,15 +9,15 @@ use Tainacan\Metadata_Types; */ /** - * Metadatum test case. + * MetadataSection test case. * @group metadata */ class MetadataSection extends TAINACAN_UnitTestCase { /** - * Test insert a regular metadatum with type + * Test create a metadata section */ - function test_add() { + function test_create() { $Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance(); $Tainacan_Metadata_Section = \Tainacan\Repositories\Metadata_Sections::get_instance(); @@ -55,7 +55,7 @@ class MetadataSection extends TAINACAN_UnitTestCase { ); $test = $Tainacan_Metadata->fetch($metadatum->get_id()); - $section = $Tainacan_Metadata_Section->fetch($metadata_section->get_id()); + $Tainacan_Metadata_Section->fetch($metadata_section->get_id()); $this->assertEquals($test->get_name(), 'metadado'); $this->assertEquals($test->get_description(), 'descricao'); @@ -69,9 +69,69 @@ class MetadataSection extends TAINACAN_UnitTestCase { $this->assertTrue((bool) $test->get_accept_suggestion()); } - // function test_remove() { - // return; - // } + /** + * Test remove a metadata section + */ + function test_remove() { + $Tainacan_Metadata_Section = \Tainacan\Repositories\Metadata_Sections::get_instance(); + + $collection = $this->tainacan_entity_factory->create_entity( + 'collection', + array( + 'name' => 'teste' + ), + true + ); + + $metadata_section_to_delete = $this->tainacan_entity_factory->create_entity( + 'Metadata_Section', + array( + 'name' => 'Section', + 'description' => 'Section Description', + 'collection' => $collection, + 'status' => 'publish' + ), + true + ); + + $metadata_section_no_delete = $this->tainacan_entity_factory->create_entity( + 'Metadata_Section', + array( + 'name' => 'Section', + 'description' => 'Section Description', + 'collection' => $collection, + 'status' => 'publish' + ), + true + ); + + $this->tainacan_entity_factory->create_entity( + 'metadatum', + array( + 'name' => 'metadado', + 'description' => 'descricao', + 'collection' => $collection, + 'accept_suggestion' => true, + 'metadata_type' => 'Tainacan\Metadata_Types\Text', + 'metadata_section_id' => $metadata_section_no_delete->get_id(), + ), + true, + true + ); + + // $Tainacan_Metadata->fetch($metadatum->get_id()); + $section_id = $metadata_section_to_delete->get_id(); + $section = $Tainacan_Metadata_Section->fetch($section_id); + $section = $Tainacan_Metadata_Section->delete($section); + $section_empty = $Tainacan_Metadata_Section->fetch($section_id); + $this->assertEquals($section_id, $section->get_id() ); + $this->assertTrue(empty($section_empty)); + + $this->setExpectedException(\Exception::class); + $section = $Tainacan_Metadata_Section->fetch($metadata_section_no_delete->get_id()); + $Tainacan_Metadata_Section->delete($section); + + } function test_change_section() { $Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();