View source
<?php
namespace Drupal\Tests\unique_field_ajax\Functional;
use Drupal\language\Entity\ConfigurableLanguage;
class UniqueFieldAjaxLanguageTest extends UniqueFieldAjaxBase {
public function testUniqueFieldPerLang() {
foreach ($this->translationOptions as $lang_id => $name) {
ConfigurableLanguage::createFromLangcode($lang_id)
->save();
}
$translation_options = $this->translationOptions;
$this
->shuffleAssoc($translation_options);
$edit = [
'language_configuration[language_alterable]' => TRUE,
];
$this
->drupalPostForm('admin/structure/types/manage/' . $this->contentTypeName, $edit, t('Save content type'));
foreach ($this->fieldTypes as $field_type) {
$this
->createField($field_type['type'], $field_type['widget'], $field_type['settings']);
$field_name = $this->fieldStorage
->getName();
$this
->updateThirdPartyFieldSetting('unique', TRUE);
$this
->updateThirdPartyFieldSetting('per_lang', FALSE);
$current_lang = 0;
$edit = NULL;
foreach ($translation_options as $lang_id => $name) {
if (!$edit) {
$edit = $this
->createUpdateFieldData($field_name, $field_type['value'], $field_type['effect'], $lang_id);
}
$edit['langcode[0][value]'] = $lang_id;
if ($current_lang === 0) {
$this
->itCanSaveField($edit);
}
else {
$this
->itCannotSaveField($edit);
}
++$current_lang;
}
}
foreach ($this->fieldTypes as $field_type) {
$this
->createField($field_type['type'], $field_type['widget'], $field_type['settings']);
$field_name = $this->fieldStorage
->getName();
$this
->updateThirdPartyFieldSetting('unique', TRUE);
$this
->updateThirdPartyFieldSetting('per_lang', TRUE);
$current_lang = 0;
$edit = NULL;
foreach ($translation_options as $lang_id => $name) {
if (!$edit) {
$edit = $this
->createUpdateFieldData($field_name, $field_type['value'], $field_type['effect'], $lang_id);
}
$edit['langcode[0][value]'] = $lang_id;
$this
->itCanSaveField($edit);
$this
->itCannotSaveField($edit);
++$current_lang;
}
}
}
public function testUniqueTitlePerLang() {
foreach ($this->translationOptions as $lang_id => $name) {
ConfigurableLanguage::createFromLangcode($lang_id)
->save();
}
$translation_options = $this->translationOptions;
$this
->shuffleAssoc($translation_options);
$edit = [
'language_configuration[language_alterable]' => TRUE,
];
$this
->drupalPostForm('admin/structure/types/manage/' . $this->contentTypeName, $edit, t('Save content type'));
$this
->updateThirdPartyEntitySetting('unique', TRUE);
$this
->updateThirdPartyEntitySetting('per_lang', FALSE);
$current_lang = 0;
$edit = NULL;
foreach ($translation_options as $lang_id => $name) {
if (!$edit) {
$edit = $this
->createBasicUpdateData();
}
$edit['langcode[0][value]'] = $lang_id;
if ($current_lang === 0) {
$this
->itCanSaveField($edit);
}
else {
$this
->itCannotSaveField($edit, NULL, NULL, 'title');
}
++$current_lang;
}
$this
->updateThirdPartyEntitySetting('unique', TRUE);
$this
->updateThirdPartyEntitySetting('per_lang', TRUE);
$current_lang = 0;
$edit = NULL;
foreach ($translation_options as $lang_id => $name) {
if (!$edit) {
$edit = $this
->createBasicUpdateData();
}
$edit['langcode[0][value]'] = $lang_id;
$this
->itCanSaveField($edit);
$this
->itCannotSaveField($edit, NULL, NULL, 'title');
++$current_lang;
}
}
private function shuffleAssoc(array &$array) : void {
$new = [];
$keys = array_keys($array);
shuffle($keys);
foreach ($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
}
}