function ContentTranslationSyncUnitTest::testMultipleSyncedValues

Same name in other branches
  1. 8.9.x core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php \Drupal\Tests\content_translation\Kernel\ContentTranslationSyncUnitTest::testMultipleSyncedValues()
  2. 10 core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php \Drupal\Tests\content_translation\Kernel\ContentTranslationSyncUnitTest::testMultipleSyncedValues()
  3. 11.x core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php \Drupal\Tests\content_translation\Kernel\ContentTranslationSyncUnitTest::testMultipleSyncedValues()

Tests that items holding the same values are correctly synchronized.

File

core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php, line 179

Class

ContentTranslationSyncUnitTest
Tests the field synchronization logic.

Namespace

Drupal\Tests\content_translation\Kernel

Code

public function testMultipleSyncedValues() {
    $sync_langcode = $this->langcodes[1];
    $unchanged_items = $this->unchangedFieldValues[$sync_langcode];
    // Determine whether the unchanged values should be altered depending on
    // their delta.
    $delta_callbacks = [
        // Continuous field values: all values are equal.
function ($delta) {
            return TRUE;
        },
        // Alternated field values: only the even ones are equal.
function ($delta) {
            return $delta % 2 !== 0;
        },
        // Sparse field values: only the "middle" ones are equal.
function ($delta) {
            return $delta === 1 || $delta === 2;
        },
        // Sparse field values: only the "extreme" ones are equal.
function ($delta) {
            return $delta === 0 || $delta === 3;
        },
    ];
    foreach ($delta_callbacks as $delta_callback) {
        $field_values = $this->unchangedFieldValues;
        for ($delta = 0; $delta < $this->cardinality; $delta++) {
            if ($delta_callback($delta)) {
                foreach ($this->columns as $column) {
                    if (in_array($column, $this->synchronized)) {
                        $field_values[$sync_langcode][$delta][$column] = $field_values[$sync_langcode][0][$column];
                    }
                }
            }
        }
        $changed_items = $field_values[$sync_langcode];
        $this->synchronizer
            ->synchronizeItems($field_values, $unchanged_items, $sync_langcode, $this->langcodes, $this->synchronized);
        foreach ($this->unchangedFieldValues as $langcode => $unchanged_items) {
            for ($delta = 0; $delta < $this->cardinality; $delta++) {
                foreach ($this->columns as $column) {
                    // The first item is always unchanged hence it is retained by the
                    // synchronization process. The other ones are retained or synced
                    // depending on the logic implemented by the delta callback and
                    // whether it is a sync column or not.
                    $value = $delta > 0 && $delta_callback($delta) && in_array($column, $this->synchronized) ? $changed_items[0][$column] : $unchanged_items[$delta][$column];
                    $this->assertEquals($field_values[$langcode][$delta][$column], $value, "Item {$delta} column {$column} for langcode {$langcode} synced correctly");
                }
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.