You are here

ds.panels.test in Display Suite 7

Panel view modes tests.

File

tests/ds.panels.test
View source
<?php

/**
 * @file
 * Panel view modes tests.
 */
class dsPanelViewModesTests extends dsBaseTest {

  /**
   * Implements getInfo().
   */
  public static function getInfo() {
    return array(
      'name' => t('Panels'),
      'description' => t('Tests for managing layouts with Panels editor.'),
      'group' => t('Display suite'),
    );
  }

  /**
   * Edit a layout on a view mode.
   *
   * @param $edit
   *   A collection of form properties to submit.
   * @param $view_mode
   *   The name of the view mode.
   * @param $layout
   *   The name of the layout.
   * @param $check_fields
   *   Whether we need to check on fields.
   */
  function DSpanelEditLayout($edit, $view_mode, $layout, $check_fields = FALSE, $type = 'article') {
    $this
      ->drupalPost('admin/structure/types/manage/' . $type . '/display/' . $view_mode . $layout, $edit, t('Save layout'));
    $this
      ->assertText(t('The layout has been saved.'));
    if ($check_fields) {
      $this
        ->assertText('"Node being viewed" Body');
      $this
        ->assertText('"Node being viewed" created date');
      $this
        ->assertText('"Node being viewed" author');
      $this
        ->assertNoText('"Node being viewed" links');
      $this
        ->assertNoText('"Node being viewed" Tags');
      $this
        ->assertNoText('"Node being viewed" title');
      $this
        ->assertNoText('"Node being viewed" comments');
      $this
        ->assertNoText('"Node being viewed" comment form');
      $this
        ->assertNoText('"Node being viewed" Tags');
      $this
        ->assertNoText('"Node being viewed" Image');
    }
  }

  /**
   * Change layout.
   *
   * @param $view_mode
   *   The name of the view mode.
   * @param $old_layout
   *   The name of the old layout.
   * @param $new_layout
   *   The name of the new layout.
   */
  function DSPanelChangeLayout($view_mode, $old_layout, $new_layout) {
    $this
      ->drupalPost('admin/structure/types/manage/article/display/' . $view_mode . $old_layout, array(
      'layout' => $new_layout,
    ), t('Next'));
    $this
      ->drupalPost(NULL, array(), t('Save'), array(), array(), 'panels-change-layout');
    $this
      ->assertText(t('Panel layout has been updated.'));
    $this
      ->assertText(t('Configure settings for the !new_layout layout.', array(
      '!new_layout' => $new_layout,
    )));
  }

  /**
   * Clone a layout
   * @param $edit
   *   A collection of form properties to submit.
   * @param $view_mode
   *   The name of the view mode.
   */
  function DSPanelCloneLayout($edit, $view_mode) {
    $this
      ->drupalPost('admin/structure/types/manage/article/display/' . $view_mode, $edit, t('Clone layout'));
    $this
      ->assertText(t('The layout has been cloned.'));
  }

