function testPublishingNormalField()
 {
     $id = $this->form->ID;
     // test a normal field
     $field = new EditableFormField();
     $field->write();
     $this->form->Fields()->add($field);
     // upon adding it, it shouldn't  be on the live site
     $live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = {$id}");
     $this->assertFalse($live);
     // upon publishing the field should exist
     $this->form->doPublish();
     $live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = {$id}");
     $this->assertEquals($live->Fields()->Count(), 1);
 }
 /**
  * Migrate custom settings for the given field
  *
  * @param EditableFormField $field
  * @param string $stage
  */
 protected function migrateCustomSettings(EditableFormField $field, $stage)
 {
     // Custom settings include:
     // - ExtraClass
     // - RightTitle
     // - ShowOnLoad (show or '' are treated as true)
     //
     // - CheckedDefault (new field on EditableCheckbox - should be read from old "default" value)
     // - Default (EditableCheckbox)
     // - DefaultToToday (EditableDateField)
     // - Folder (EditableFileField)
     // - Level (EditableFormHeading)
     // - HideFromReports (EditableFormHeading / EditableLiteralField)
     // - Content (EditableLiteralField)
     // - GroupID (EditableMemberListField)
     // - MinValue (EditableNumericField)
     // - MaxValue (EditableNumericField)
     // - MinLength (EditableTextField)
     // - MaxLength (EditableTextField)
     // - Rows (EditableTextField)
     $customSettings = $field->CustomSettings ? unserialize($field->CustomSettings) : array();
     // Skip blank rules or fields with custom rules already
     if (empty($customSettings)) {
         return;
     }
     $field->migrateSettings($customSettings);
     $field->write();
 }