protected function assertCreateContentStructValuesFields(array $data) { /** @var $contentDraft \eZ\Publish\API\Repository\Values\Content\Content */ $contentDraft = $data['actual']; /** @var $contentCreate \eZ\Publish\API\Repository\Values\Content\ContentCreateStruct */ $contentCreate = $data['expected']; /** @var $contentType \eZ\Publish\API\Repository\Values\ContentType\ContentType */ $contentType = $data['contentType']; $createdFields = $contentDraft->getFields(); $createdInLanguageCodes = $this->getLanguageCodesFromFields($contentCreate->fields, $contentCreate->mainLanguageCode); $this->assertCount(count($contentType->fieldDefinitions) * count($createdInLanguageCodes), $createdFields, 'Number of created fields does not match number of content type field definitions multiplied by number of languages the content is created in'); // Check field values $structFields = array(); foreach ($contentCreate->fields as $field) { $structFields[$field->fieldDefIdentifier][$field->languageCode] = $field; } foreach ($contentType->fieldDefinitions as $fieldDefinition) { $this->assertArrayHasKey($fieldDefinition->identifier, $contentDraft->fields, "Field values are missing for field definition '{$fieldDefinition->identifier}'"); foreach ($createdInLanguageCodes as $languageCode) { $this->assertArrayHasKey($languageCode, $contentDraft->fields[$fieldDefinition->identifier], "Field value is missing for field definition '{$fieldDefinition->identifier}' in language '{$languageCode}'"); // If field is not set in create struct, it should have default value $valueLanguageCode = $fieldDefinition->isTranslatable ? $languageCode : $contentCreate->mainLanguageCode; if (isset($structFields[$fieldDefinition->identifier][$valueLanguageCode])) { $this->assertEquals($structFields[$fieldDefinition->identifier][$valueLanguageCode]->value, $contentDraft->fields[$fieldDefinition->identifier][$languageCode], "Field value for field definition '{$fieldDefinition->identifier}' in language '{$languageCode}' is not equal to given struct field value"); } else { $this->assertEquals($fieldDefinition->defaultValue, $contentDraft->fields[$fieldDefinition->identifier][$languageCode], "Field value for field definition '{$fieldDefinition->identifier}' in language '{$languageCode}' is not equal to default value"); } } } }