SessionTestCase::testDataPersistence

7 session.test SessionTestCase::testDataPersistence()
8 session.test SessionTestCase::testDataPersistence()

Test data persistence via the session_test module callbacks. Also tests drupal_session_count() since session data is already generated here.

File

modules/simpletest/tests/session.test, line 74
Provides SimpleTests for core session handling functionality.

Code

function testDataPersistence() {
  $user = $this->drupalCreateUser(array('access content'));
  // Enable sessions.
  $this->sessionReset($user->uid);

  $this->drupalLogin($user);

  $value_1 = $this->randomName();
  $this->drupalGet('session-test/set/' . $value_1);
  $this->assertText($value_1, t('The session value was stored.'), t('Session'));
  $this->drupalGet('session-test/get');
  $this->assertText($value_1, t('Session correctly returned the stored data for an authenticated user.'), t('Session'));

  // Attempt to write over val_1. If drupal_save_session(FALSE) is working.
  // properly, val_1 will still be set.
  $value_2 = $this->randomName();
  $this->drupalGet('session-test/no-set/' . $value_2);
  $this->assertText($value_2, t('The session value was correctly passed to session-test/no-set.'), t('Session'));
  $this->drupalGet('session-test/get');
  $this->assertText($value_1, t('Session data is not saved for drupal_save_session(FALSE).'), t('Session'));

  // Switch browser cookie to anonymous user, then back to user 1.
  $this->sessionReset();
  $this->sessionReset($user->uid);
  $this->assertText($value_1, t('Session data persists through browser close.'), t('Session'));

  // Logout the user and make sure the stored value no longer persists.
  $this->drupalLogout();
  $this->sessionReset();
  $this->drupalGet('session-test/get');
  $this->assertNoText($value_1, t("After logout, previous user's session data is not available."), t('Session'));

  // Now try to store some data as an anonymous user.
  $value_3 = $this->randomName();
  $this->drupalGet('session-test/set/' . $value_3);
  $this->assertText($value_3, t('Session data stored for anonymous user.'), t('Session'));
  $this->drupalGet('session-test/get');
  $this->assertText($value_3, t('Session correctly returned the stored data for an anonymous user.'), t('Session'));

  // Try to store data when drupal_save_session(FALSE).
  $value_4 = $this->randomName();
  $this->drupalGet('session-test/no-set/' . $value_4);
  $this->assertText($value_4, t('The session value was correctly passed to session-test/no-set.'), t('Session'));
  $this->drupalGet('session-test/get');
  $this->assertText($value_3, t('Session data is not saved for drupal_save_session(FALSE).'), t('Session'));

  // Login, the data should persist.
  $this->drupalLogin($user);
  $this->sessionReset($user->uid);
  $this->drupalGet('session-test/get');
  $this->assertNoText($value_1, t('Session has persisted for an authenticated user after logging out and then back in.'), t('Session'));

  // Change session and create another user.
  $user2 = $this->drupalCreateUser(array('access content'));
  $this->sessionReset($user2->uid);
  $this->drupalLogin($user2);
}
Login or register to post comments