Issue #2417625 by geertvd, yannickoo: "Column not found" when adding file relationship
							parent
							
								
									7ff2724563
								
							
						
					
					
						commit
						4210a02bea
					
				| 
						 | 
				
			
			@ -23,7 +23,7 @@ function file_field_views_data(FieldStorageConfigInterface $field_storage) {
 | 
			
		|||
      'id' => 'standard',
 | 
			
		||||
      'base' => 'file_managed',
 | 
			
		||||
      'entity type' => 'file',
 | 
			
		||||
      'base field' => 'target_id',
 | 
			
		||||
      'base field' => 'fid',
 | 
			
		||||
      'label' => t('file from !field_name', array('!field_name' => $field_storage->getName())),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 * Contains \Drupal\file\Tests\Views\RelationshipUserFileDataTest.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Drupal\file\Tests\Views;
 | 
			
		||||
 | 
			
		||||
use Drupal\views\Tests\ViewTestBase;
 | 
			
		||||
use Drupal\views\Views;
 | 
			
		||||
use Drupal\views\Tests\ViewTestData;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests file on user relationship handler.
 | 
			
		||||
 *
 | 
			
		||||
 * @group file
 | 
			
		||||
 */
 | 
			
		||||
class RelationshipUserFileDataTest extends ViewTestBase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Modules to install.
 | 
			
		||||
   *
 | 
			
		||||
   * @var array
 | 
			
		||||
   */
 | 
			
		||||
  public static $modules = array('file', 'file_test_views', 'user');
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Views used by this test.
 | 
			
		||||
   *
 | 
			
		||||
   * @var array
 | 
			
		||||
   */
 | 
			
		||||
  public static $testViews = array('test_file_user_file_data');
 | 
			
		||||
 | 
			
		||||
  protected function setUp() {
 | 
			
		||||
    parent::setUp();
 | 
			
		||||
 | 
			
		||||
    // Create the user profile field and instance.
 | 
			
		||||
    entity_create('field_storage_config', array(
 | 
			
		||||
      'entity_type' => 'user',
 | 
			
		||||
      'field_name' => 'user_file',
 | 
			
		||||
      'type' => 'file',
 | 
			
		||||
      'translatable' => '0',
 | 
			
		||||
    ))->save();
 | 
			
		||||
    entity_create('field_config', array(
 | 
			
		||||
      'label' => 'User File',
 | 
			
		||||
      'description' => '',
 | 
			
		||||
      'field_name' => 'user_file',
 | 
			
		||||
      'entity_type' => 'user',
 | 
			
		||||
      'bundle' => 'user',
 | 
			
		||||
      'required' => 0,
 | 
			
		||||
    ))->save();
 | 
			
		||||
 | 
			
		||||
    ViewTestData::createTestViews(get_class($this), array('file_test_views'));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests using the views file relationship.
 | 
			
		||||
   */
 | 
			
		||||
  public function testViewsHandlerRelationshipUserFileData() {
 | 
			
		||||
    $file = entity_create('file', array(
 | 
			
		||||
      'fid' => 2,
 | 
			
		||||
      'uid' => 2,
 | 
			
		||||
      'filename' => 'image-test.jpg',
 | 
			
		||||
      'uri' => "public://image-test.jpg",
 | 
			
		||||
      'filemime' => 'image/jpeg',
 | 
			
		||||
      'created' => 1,
 | 
			
		||||
      'changed' => 1,
 | 
			
		||||
      'status' => FILE_STATUS_PERMANENT,
 | 
			
		||||
    ));
 | 
			
		||||
    $file->enforceIsNew();
 | 
			
		||||
    file_put_contents($file->getFileUri(), file_get_contents('core/modules/simpletest/files/image-1.png'));
 | 
			
		||||
    $file->save();
 | 
			
		||||
 | 
			
		||||
    $account = $this->drupalCreateUser();
 | 
			
		||||
    $account->user_file->target_id = 2;
 | 
			
		||||
    $account->save();
 | 
			
		||||
 | 
			
		||||
    $view = Views::getView('test_file_user_file_data');
 | 
			
		||||
    // Tests \Drupal\taxonomy\Plugin\views\relationship\NodeTermData::calculateDependencies().
 | 
			
		||||
    $expected = [
 | 
			
		||||
      'module' => [
 | 
			
		||||
        'file',
 | 
			
		||||
        'user',
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
    $this->assertIdentical($expected, $view->calculateDependencies());
 | 
			
		||||
    $this->executeView($view);
 | 
			
		||||
    $expected_result = array(
 | 
			
		||||
      array(
 | 
			
		||||
        'file_managed_user__user_file_fid' => '2',
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    $column_map = array('file_managed_user__user_file_fid' => 'file_managed_user__user_file_fid');
 | 
			
		||||
    $this->assertIdenticalResultset($view, $expected_result, $column_map);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,77 @@
 | 
			
		|||
langcode: und
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - file
 | 
			
		||||
    - user
 | 
			
		||||
id: test_file_user_file_data
 | 
			
		||||
label: test_file_user_file_data
 | 
			
		||||
module: views
 | 
			
		||||
description: ''
 | 
			
		||||
tag: ''
 | 
			
		||||
base_table: users
 | 
			
		||||
base_field: uid
 | 
			
		||||
core: 8.x
 | 
			
		||||
display:
 | 
			
		||||
  default:
 | 
			
		||||
    display_plugin: default
 | 
			
		||||
    id: default
 | 
			
		||||
    display_title: Master
 | 
			
		||||
    position: 0
 | 
			
		||||
    display_options:
 | 
			
		||||
      access:
 | 
			
		||||
        type: perm
 | 
			
		||||
        options:
 | 
			
		||||
          perm: 'access user profiles'
 | 
			
		||||
      cache:
 | 
			
		||||
        type: none
 | 
			
		||||
      style:
 | 
			
		||||
        type: table
 | 
			
		||||
        options:
 | 
			
		||||
          grouping: {  }
 | 
			
		||||
          row_class: ''
 | 
			
		||||
          default_row_class: true
 | 
			
		||||
          override: true
 | 
			
		||||
          sticky: false
 | 
			
		||||
          caption: ''
 | 
			
		||||
          summary: ''
 | 
			
		||||
          description: ''
 | 
			
		||||
          columns:
 | 
			
		||||
            name: name
 | 
			
		||||
            fid: fid
 | 
			
		||||
          info:
 | 
			
		||||
            name:
 | 
			
		||||
              sortable: false
 | 
			
		||||
              default_sort_order: asc
 | 
			
		||||
              align: ''
 | 
			
		||||
              separator: ''
 | 
			
		||||
              empty_column: false
 | 
			
		||||
              responsive: ''
 | 
			
		||||
            fid:
 | 
			
		||||
              sortable: false
 | 
			
		||||
              default_sort_order: asc
 | 
			
		||||
              align: ''
 | 
			
		||||
              separator: ''
 | 
			
		||||
              empty_column: false
 | 
			
		||||
              responsive: ''
 | 
			
		||||
          default: '-1'
 | 
			
		||||
          empty_table: false
 | 
			
		||||
      row:
 | 
			
		||||
        type: fields
 | 
			
		||||
        options:
 | 
			
		||||
          inline: {  }
 | 
			
		||||
          separator: ''
 | 
			
		||||
          hide_empty: false
 | 
			
		||||
          default_field_elements: true
 | 
			
		||||
      relationships:
 | 
			
		||||
        user_file_target_id:
 | 
			
		||||
          id: user_file_target_id
 | 
			
		||||
          table: user__user_file
 | 
			
		||||
          field: user_file_target_id
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: 'file from user_file'
 | 
			
		||||
          required: true
 | 
			
		||||
          plugin_id: standard
 | 
			
		||||
      arguments: {  }
 | 
			
		||||
      display_extenders: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ function image_field_views_data(FieldStorageConfigInterface $field_storage) {
 | 
			
		|||
    $data[$table_name][$field_storage->getName() . '_target_id']['relationship'] = array(
 | 
			
		||||
      'id' => 'standard',
 | 
			
		||||
      'base' => 'file_managed',
 | 
			
		||||
      'base field' => 'target_id',
 | 
			
		||||
      'base field' => 'fid',
 | 
			
		||||
      'label' => t('image from !field_name', array('!field_name' => $field_storage->getName())),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 * Contains \Drupal\image\Tests\Views\RelationshipUserImageDataTest.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Drupal\image\Tests\Views;
 | 
			
		||||
 | 
			
		||||
use Drupal\views\Tests\ViewTestBase;
 | 
			
		||||
use Drupal\views\Views;
 | 
			
		||||
use Drupal\views\Tests\ViewTestData;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests image on user relationship handler.
 | 
			
		||||
 *
 | 
			
		||||
 * @group image
 | 
			
		||||
 */
 | 
			
		||||
class RelationshipUserImageDataTest extends ViewTestBase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Modules to install.
 | 
			
		||||
   *
 | 
			
		||||
   * @var array
 | 
			
		||||
   */
 | 
			
		||||
  public static $modules = array('image', 'image_test_views', 'user');
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Views used by this test.
 | 
			
		||||
   *
 | 
			
		||||
   * @var array
 | 
			
		||||
   */
 | 
			
		||||
  public static $testViews = array('test_image_user_image_data');
 | 
			
		||||
 | 
			
		||||
  protected function setUp() {
 | 
			
		||||
    parent::setUp();
 | 
			
		||||
 | 
			
		||||
    // Create the user profile field and instance.
 | 
			
		||||
    entity_create('field_storage_config', array(
 | 
			
		||||
      'entity_type' => 'user',
 | 
			
		||||
      'field_name' => 'user_picture',
 | 
			
		||||
      'type' => 'image',
 | 
			
		||||
      'translatable' => '0',
 | 
			
		||||
    ))->save();
 | 
			
		||||
    entity_create('field_config', array(
 | 
			
		||||
      'label' => 'User Picture',
 | 
			
		||||
      'description' => '',
 | 
			
		||||
      'field_name' => 'user_picture',
 | 
			
		||||
      'entity_type' => 'user',
 | 
			
		||||
      'bundle' => 'user',
 | 
			
		||||
      'required' => 0,
 | 
			
		||||
    ))->save();
 | 
			
		||||
 | 
			
		||||
    ViewTestData::createTestViews(get_class($this), array('image_test_views'));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests using the views image relationship.
 | 
			
		||||
   */
 | 
			
		||||
  public function testViewsHandlerRelationshipUserImageData() {
 | 
			
		||||
    $file = entity_create('file', array(
 | 
			
		||||
      'fid' => 2,
 | 
			
		||||
      'uid' => 2,
 | 
			
		||||
      'filename' => 'image-test.jpg',
 | 
			
		||||
      'uri' => "public://image-test.jpg",
 | 
			
		||||
      'filemime' => 'image/jpeg',
 | 
			
		||||
      'created' => 1,
 | 
			
		||||
      'changed' => 1,
 | 
			
		||||
      'status' => FILE_STATUS_PERMANENT,
 | 
			
		||||
    ));
 | 
			
		||||
    $file->enforceIsNew();
 | 
			
		||||
    file_put_contents($file->getFileUri(), file_get_contents('core/modules/simpletest/files/image-1.png'));
 | 
			
		||||
    $file->save();
 | 
			
		||||
 | 
			
		||||
    $account = $this->drupalCreateUser();
 | 
			
		||||
    $account->user_picture->target_id = 2;
 | 
			
		||||
    $account->save();
 | 
			
		||||
 | 
			
		||||
    $view = Views::getView('test_image_user_image_data');
 | 
			
		||||
    // Tests \Drupal\taxonomy\Plugin\views\relationship\NodeTermData::calculateDependencies().
 | 
			
		||||
    $expected = [
 | 
			
		||||
      'module' => [
 | 
			
		||||
        'file',
 | 
			
		||||
        'user',
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
    $this->assertIdentical($expected, $view->calculateDependencies());
 | 
			
		||||
    $this->executeView($view);
 | 
			
		||||
    $expected_result = array(
 | 
			
		||||
      array(
 | 
			
		||||
        'file_managed_user__user_picture_fid' => '2',
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    $column_map = array('file_managed_user__user_picture_fid' => 'file_managed_user__user_picture_fid');
 | 
			
		||||
    $this->assertIdenticalResultset($view, $expected_result, $column_map);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
name: 'Image test views'
 | 
			
		||||
type: module
 | 
			
		||||
description: 'Provides default views for views image tests.'
 | 
			
		||||
package: Testing
 | 
			
		||||
version: VERSION
 | 
			
		||||
core: 8.x
 | 
			
		||||
dependencies:
 | 
			
		||||
  - image
 | 
			
		||||
  - views
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,77 @@
 | 
			
		|||
langcode: und
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - file
 | 
			
		||||
    - user
 | 
			
		||||
id: test_image_user_image_data
 | 
			
		||||
label: test_image_user_image_data
 | 
			
		||||
module: views
 | 
			
		||||
description: ''
 | 
			
		||||
tag: ''
 | 
			
		||||
base_table: users
 | 
			
		||||
base_field: uid
 | 
			
		||||
core: 8.x
 | 
			
		||||
display:
 | 
			
		||||
  default:
 | 
			
		||||
    display_plugin: default
 | 
			
		||||
    id: default
 | 
			
		||||
    display_title: Master
 | 
			
		||||
    position: 0
 | 
			
		||||
    display_options:
 | 
			
		||||
      access:
 | 
			
		||||
        type: perm
 | 
			
		||||
        options:
 | 
			
		||||
          perm: 'access user profiles'
 | 
			
		||||
      cache:
 | 
			
		||||
        type: none
 | 
			
		||||
      style:
 | 
			
		||||
        type: table
 | 
			
		||||
        options:
 | 
			
		||||
          grouping: {  }
 | 
			
		||||
          row_class: ''
 | 
			
		||||
          default_row_class: true
 | 
			
		||||
          override: true
 | 
			
		||||
          sticky: false
 | 
			
		||||
          caption: ''
 | 
			
		||||
          summary: ''
 | 
			
		||||
          description: ''
 | 
			
		||||
          columns:
 | 
			
		||||
            name: name
 | 
			
		||||
            fid: fid
 | 
			
		||||
          info:
 | 
			
		||||
            name:
 | 
			
		||||
              sortable: false
 | 
			
		||||
              default_sort_order: asc
 | 
			
		||||
              align: ''
 | 
			
		||||
              separator: ''
 | 
			
		||||
              empty_column: false
 | 
			
		||||
              responsive: ''
 | 
			
		||||
            fid:
 | 
			
		||||
              sortable: false
 | 
			
		||||
              default_sort_order: asc
 | 
			
		||||
              align: ''
 | 
			
		||||
              separator: ''
 | 
			
		||||
              empty_column: false
 | 
			
		||||
              responsive: ''
 | 
			
		||||
          default: '-1'
 | 
			
		||||
          empty_table: false
 | 
			
		||||
      row:
 | 
			
		||||
        type: fields
 | 
			
		||||
        options:
 | 
			
		||||
          inline: {  }
 | 
			
		||||
          separator: ''
 | 
			
		||||
          hide_empty: false
 | 
			
		||||
          default_field_elements: true
 | 
			
		||||
      relationships:
 | 
			
		||||
        user_picture_target_id:
 | 
			
		||||
          id: user_picture_target_id
 | 
			
		||||
          table: user__user_picture
 | 
			
		||||
          field: user_picture_target_id
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: 'image from user_picture'
 | 
			
		||||
          required: true
 | 
			
		||||
          plugin_id: standard
 | 
			
		||||
      arguments: {  }
 | 
			
		||||
      display_extenders: {  }
 | 
			
		||||
		Loading…
	
		Reference in New Issue