You are here

function CourseAccessTest::testReleaseExpiration in Course 3.x

Test the open/close date functionality.

File

tests/src/Functional/CourseAccessTest.php, line 39

Class

CourseAccessTest
Tests for conditional event-based access to course objects.

Namespace

Drupal\Tests\course\Functional

Code

function testReleaseExpiration() {
  $course = $this
    ->createCourse();
  $now = \Drupal::time()
    ->getRequestTime();
  $formatter = \Drupal::service('date.formatter');

  // Make sure user can get in with no open/close set.
  $this
    ->assertTrue($course
    ->access('enroll', $this->student_user), 'User can enroll in course past start date.');

  // Test a course that is not yet open.
  $course
    ->set('course_date', [
    'value' => $formatter
      ->format($now + 30, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
  ]);
  $course
    ->save();
  \Drupal::entityTypeManager()
    ->getAccessControlHandler('course')
    ->resetCache();
  $this
    ->assertFalse($course
    ->access('enroll', $this->student_user), 'User cannot enroll in not yet open course.');

  // Test an opened course that is closed.
  $course
    ->set('course_date', [
    'value' => $formatter
      ->format($now - 60, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    'end_value' => $formatter
      ->format($now - 30, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
  ]);
  $course
    ->save();
  \Drupal::entityTypeManager()
    ->getAccessControlHandler('course')
    ->resetCache();
  $this
    ->assertFalse($course
    ->access('enroll', $this->student_user), 'User cannot enroll in expired course.');

  // Enroll the user. User should still not be able to take course if it is
  // expired.
  $course
    ->enroll($this->student_user);
  \Drupal::entityTypeManager()
    ->getAccessControlHandler('course')
    ->resetCache();
  $this
    ->assertFalse($course
    ->access('enroll', $this->student_user), 'User cannot take expired course.');
}