Chris@0: getForm($entity); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][1]), 'Option 1 exists'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][2]), 'Option 2 exists'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][3]), 'Option 3 exists'); Chris@0: Chris@0: // Use one of the values in an actual entity, and check that this value Chris@0: // cannot be removed from the list. Chris@0: $entity = EntityTest::create(); Chris@0: $entity->{$this->fieldName}->value = 1; Chris@0: $entity->save(); Chris@0: $this->fieldStorage->setSetting('allowed_values', [2 => 'Two']); Chris@0: try { Chris@0: $this->fieldStorage->save(); Chris@0: $this->fail(t('Cannot update a list field storage to not include keys with existing data.')); Chris@0: } Chris@0: catch (FieldStorageDefinitionUpdateForbiddenException $e) { Chris@0: $this->pass(t('Cannot update a list field storage to not include keys with existing data.')); Chris@0: } Chris@0: // Empty the value, so that we can actually remove the option. Chris@0: unset($entity->{$this->fieldName}); Chris@0: $entity->save(); Chris@0: Chris@0: // Removed options do not appear. Chris@0: $this->fieldStorage->setSetting('allowed_values', [2 => 'Two']); Chris@0: $this->fieldStorage->save(); Chris@0: $entity = EntityTest::create(); Chris@0: $form = \Drupal::service('entity.form_builder')->getForm($entity); Chris@0: $this->assertTrue(empty($form[$this->fieldName]['widget'][1]), 'Option 1 does not exist'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][2]), 'Option 2 exists'); Chris@0: $this->assertTrue(empty($form[$this->fieldName]['widget'][3]), 'Option 3 does not exist'); Chris@0: Chris@0: // Completely new options appear. Chris@0: $this->fieldStorage->setSetting('allowed_values', [10 => 'Update', 20 => 'Twenty']); Chris@0: $this->fieldStorage->save(); Chris@0: // The entity holds an outdated field object with the old allowed values Chris@0: // setting, so we need to reinitialize the entity object. Chris@0: $entity = EntityTest::create(); Chris@0: $form = \Drupal::service('entity.form_builder')->getForm($entity); Chris@0: $this->assertTrue(empty($form[$this->fieldName]['widget'][1]), 'Option 1 does not exist'); Chris@0: $this->assertTrue(empty($form[$this->fieldName]['widget'][2]), 'Option 2 does not exist'); Chris@0: $this->assertTrue(empty($form[$this->fieldName]['widget'][3]), 'Option 3 does not exist'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][10]), 'Option 10 exists'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][20]), 'Option 20 exists'); Chris@0: Chris@0: // Options are reset when a new field with the same name is created. Chris@0: $this->fieldStorage->delete(); Chris@0: FieldStorageConfig::create($this->fieldStorageDefinition)->save(); Chris@0: FieldConfig::create([ Chris@0: 'field_name' => $this->fieldName, Chris@0: 'entity_type' => 'entity_test', Chris@0: 'bundle' => 'entity_test', Chris@0: 'required' => TRUE, Chris@0: ])->save(); Chris@0: entity_get_form_display('entity_test', 'entity_test', 'default') Chris@0: ->setComponent($this->fieldName, [ Chris@0: 'type' => 'options_buttons', Chris@0: ]) Chris@0: ->save(); Chris@0: $entity = EntityTest::create(); Chris@0: $form = \Drupal::service('entity.form_builder')->getForm($entity); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][1]), 'Option 1 exists'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][2]), 'Option 2 exists'); Chris@0: $this->assertTrue(!empty($form[$this->fieldName]['widget'][3]), 'Option 3 exists'); Chris@0: Chris@0: // Test the generateSampleValue() method. Chris@0: $entity = EntityTest::create(); Chris@0: $entity->{$this->fieldName}->generateSampleItems(); Chris@0: $this->entityValidateAndSave($entity); Chris@0: } Chris@0: Chris@0: }