diff --git a/core/modules/views/src/Tests/FieldApiDataSortTest.php b/core/modules/views/src/Tests/FieldApiDataSortTest.php new file mode 100644 index 0000000..491524a --- /dev/null +++ b/core/modules/views/src/Tests/FieldApiDataSortTest.php @@ -0,0 +1,138 @@ + 'text', + 'entity_type' => 'node', + 'type' => 'string', + ))->save(); + + FieldConfig::create(array( + 'field_name' => 'text', + 'entity_type' => 'node', + 'bundle' => 'page', + 'label' => 'Translated text', + 'translatable' => TRUE + ))->save(); + + FieldStorageConfig::create(array( + 'field_name' => 'weight', + 'entity_type' => 'node', + 'type' => 'integer', + ))->save(); + + FieldConfig::create(array( + 'field_name' => 'weight', + 'entity_type' => 'node', + 'bundle' => 'page', + 'translatable' => FALSE, + ))->save(); + + ConfigurableLanguage::create([ + 'id' => 'de', + ])->save(); + + for ($i = 0; $i < 3; $i++) { + $node = Node::create([ + 'type' => 'page', + 'title' => 'Title en ' . $i, + 'weight' => ['value' => 3 - $i], + 'text' => ['value' => 'moo en ' . $i], + 'langcode' => 'en', + ]); + $node->save(); + + $translation = $node->addTranslation('de'); + $translation->title->value = 'Title DE ' . $i; + $translation->text->value = 'moo DE ' . $i; + $translation->save(); + $nodes[] = $node; + } + } + + public function testEntityFieldSort() { + $map = [ + 'nid' => 'nid', + 'node_field_data_langcode' => 'langcode', + ]; + + $view = Views::getView('test_field_config_translation_sort'); + $view->setDisplay('default'); + $this->executeView($view); + + // With ascending sort, the nodes should come out in reverse order. + $expected = [ + [ + 'nid' => 3, + 'langcode' => 'en', + ], + [ + 'nid' => 2, + 'langcode' => 'en', + ],[ + 'nid' => 1, + 'langcode' => 'en', + ], + ]; + $this->assertIdenticalResultset($view, $expected, $map); + $view->destroy(); + + $view = Views::getView('test_field_config_translation_sort'); + $view->setDisplay('display_de'); + $this->executeView($view); + + $expected = [ + [ + 'nid' => 3, + 'langcode' => 'de', + ], + [ + 'nid' => 2, + 'langcode' => 'de', + ],[ + 'nid' => 1, + 'langcode' => 'de', + ], + ]; + $this->assertIdenticalResultset($view, $expected, $map); + $view->destroy(); + } +} diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_config_translation_sort.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_config_translation_sort.yml new file mode 100644 index 0000000..8157275 --- /dev/null +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_field_config_translation_sort.yml @@ -0,0 +1,86 @@ +langcode: en +status: true +dependencies: { } +id: test_field_config_translation_sort +module: views +description: '' +tag: '' +base_table: node_field_data +base_field: id +core: '8' +display: + default: + display_options: + fields: + nid: + id: nid + field: nid + table: node_field_data + plugin_id: field + entity_type: node + entity_field: nid + langcode: + id: langcode + field: langcode + table: node_field_data + plugin_id: field + entity_type: node + entity_field: langcode + weight: + id: weight + table: node__weight + field: weight + plugin_id: numeric + entity_type: node + entity_field: weight + filters: + langcode: + id: langcode + table: node_field_data + field: langcode + relationship: none + group_type: group + admin_label: '' + operator: in + value: + 'en': 'en' + group: 1 + exposed: false + entity_type: node + entity_field: langcode + plugin_id: language + sorts: + weight: + id: weight + table: node__weight + field: weight_value + order: ASC + plugin_id: standard + entity_type: node + entity_field: weight + display_plugin: default + display_title: Master + id: default + position: 0 + display_de: + display_plugin: embed + id: display_de + display_options: + defaults: + filters: false + filters: + langcode: + id: langcode + table: node_field_data + field: langcode + relationship: none + group_type: group + admin_label: '' + operator: in + value: + 'de': 'de' + group: 1 + exposed: false + entity_type: node + entity_field: langcode + plugin_id: language