namespace Drupal\Tests\serialization\Unit\Normalizer;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\TypedData\ComplexDataInterface;
+use Drupal\Core\TypedData\DataDefinitionInterface;
use Drupal\serialization\Normalizer\ContentEntityNormalizer;
use Drupal\Tests\UnitTestCase;
->will($this->returnValue('test'));
$definitions = [
- 'field_1' => $this->createMockFieldListItem(),
- 'field_2' => $this->createMockFieldListItem(FALSE),
+ 'field_accessible_external' => $this->createMockFieldListItem(TRUE, FALSE),
+ 'field_non-accessible_external' => $this->createMockFieldListItem(FALSE, FALSE),
+ 'field_accessible_internal' => $this->createMockFieldListItem(TRUE, TRUE),
+ 'field_non-accessible_internal' => $this->createMockFieldListItem(FALSE, TRUE),
];
$content_entity_mock = $this->createMockForContentEntity($definitions);
$normalized = $this->contentEntityNormalizer->normalize($content_entity_mock, 'test_format');
- $this->assertArrayHasKey('field_1', $normalized);
- $this->assertEquals('test', $normalized['field_1']);
- $this->assertArrayNotHasKey('field_2', $normalized);
+ $this->assertArrayHasKey('field_accessible_external', $normalized);
+ $this->assertEquals('test', $normalized['field_accessible_external']);
+ $this->assertArrayNotHasKey('field_non-accessible_external', $normalized);
+ $this->assertArrayNotHasKey('field_accessible_internal', $normalized);
+ $this->assertArrayNotHasKey('field_non-accessible_internal', $normalized);
}
/**
// The mock account should get passed directly into the access() method on
// field items from $context['account'].
$definitions = [
- 'field_1' => $this->createMockFieldListItem(TRUE, $mock_account),
- 'field_2' => $this->createMockFieldListItem(FALSE, $mock_account),
+ 'field_1' => $this->createMockFieldListItem(TRUE, FALSE, $mock_account),
+ 'field_2' => $this->createMockFieldListItem(FALSE, FALSE, $mock_account),
];
$content_entity_mock = $this->createMockForContentEntity($definitions);
public function createMockForContentEntity($definitions) {
$content_entity_mock = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase')
->disableOriginalConstructor()
- ->setMethods(['getFields'])
+ ->setMethods(['getTypedData'])
->getMockForAbstractClass();
- $content_entity_mock->expects($this->once())
- ->method('getFields')
- ->will($this->returnValue($definitions));
+ $typed_data = $this->prophesize(ComplexDataInterface::class);
+ $typed_data->getProperties(TRUE)
+ ->willReturn($definitions)
+ ->shouldBeCalled();
+ $content_entity_mock->expects($this->any())
+ ->method('getTypedData')
+ ->will($this->returnValue($typed_data->reveal()));
return $content_entity_mock;
}
* Creates a mock field list item.
*
* @param bool $access
+ * @param bool $internal
+ * @param \Drupal\Core\Session\AccountInterface $user_context
*
* @return \Drupal\Core\Field\FieldItemListInterface|\PHPUnit_Framework_MockObject_MockObject
*/
- protected function createMockFieldListItem($access = TRUE, $user_context = NULL) {
+ protected function createMockFieldListItem($access, $internal, AccountInterface $user_context = NULL) {
+ $data_definition = $this->prophesize(DataDefinitionInterface::class);
$mock = $this->getMock('Drupal\Core\Field\FieldItemListInterface');
$mock->expects($this->once())
- ->method('access')
- ->with('view', $user_context)
- ->will($this->returnValue($access));
-
+ ->method('getDataDefinition')
+ ->will($this->returnValue($data_definition->reveal()));
+ $data_definition->isInternal()
+ ->willReturn($internal)
+ ->shouldBeCalled();
+ if (!$internal) {
+ $mock->expects($this->once())
+ ->method('access')
+ ->with('view', $user_context)
+ ->will($this->returnValue($access));
+ }
return $mock;
}