Chris@0: installEntitySchema('user'); Chris@14: $this->installConfig(['user']); Chris@14: // Give anonymous users permission to access content, so that we can view Chris@14: // and download public file. Chris@14: $anonymous_role = Role::load(Role::ANONYMOUS_ID); Chris@14: $anonymous_role->grantPermission('access content'); Chris@14: $anonymous_role->save(); Chris@14: Chris@0: $this->installEntitySchema('file'); Chris@0: $this->installSchema('file', ['file_usage']); Chris@0: Chris@0: FieldStorageConfig::create([ Chris@0: 'entity_type' => 'entity_test', Chris@0: 'field_name' => 'image_test', Chris@0: 'type' => 'image', Chris@0: 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, Chris@0: ])->save(); Chris@0: FieldConfig::create([ Chris@0: 'entity_type' => 'entity_test', Chris@0: 'field_name' => 'image_test', Chris@0: 'bundle' => 'entity_test', Chris@0: 'settings' => [ Chris@0: 'file_extensions' => 'jpg', Chris@0: ], Chris@0: ])->save(); Chris@18: \Drupal::service('file_system')->copy($this->root . '/core/misc/druplicon.png', 'public://example.jpg'); Chris@0: $this->image = File::create([ Chris@0: 'uri' => 'public://example.jpg', Chris@0: ]); Chris@0: $this->image->save(); Chris@0: $this->imageFactory = $this->container->get('image.factory'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests using entity fields of the image field type. Chris@0: */ Chris@0: public function testImageItem() { Chris@0: // Create a test entity with the image field set. Chris@0: $entity = EntityTest::create(); Chris@0: $entity->image_test->target_id = $this->image->id(); Chris@0: $entity->image_test->alt = $alt = $this->randomMachineName(); Chris@0: $entity->image_test->title = $title = $this->randomMachineName(); Chris@0: $entity->name->value = $this->randomMachineName(); Chris@0: $entity->save(); Chris@0: Chris@0: $entity = EntityTest::load($entity->id()); Chris@0: $this->assertTrue($entity->image_test instanceof FieldItemListInterface, 'Field implements interface.'); Chris@0: $this->assertTrue($entity->image_test[0] instanceof FieldItemInterface, 'Field item implements interface.'); Chris@0: $this->assertEqual($entity->image_test->target_id, $this->image->id()); Chris@0: $this->assertEqual($entity->image_test->alt, $alt); Chris@0: $this->assertEqual($entity->image_test->title, $title); Chris@0: $image = $this->imageFactory->get('public://example.jpg'); Chris@0: $this->assertEqual($entity->image_test->width, $image->getWidth()); Chris@0: $this->assertEqual($entity->image_test->height, $image->getHeight()); Chris@0: $this->assertEqual($entity->image_test->entity->id(), $this->image->id()); Chris@0: $this->assertEqual($entity->image_test->entity->uuid(), $this->image->uuid()); Chris@0: Chris@0: // Make sure the computed entity reflects updates to the referenced file. Chris@18: \Drupal::service('file_system')->copy($this->root . '/core/misc/druplicon.png', 'public://example-2.jpg'); Chris@0: $image2 = File::create([ Chris@0: 'uri' => 'public://example-2.jpg', Chris@0: ]); Chris@0: $image2->save(); Chris@0: Chris@0: $entity->image_test->target_id = $image2->id(); Chris@0: $entity->image_test->alt = $new_alt = $this->randomMachineName(); Chris@0: // The width and height is only updated when width is not set. Chris@0: $entity->image_test->width = NULL; Chris@0: $entity->save(); Chris@0: $this->assertEqual($entity->image_test->entity->id(), $image2->id()); Chris@0: $this->assertEqual($entity->image_test->entity->getFileUri(), $image2->getFileUri()); Chris@0: $image = $this->imageFactory->get('public://example-2.jpg'); Chris@0: $this->assertEqual($entity->image_test->width, $image->getWidth()); Chris@0: $this->assertEqual($entity->image_test->height, $image->getHeight()); Chris@0: $this->assertEqual($entity->image_test->alt, $new_alt); Chris@0: Chris@0: // Check that the image item can be set to the referenced file directly. Chris@0: $entity->image_test = $this->image; Chris@0: $this->assertEqual($entity->image_test->target_id, $this->image->id()); Chris@0: Chris@0: // Delete the image and try to save the entity again. Chris@0: $this->image->delete(); Chris@0: $entity = EntityTest::create(['mame' => $this->randomMachineName()]); Chris@0: $entity->save(); Chris@0: Chris@0: // Test image item properties. Chris@0: $expected = ['target_id', 'entity', 'alt', 'title', 'width', 'height']; Chris@0: $properties = $entity->getFieldDefinition('image_test')->getFieldStorageDefinition()->getPropertyDefinitions(); Chris@0: $this->assertEqual(array_keys($properties), $expected); Chris@0: Chris@0: // Test the generateSampleValue() method. Chris@0: $entity = EntityTest::create(); Chris@0: $entity->image_test->generateSampleItems(); Chris@0: $this->entityValidateAndSave($entity); Chris@0: $this->assertEqual($entity->image_test->entity->get('filemime')->value, 'image/jpeg'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests a malformed image. Chris@0: */ Chris@0: public function testImageItemMalformed() { Chris@0: // Validate entity is an image and don't gather dimensions if it is not. Chris@0: $entity = EntityTest::create(); Chris@0: $entity->image_test = NULL; Chris@0: $entity->image_test->target_id = 9999; Chris@0: // PHPUnit re-throws E_USER_WARNING as an exception. Chris@0: try { Chris@0: $entity->save(); Chris@0: $this->fail('Exception did not fail'); Chris@0: } Chris@0: catch (EntityStorageException $exception) { Chris@0: $this->assertInstanceOf(\PHPUnit_Framework_Error_Warning::class, $exception->getPrevious()); Chris@0: $this->assertEquals($exception->getMessage(), 'Missing file with ID 9999.'); Chris@0: $this->assertEmpty($entity->image_test->width); Chris@0: $this->assertEmpty($entity->image_test->height); Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: }