  /**
   * Panels view modes tests.
   */
  function testPanelViewModes() {
    variable_set('ds_extras_panel_view_modes', TRUE);
    $this
      ->refreshVariables();
    cache_clear_all('ds_fields:', 'cache', TRUE);
    cache_clear_all('entity_info:', 'cache', TRUE);
    cache_clear_all('theme_registry:', 'cache', TRUE);
    cache_clear_all('module_implements', 'cache_bootstrap');
    menu_rebuild();

    // Create 2 nodes.
    $node = $this
      ->drupalCreateNode(array(
      'type' => 'article',
      'promote' => FALSE,
    ));
    $this
      ->drupalGet('node/' . $node->nid);
    $node_sticky = $this
      ->drupalCreateNode(array(
      'type' => 'article',
      'sticky' => TRUE,
      'promote' => FALSE,
    ));
    $this
      ->drupalGet('node/' . $node->nid);

    // Create a new layout and assert it's used.
    $edit = array();
    $this
      ->DSpanelEditLayout($edit, '', 'twocol');
    $this
      ->assertRaw('panel-display panel-2col');

    // Remove the layout and assert it's not used anymore.
    $this
      ->drupalPost('admin/structure/types/manage/article/display', $edit, t('Remove layout'));
    $this
      ->assertText(t('The layout has been removed.'));
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoRaw('panel-display panel-2col');

    // Use the twocol_swentel layout, so we can also test on the $class variable.
    $edit = array(
      'sticky' => '1',
      'class' => 'extra-class',
    );
    $this
      ->DSpanelEditLayout($edit, '', 'twocol_swentel');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertRaw('swentel-layout');
    $this
      ->assertRaw('extra-class');
    $this
      ->assertNoRaw('sticky');
    $this
      ->assertRaw('block-system-navigation');
    $this
      ->drupalGet('node/' . $node_sticky->nid);
    $this
      ->assertRaw('swentel-layout');
    $this
      ->assertRaw('extra-class');
    $this
      ->assertRaw('sticky');
    $this
      ->assertRaw('block-system-navigation');

    // Remove class. Also remove blocks.
    $edit = array(
      'hide_sidebars' => '1',
      'class' => '',
    );
    $this
      ->DSpanelEditLayout($edit, '', '');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertRaw('swentel-layout');
    $this
      ->assertNoRaw('extra-class');
    $this
      ->assertNoRaw('sticky');
    $this
      ->assertNoRaw('block-system-navigation');
    $this
      ->drupalGet('node/' . $node_sticky->nid);
    $this
      ->assertRaw('swentel-layout');
    $this
      ->assertNoRaw('extra-class');
    $this
      ->assertRaw('sticky');
    $this
      ->assertNoRaw('block-system-navigation');

    // Recreate a layout with less fields by default.
    $this
      ->drupalPost('admin/structure/types/manage/article/display', array(), t('Remove layout'));
    $edit = array(
      'field_tags_enable' => FALSE,
      'field_image_enable' => FALSE,
      'node_title_enable' => FALSE,
      'node_links_enable' => FALSE,
      'node_comments_enable' => FALSE,
      'node_comment_form_enable' => FALSE,
    );
    $this
      ->DSpanelEditLayout($edit, '', 'twocol_swentel', TRUE);

    // Change layout to 2 col stacked (panel-2col-stacked)
    $this
      ->DSPanelChangeLayout('', 'twocol_swentel', 'twocol_stacked');
    $this
      ->DSPanelChangeLayout('', 'twocol_stacked', 'twocol_swentel');

    // Enable the full content view mode
    $edit = array(
      'view_modes_custom[full]' => '1',
    );
    $this
      ->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save'));

    // Clone default layout into full content and remove
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoRaw('swentel-layout');
    $edit = array(
      'clone' => 'node|article|default',
    );
    $this
      ->DSPanelCloneLayout($edit, 'full');
    $this
      ->drupalPost('admin/structure/types/manage/article/display', array(), t('Remove layout'));
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertRaw('swentel-layout');

    // Test hide page title.
    $this
      ->assertRaw('<h1 class="title" id="page-title">
          ' . $node->title . '        </h1>');
    $edit = array(
      'page_option_type' => '1',
    );
    $this
      ->DSpanelEditLayout($edit, 'full', '');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoRaw('<h1 class="title" id="page-title">
      ' . $node->title . '        </h1>');

    // Use page title substitutions.
    $edit = array(
      'page_option_type' => '1',
      'page_option_title' => '%node:type',
    );
    $this
      ->DSpanelEditLayout($edit, 'full', '');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoRaw('<h1 class="title" id="page-title">
      ' . $node->type . '        </h1>');

    // Test panels with the switch view mode, so add a layout on default again.
    $edit = array(
      'clone' => 'node|article|full',
    );
    $this
      ->DSPanelCloneLayout($edit, 'teaser');
    $edit = array(
      'view_modes_custom[full]' => FALSE,
    );
    $this
      ->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save'));
    $this
      ->DSpanelEditLayout(array(), '', 'twocol');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertRaw('panel-display panel-2col');
    $edit = array(
      'ds_switch' => 'teaser',
    );
    $this
      ->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
    $this
      ->assertRaw('swentel-layout');

    // Test hide page title with the switch view mode.
    $edit = array(
      'page_option_type' => '0',
    );
    $this
      ->DSpanelEditLayout($edit, 'teaser', '');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertRaw('<h1 class="title" id="page-title">
          ' . $node->title . '        </h1>');
    $edit = array(
      'page_option_type' => '1',
    );
    $this
      ->DSpanelEditLayout($edit, 'teaser', '');
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoRaw('<h1 class="title" id="page-title">
      ' . $node->title . '        </h1>');

    // Test switching from field UI to panels editor and vica versa.
    // By default, everything should be panels editor.
    $this
      ->drupalGet('admin/structure/types/manage/article/display');
    $this
      ->assertNoRaw('edit-additional-settings-layout');
    $this
      ->drupalGet('admin/structure/types/manage/article/display/teaser');
    $this
      ->assertNoRaw('edit-additional-settings-layout');
    $this
      ->drupalGet('admin/structure/types/manage/article/display', array(
      'query' => array(
        'switch' => 'field_ui',
      ),
    ));
    $this
      ->assertNoRaw('edit-additional-settings-layout');

    // Enable switching and detection of configured layouts.
    variable_set('ds_extras_editor_switch', TRUE);
    $this
      ->refreshVariables();
    $this
      ->drupalGet('admin/structure/types/manage/article/display');
    $this
      ->assertNoRaw('edit-additional-settings-layout');
    $this
      ->drupalGet('admin/structure/types/manage/article/display', array(
      'query' => array(
        'switch' => 'field_ui',
      ),
    ));
    $this
      ->assertRaw('edit-additional-settings-layout');
    $this
      ->dsSelectLayout(array(), array(), 'admin/structure/types/manage/article/display', array(
      'query' => array(
        'switch' => 'field_ui',
      ),
    ));
    $this
      ->assertRaw('edit-additional-settings-layout');
    $this
      ->drupalGet('admin/structure/types/manage/article/display', array(
      'query' => array(
        'switch' => 'panels',
      ),
    ));
    $this
      ->assertNoRaw('edit-additional-settings-layout');
    $this
      ->drupalGet('admin/structure/types/manage/article/display');
    $this
      ->assertRaw('edit-additional-settings-layout');

    // Create a page and article node which we'll promote to test the renderer.
    $node_3 = $this
      ->drupalCreateNode(array(
      'type' => 'article',
      'promote' => TRUE,
      'title' => 'My article',
    ));
    $node_4 = $this
      ->drupalCreateNode(array(
      'type' => 'page',
      'promote' => TRUE,
      'title' => 'My page',
    ));

    // Page layout & article layout, both using same layout.
    $edit = array();
    $this
      ->DSpanelEditLayout($edit, 'teaser', '/twocol', FALSE, 'page');
    $this
      ->drupalPost('admin/structure/types/manage/article/display/teaser', array(), t('Remove layout'));
    $this
      ->DSpanelEditLayout($edit, 'teaser', '/twocol', FALSE);

    // Go to front page and verify we see the content of both types in teaser format.
    $this
      ->drupalGet('node');
    $this
      ->assertRaw('My article');
    $this
      ->assertRaw('My page');

    // Use one column layout.
    $this
      ->drupalPost('admin/structure/types/manage/article/display/teaser', array(), t('Remove layout'));
    $this
      ->DSpanelEditLayout($edit, 'teaser', '/onecol', FALSE);

    // Go to front page and verify we see the content of both types in teaser format.
    $this
      ->drupalGet('node');
    $this
      ->assertRaw('My article');
    $this
      ->assertRaw('My page');

    // Tests to verify that changing panels layout chooses the right template.
    $edit = array(
      'additional_settings[layout]' => '',
    );
    $this
      ->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save'));
    $edit = array();
    $this
      ->DSpanelEditLayout($edit, '', 'twocol_stacked', FALSE);
    $this
      ->drupalGet('node/' . $node_3->nid);
    $this
      ->assertRaw('panel-2col-stacked clearfix panel-display');

    // Change panel
    $this
      ->DSPanelChangeLayout('', 'twocol_stacked', 'twocol');
    $this
      ->drupalGet('node/' . $node_3->nid);
    $this
      ->assertNoRaw('panel-2col-stacked clearfix panel-display');
    $this
      ->assertRaw('panel-display panel-2col clearfix');

    // Disable panels and verify that simply saving Field UI without layout does not
    // trigger any notices in entity_info_alter and on display of entities itself.
    variable_set('ds_extras_panel_view_modes', FALSE);
    $this
      ->refreshVariables();
    cache_clear_all('ds_fields:', 'cache', TRUE);
    cache_clear_all('entity_info:', 'cache', TRUE);
    cache_clear_all('theme_registry:', 'cache', TRUE);
    cache_clear_all('module_implements', 'cache_bootstrap');
    menu_rebuild();
    $this
      ->drupalPost('admin/structure/types/manage/article/display', array(), t('Save'));
    $this
      ->drupalGet('node/' . $node_3->nid);
  }

}

Classes

Namesort descending Description
dsPanelViewModesTests @file Panel view modes tests.