'example_entity_type', ]; return new EntityType($definition); } /** * @covers ::get * * @dataProvider providerTestGet */ public function testGet(array $defintion, $key, $expected) { $entity_type = $this->setUpEntityType($defintion); $this->assertSame($expected, $entity_type->get($key)); } /** * @covers ::set * @covers ::get * * @dataProvider providerTestSet */ public function testSet($key, $value) { $entity_type = $this->setUpEntityType([]); $this->assertInstanceOf('Drupal\Core\Entity\EntityTypeInterface', $entity_type->set($key, $value)); $this->assertSame($value, $entity_type->get($key)); $this->assertNoPublicProperties($entity_type); } /** * Tests the getKeys() method. * * @dataProvider providerTestGetKeys */ public function testGetKeys($entity_keys, $expected) { $entity_type = $this->setUpEntityType(['entity_keys' => $entity_keys]); $this->assertSame($expected + ['default_langcode' => 'default_langcode'], $entity_type->getKeys()); } /** * Tests the getKey() method. * * @dataProvider providerTestGetKeys */ public function testGetKey($entity_keys, $expected) { $entity_type = $this->setUpEntityType(['entity_keys' => $entity_keys]); $this->assertSame($expected['bundle'], $entity_type->getKey('bundle')); $this->assertSame(FALSE, $entity_type->getKey('bananas')); } /** * Tests the hasKey() method. * * @dataProvider providerTestGetKeys */ public function testHasKey($entity_keys, $expected) { $entity_type = $this->setUpEntityType(['entity_keys' => $entity_keys]); $this->assertSame(!empty($expected['bundle']), $entity_type->hasKey('bundle')); $this->assertSame(!empty($expected['id']), $entity_type->hasKey('id')); $this->assertSame(FALSE, $entity_type->hasKey('bananas')); } /** * Provides test data for testGet. */ public function providerTestGet() { return [ [[], 'provider', NULL], [['provider' => ''], 'provider', ''], [['provider' => 'test'], 'provider', 'test'], [[], 'something_additional', NULL], [['something_additional' => ''], 'something_additional', ''], [['something_additional' => 'additional'], 'something_additional', 'additional'], ]; } /** * Provides test data for testSet. */ public function providerTestSet() { return [ ['provider', NULL], ['provider', ''], ['provider', 'test'], ['something_additional', NULL], ['something_additional', ''], ['something_additional', 'additional'], ]; } /** * Provides test data. */ public function providerTestGetKeys() { return [ [[], ['revision' => '', 'bundle' => '', 'langcode' => '']], [['id' => 'id'], ['id' => 'id', 'revision' => '', 'bundle' => '', 'langcode' => '']], [['bundle' => 'bundle'], ['bundle' => 'bundle', 'revision' => '', 'langcode' => '']], ]; } /** * Tests the isRevisionable() method. */ public function testIsRevisionable() { $entity_type = $this->setUpEntityType(['entity_keys' => ['id' => 'id']]); $this->assertFalse($entity_type->isRevisionable()); $entity_type = $this->setUpEntityType(['entity_keys' => ['id' => 'id', 'revision' => FALSE]]); $this->assertFalse($entity_type->isRevisionable()); $entity_type = $this->setUpEntityType(['entity_keys' => ['id' => 'id', 'revision' => TRUE]]); $this->assertTrue($entity_type->isRevisionable()); } /** * Tests the getHandler() method. */ public function testGetHandler() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([ 'handlers' => [ 'storage' => $controller, 'form' => [ 'default' => $controller, ], ], ]); $this->assertSame($controller, $entity_type->getHandlerClass('storage')); $this->assertSame($controller, $entity_type->getHandlerClass('form', 'default')); } /** * Tests the getStorageClass() method. */ public function testGetStorageClass() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([ 'handlers' => [ 'storage' => $controller, ], ]); $this->assertSame($controller, $entity_type->getStorageClass()); } /** * Tests the setStorageClass() method. */ public function testSetStorageClass() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([]); $this->assertSame($entity_type, $entity_type->setStorageClass($controller)); } /** * Tests the getListBuilderClass() method. */ public function testGetListBuilderClass() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([ 'handlers' => [ 'list_builder' => $controller, ], ]); $this->assertSame($controller, $entity_type->getListBuilderClass()); } /** * Tests the getAccessControlClass() method. */ public function testGetAccessControlClass() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([ 'handlers' => [ 'access' => $controller, ], ]); $this->assertSame($controller, $entity_type->getAccessControlClass()); } /** * Tests the getFormClass() method. */ public function testGetFormClass() { $controller = $this->getTestHandlerClass(); $operation = 'default'; $entity_type = $this->setUpEntityType([ 'handlers' => [ 'form' => [ $operation => $controller, ], ], ]); $this->assertSame($controller, $entity_type->getFormClass($operation)); } /** * Tests the hasFormClasses() method. */ public function testHasFormClasses() { $controller = $this->getTestHandlerClass(); $operation = 'default'; $entity_type1 = $this->setUpEntityType([ 'handlers' => [ 'form' => [ $operation => $controller, ], ], ]); $entity_type2 = $this->setUpEntityType([ 'handlers' => [], ]); $this->assertTrue($entity_type1->hasFormClasses()); $this->assertFalse($entity_type2->hasFormClasses()); } /** * Tests the getViewBuilderClass() method. */ public function testGetViewBuilderClass() { $controller = $this->getTestHandlerClass(); $entity_type = $this->setUpEntityType([ 'handlers' => [ 'view_builder' => $controller, ], ]); $this->assertSame($controller, $entity_type->getViewBuilderClass()); } /** * @covers ::__construct */ public function testIdExceedsMaxLength() { $id = $this->randomMachineName(33); $message = 'Attempt to create an entity type with an ID longer than 32 characters: ' . $id; $this->setExpectedException('Drupal\Core\Entity\Exception\EntityTypeIdLengthException', $message); $this->setUpEntityType(['id' => $id]); } /** * @covers ::getOriginalClass */ public function testgetOriginalClassUnchanged() { $class = $this->randomMachineName(); $entity_type = $this->setUpEntityType(['class' => $class]); $this->assertEquals($class, $entity_type->getOriginalClass()); } /** * @covers ::setClass * @covers ::getOriginalClass */ public function testgetOriginalClassChanged() { $class = $this->randomMachineName(); $entity_type = $this->setUpEntityType(['class' => $class]); $entity_type->setClass($this->randomMachineName()); $this->assertEquals($class, $entity_type->getOriginalClass()); } /** * @covers ::id */ public function testId() { $id = $this->randomMachineName(32); $entity_type = $this->setUpEntityType(['id' => $id]); $this->assertEquals($id, $entity_type->id()); } /** * @covers ::getLabel */ public function testGetLabel() { $translatable_label = new TranslatableMarkup($this->randomMachineName()); $entity_type = $this->setUpEntityType(['label' => $translatable_label]); $this->assertSame($translatable_label, $entity_type->getLabel()); $label = $this->randomMachineName(); $entity_type = $this->setUpEntityType(['label' => $label]); $this->assertSame($label, $entity_type->getLabel()); } /** * @covers ::getGroupLabel */ public function testGetGroupLabel() { $translatable_group_label = new TranslatableMarkup($this->randomMachineName()); $entity_type = $this->setUpEntityType(['group_label' => $translatable_group_label]); $this->assertSame($translatable_group_label, $entity_type->getGroupLabel()); $default_label = $this->randomMachineName(); $entity_type = $this->setUpEntityType(['group_label' => $default_label]); $this->assertSame($default_label, $entity_type->getGroupLabel()); $default_label = new TranslatableMarkup('Other', [], ['context' => 'Entity type group']); $entity_type = $this->setUpEntityType(['group_label' => $default_label]); $this->assertSame($default_label, $entity_type->getGroupLabel()); } /** * @covers ::getCollectionLabel */ public function testGetCollectionLabel() { $translatable_label = new TranslatableMarkup('Entity test collection', [], [], $this->getStringTranslationStub()); $entity_type = $this->setUpEntityType(['label_collection' => $translatable_label]); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('Entity test collection', $entity_type->getCollectionLabel()); } /** * @covers ::getSingularLabel */ public function testGetSingularLabel() { $translatable_label = new TranslatableMarkup('entity test singular', [], [], $this->getStringTranslationStub()); $entity_type = $this->setUpEntityType(['label_singular' => $translatable_label]); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('entity test singular', $entity_type->getSingularLabel()); } /** * @covers ::getSingularLabel */ public function testGetSingularLabelDefault() { $entity_type = $this->setUpEntityType(['label' => 'Entity test Singular']); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('entity test singular', $entity_type->getSingularLabel()); } /** * @covers ::getPluralLabel */ public function testGetPluralLabel() { $translatable_label = new TranslatableMarkup('entity test plural', [], [], $this->getStringTranslationStub()); $entity_type = $this->setUpEntityType(['label_plural' => $translatable_label]); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('entity test plural', $entity_type->getPluralLabel()); } /** * @covers ::getPluralLabel */ public function testGetPluralLabelDefault() { $entity_type = $this->setUpEntityType(['label' => 'Entity test Plural']); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('entity test plural entities', $entity_type->getPluralLabel()); } /** * @covers ::getCountLabel */ public function testGetCountLabel() { $entity_type = $this->setUpEntityType(['label_count' => ['singular' => 'one entity test', 'plural' => '@count entity test']]); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('one entity test', $entity_type->getCountLabel(1)); $this->assertEquals('2 entity test', $entity_type->getCountLabel(2)); $this->assertEquals('200 entity test', $entity_type->getCountLabel(200)); } /** * @covers ::getCountLabel */ public function testGetCountLabelDefault() { $entity_type = $this->setUpEntityType(['label' => 'Entity test Plural']); $entity_type->setStringTranslation($this->getStringTranslationStub()); $this->assertEquals('1 entity test plural', $entity_type->getCountLabel(1)); $this->assertEquals('2 entity test plural entities', $entity_type->getCountLabel(2)); $this->assertEquals('200 entity test plural entities', $entity_type->getCountLabel(200)); } /** * Gets a mock controller class name. * * @return string * A mock controller class name. */ protected function getTestHandlerClass() { return get_class($this->getMockForAbstractClass('Drupal\Core\Entity\EntityHandlerBase')); } /** * @covers ::setLinkTemplate */ public function testSetLinkTemplateWithInvalidPath() { $entity_type = $this->setUpEntityType(['id' => $this->randomMachineName()]); $this->setExpectedException(\InvalidArgumentException::class); $entity_type->setLinkTemplate('test', 'invalid-path'); } /** * Tests the constraint methods. * * @covers ::getConstraints * @covers ::setConstraints * @covers ::addConstraint */ public function testConstraintMethods() { $definition = [ 'constraints' => [ 'EntityChanged' => [], ], ]; $entity_type = $this->setUpEntityType($definition); $this->assertEquals($definition['constraints'], $entity_type->getConstraints()); $entity_type->addConstraint('Test'); $this->assertEquals($definition['constraints'] + ['Test' => NULL], $entity_type->getConstraints()); $entity_type->setConstraints([]); $this->assertEquals([], $entity_type->getConstraints()); } /** * Asserts there on no public properties on the object instance. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type */ protected function assertNoPublicProperties(EntityTypeInterface $entity_type) { $reflection = new \ReflectionObject($entity_type); $this->assertEmpty($reflection->getProperties(\ReflectionProperty::IS_PUBLIC)); } }