Add tests for duplicating multiple option fields, which should duplicate the options too

This commit is contained in:
Robbie Averill 2018-03-23 11:43:50 +13:00 committed by Daniel Hensby
parent 8c4363d429
commit 3e71cf7840
No known key found for this signature in database
GPG Key ID: D8DEBC4C8E7BC8B9
4 changed files with 42 additions and 0 deletions

View File

@ -126,6 +126,7 @@ class EditableMultipleOptionField extends EditableFormField
$clonedNode = parent::duplicate($doWrite, $manyMany);
foreach ($this->Options() as $field) {
/** @var EditableOption $newField */
$newField = $field->duplicate(false);
$newField->ParentID = $clonedNode->ID;
$newField->Version = 0;

View File

@ -44,4 +44,14 @@ class EditableDropdownTest extends SapphireTest
$field->Name = 'EditableFormField_123456';
$this->assertEmpty($field->getFormField()->Title());
}
public function testDuplicate()
{
/** @var EditableDropdown $dropdown */
$dropdown = $this->objFromFixture(EditableDropdown::class, 'basic-dropdown');
$this->assertCount(2, $dropdown->Options());
$duplicatedDropdown = $dropdown->duplicate();
$this->assertSame($dropdown->Options()->count(), $duplicatedDropdown->Options()->count());
}
}

View File

@ -375,6 +375,32 @@ class UserDefinedFormTest extends FunctionalTest
$this->assertNotEquals($form2GroupEnd->ID, $form3GroupStart->EndID);
}
public function testDuplicateFormDuplicatesRecursively()
{
$this->logInWithPermission('ADMIN');
/** @var UserDefinedForm $form */
$form = $this->objFromFixture(UserDefinedForm::class, 'form-with-multioptions');
$this->assertCount(2, $form->Fields(), 'Fixtured page has one field plus one form step');
$this->assertCount(
2,
$form->Fields()->Last()->Options(),
'Fixtured multiple option field has two options'
);
$newForm = $form->duplicate();
$this->assertEquals(
$form->Fields()->count(),
$newForm->Fields()->count(),
'Duplicated page has same number of fields'
);
$this->assertEquals(
$form->Fields()->Last()->Options()->count(),
$newForm->Fields()->Last()->Options()->count(),
'Duplicated dropdown field from duplicated form has duplicated options'
);
}
public function testFormOptions()
{
$this->logInWithPermission('ADMIN');

View File

@ -344,3 +344,8 @@ SilverStripe\UserForms\Model\UserDefinedForm:
Fields:
- =>SilverStripe\UserForms\Model\EditableFormField\EditableEmailField.another-email-field
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.another-required
form-with-multioptions:
Title: Form with MultipleOption fields
Fields:
- =>SilverStripe\UserForms\Model\EditableFormField\EditableDropdown.basic-dropdown