diff --git a/config/schema/metatag.schema.yml b/config/schema/metatag.schema.yml new file mode 100644 index 0000000..29c79e8 --- /dev/null +++ b/config/schema/metatag.schema.yml @@ -0,0 +1,8 @@ +# Schema for metatag +field.value.metatag: + type: mapping + label: 'Default value' + mapping: + value: + type: string + label: 'Metatags' diff --git a/src/Plugin/Field/FieldType/MetatagFieldItem.php b/src/Plugin/Field/FieldType/MetatagFieldItem.php index a6fa392..4eb3c64 100644 --- a/src/Plugin/Field/FieldType/MetatagFieldItem.php +++ b/src/Plugin/Field/FieldType/MetatagFieldItem.php @@ -45,15 +45,6 @@ class MetatagFieldItem extends FieldItemBase { /** * {@inheritdoc} */ - public static function defaultStorageSettings() { - return array( - 'max_length' => 255, - ) + parent::defaultStorageSettings(); - } - - /** - * {@inheritdoc} - */ public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) { $properties['value'] = DataDefinition::create('string') ->setLabel(t('Metatag')) diff --git a/src/Tests/MetatagTest.php b/src/Tests/MetatagTest.php new file mode 100644 index 0000000..3fdd37c --- /dev/null +++ b/src/Tests/MetatagTest.php @@ -0,0 +1,183 @@ +adminUser = $this->drupalCreateUser($this->permissions); + } + + /** + * Tests adding and editing values using metatag. + */ + public function testMetatag() { + $this->drupalLogin($this->adminUser); + // Add a new metatag field. + $this->drupalGet('entity_test/structure/entity_test/fields/add-field'); + $edit = [ + 'label' => 'Metatag', + 'field_name' => 'metatag', + 'new_storage_type' => 'metatag', + ]; + $this->drupalPostForm(NULL, $edit, t('Save and continue')); + // Cardinality should not be editable. + $elements = $this->cssSelect('select[name=cardinality]'); + $element = reset($elements); + $this->assertTrue(count($elements) === 1, 'Found cardinality field'); + $this->assertEqual($element['disabled'], 'disabled', 'Cardinality is disabled'); + $this->drupalPostForm(NULL, [], t('Save field settings')); + + $this->drupalPostForm(NULL, [ + 'default_value_input[field_metatag][0][basic][keywords]' => 'Purple monkey dishwasher', + ], t('Save settings')); + $this->assertRaw(t('Saved %name configuration', ['%name' => 'Metatag'])); + + // Test the fields values/widget. + $this->drupalGet('entity_test/add'); + $this->assertFieldByName('field_metatag[0][basic][keywords]', 'Purple monkey dishwasher', 'Found metatag field metatag'); + + // Submit with no metatags, should use defaults. + $default_entity = $this->doTestDefaultMetatags(); + + // Submit with specific metatags. + $this->drupalGet('entity_test/add'); + $this->doTestOverriddenMetatags(); + + // Change defaults. + $this->drupalPostForm('entity_test/structure/entity_test/fields/entity_test.entity_test.field_metatag', [ + 'default_value_input[field_metatag][0][basic][keywords]' => "I don't own a gun let alone several", + ], t('Save settings')); + + // Test new defaults applied. + $this->drupalGet('entity_test/' . $default_entity->id()); + $elements = $this->cssSelect('meta[name=keywords]'); + $this->assertTrue(count($elements) === 1, 'Found keywords metatag from defaults'); + // @todo Uncomment in https://www.drupal.org/node/2581351. + // $this->assertEqual((string) $elements[0]['content'], "I don't own a gun let alone several", 'Default keywords applied'); + + // @todo Uncomment in https://www.drupal.org/node/2576695. + // $this->doTestUrlMetatags(); + } + + /** + * Tests default metatags are applied. + */ + protected function doTestDefaultMetatags() { + $edit = [ + 'name[0][value]' => 'Barfoo', + 'user_id[0][target_id]' => 'foo (' . $this->adminUser->id() . ')', + ]; + + $this->drupalPostForm(NULL, $edit, t('Save')); + $entities = entity_load_multiple_by_properties('entity_test', [ + 'name' => 'Barfoo', + ]); + $this->assertEqual(1, count($entities), 'Entity was saved'); + $entity = reset($entities); + $this->drupalGet('entity_test/' . $entity->id()); + $elements = $this->cssSelect('meta[name=keywords]'); + $this->assertTrue(count($elements) === 1, 'Found keywords metatag from defaults'); + $this->assertEqual((string) $elements[0]['content'], 'Purple monkey dishwasher', 'Default keywords applied'); + return $entity; + } + + /** + * Tests overridden metatags are applied. + */ + protected function doTestOverriddenMetatags() { + $edit = [ + 'name[0][value]' => 'Wizwang', + 'user_id[0][target_id]' => 'foo (' . $this->adminUser->id() . ')', + 'field_metatag[0][basic][keywords]' => 'She was like yes way and I was like no way and she was like shut-up', + ]; + + $this->drupalPostForm(NULL, $edit, t('Save')); + $entities = entity_load_multiple_by_properties('entity_test', [ + 'name' => 'Wizwang', + ]); + $this->assertEqual(1, count($entities), 'Entity was saved'); + $entity = reset($entities); + $this->drupalGet('entity_test/' . $entity->id()); + $elements = $this->cssSelect('meta[name=keywords]'); + $this->assertTrue(count($elements) === 1, 'Found keywords metatag from defaults'); + $this->assertEqual((string) $elements[0]['content'], 'She was like yes way and I was like no way and she was like shut-up', 'Overridden keywords applied'); + return $entity; + } + + /** + * Tests metatags with urls work. + */ + protected function doTestUrlMetatags() { + $edit = [ + 'name[0][value]' => 'UrlTags', + 'user_id[0][target_id]' => 'foo (' . $this->adminUser->id() . ')', + 'field_metatag[0][open_graph][og_url]' => 'http://example.com/foo.html', + ]; + + $this->drupalPostForm(NULL, $edit, t('Save')); + $entities = entity_load_multiple_by_properties('entity_test', [ + 'name' => 'UrlTags', + ]); + $this->assertEqual(1, count($entities), 'Entity was saved'); + $entity = reset($entities); + $this->drupalGet('entity_test/' . $entity->id()); + $elements = $this->cssSelect("meta[property='og:url']"); + $this->assertTrue(count($elements) === 1, 'Found keywords metatag from defaults'); + $this->assertEqual((string) $elements[0]['content'], 'http://example.com/foo.html'); + return $entity; + } + +}