From a42729679b602addd828c727e60cf4361cabc316 Mon Sep 17 00:00:00 2001 From: Dylan Wagstaff Date: Sun, 17 Jan 2021 15:29:33 +1300 Subject: [PATCH] FIX account for owner class while removing orphans (#1018) * FIX account for owner class while removing orphans * Explicitly set $page and $block ID's in test fixture Co-authored-by: Steve Boyd --- .../UserFormFieldEditorExtension.php | 1 + tests/Extension/UserFormBlockStub.php | 15 ++++ .../UserFormFieldEditorExtensionTest.php | 77 +++++++++++++++++++ .../UserFormFieldEditorExtensionTest.yml | 23 ++++++ 4 files changed, 116 insertions(+) create mode 100644 tests/Extension/UserFormBlockStub.php create mode 100644 tests/Extension/UserFormFieldEditorExtensionTest.php create mode 100644 tests/Extension/UserFormFieldEditorExtensionTest.yml diff --git a/code/Extension/UserFormFieldEditorExtension.php b/code/Extension/UserFormFieldEditorExtension.php index a4c3a21..b2cf0ed 100644 --- a/code/Extension/UserFormFieldEditorExtension.php +++ b/code/Extension/UserFormFieldEditorExtension.php @@ -196,6 +196,7 @@ class UserFormFieldEditorExtension extends DataExtension $live = Versioned::get_by_stage(EditableFormField::class, Versioned::LIVE) ->filter([ 'ParentID' => $this->owner->ID, + 'ParentClass' => get_class($this->owner), ]); if (!empty($seenIDs)) { diff --git a/tests/Extension/UserFormBlockStub.php b/tests/Extension/UserFormBlockStub.php new file mode 100644 index 0000000..0e22d99 --- /dev/null +++ b/tests/Extension/UserFormBlockStub.php @@ -0,0 +1,15 @@ +objFromFixture(UserDefinedForm::class, 'page'); + $block = $this->objFromFixture(UserFormBlockStub::class, 'block'); + $page->publishRecursive(); + $block->publishRecursive(); + } + + public function testOrphanRemovalDoesNotAffectOtherClassesWithTheSameID() + { + $page = $this->objFromFixture(UserDefinedForm::class, 'page'); + $block = $this->objFromFixture(UserFormBlockStub::class, 'block'); + + // assert setup + $this->assertSame($page->ID, $block->ID); + $this->assertCount(1, $page->Fields()); + $this->assertCount(3, $block->Fields()); + + // ensure setup has affected live mode too + $origReadingMode = Versioned::get_reading_mode(); + Versioned::set_reading_mode(Versioned::LIVE); + + $initialLivePage = UserDefinedForm::get()->First(); + $initialLiveBlock = UserFormBlockStub::get()->First(); + + $this->assertSame($initialLivePage->ID, $initialLiveBlock->ID); + $this->assertCount(1, $initialLivePage->Fields()); + $this->assertCount(3, $initialLiveBlock->Fields()); + + Versioned::set_reading_mode($origReadingMode); + + // execute change + $newField = new EditableEmailField(); + $newField->update([ + 'Name' => 'basic_email_name', + 'Title' => 'Page Email Field' + ]); + $page->Fields()->add($newField); + $page->publishRecursive(); + + // assert effect of change + $checkPage = UserDefinedForm::get()->First(); + $checkBlock = UserFormBlockStub::get()->First(); + + $this->assertCount(2, $checkPage->Fields()); + $this->assertCount(3, $checkBlock->Fields()); + + // ensure this is true for live mode too + $origReadingMode = Versioned::get_reading_mode(); + Versioned::set_reading_mode(Versioned::LIVE); + + $checkLivePage = UserDefinedForm::get()->First(); + $checkLiveBlock = UserFormBlockStub::get()->First(); + $this->assertCount(2, $checkLivePage->Fields()); + $this->assertCount(3, $checkLiveBlock->Fields()); + + Versioned::set_reading_mode($origReadingMode); + } +} diff --git a/tests/Extension/UserFormFieldEditorExtensionTest.yml b/tests/Extension/UserFormFieldEditorExtensionTest.yml new file mode 100644 index 0000000..62c6551 --- /dev/null +++ b/tests/Extension/UserFormFieldEditorExtensionTest.yml @@ -0,0 +1,23 @@ +SilverStripe\UserForms\Model\UserDefinedForm: + page: + ID: 9999 +SilverStripe\UserForms\Tests\Extension\UserFormBlockStub: + block: + ID: 9999 +SilverStripe\UserForms\Model\EditableFormField\EditableTextField: + page-text-field: + Name: basic_text_name + Title: Page Text Field + Parent: =>SilverStripe\UserForms\Model\UserDefinedForm.page + block-text-field-1: + Name: basic_text_name_2 + Title: Block Text Field + Parent: =>SilverStripe\UserForms\Tests\Extension\UserFormBlockStub.block + block-text-field-2: + Name: basic_text_name_3 + Title: Block Text Field + Parent: =>SilverStripe\UserForms\Tests\Extension\UserFormBlockStub.block + block-text-field-3: + Name: basic_text_name_4 + Title: Block Text Field + Parent: =>SilverStripe\UserForms\Tests\Extension\UserFormBlockStub.block