You are here

function dsPanelViewModesTests::testPanelViewModes in Display Suite 7

Panels view modes tests.

File

tests/ds.panels.test, line 85
Panel view modes tests.

Class

dsPanelViewModesTests
@file Panel view modes tests.

Code

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);
}