View source
<?php
namespace Drupal\Tests\opigno_learning_path\Functional;
use Drupal\Core\Url;
use Drupal\opigno_learning_path\LearningPathAccess;
class TrainingAccessTest extends LearningPathBrowserTestBase {
public function testTrainingVisibility() {
$group = $this
->createGroup([
'field_learning_path_visibility' => 'public',
'field_learning_path_enable_forum' => 1,
]);
$this
->drupalLogout();
$authenticated = $this
->createUser();
$this
->drupalLogin($authenticated);
$url = Url::fromRoute('entity.group.canonical', [
'group' => $group
->id(),
]);
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(403, 'Authenticated user can not see an main page for unpublished training.');
$group
->set('field_learning_path_published', TRUE);
$group
->save();
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(200, 'Authenticated user can see an main page for published training.');
$this
->assertSession()
->linkExists('Subscribe to training');
$this
->drupalLogout();
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->linkExists('Start');
$this
->assertSession()
->linkNotExists('Forum');
$this
->assertSession()
->linkNotExists('Training Content');
$this
->assertSession()
->linkNotExists('Documents Library');
$group
->set('field_learning_path_visibility', 'semiprivate');
$group
->save();
$this
->drupalLogin($authenticated);
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->linkExists('Subscribe to training');
$this
->drupalLogout();
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->pageTextContains('About this training');
$this
->assertSession()
->linkNotExists('Subscribe to training');
$group
->set('field_anonymous_visibility', 1);
$group
->save();
$this
->drupalGet($url);
$this
->assertSession()
->pageTextContains('You are not authorized to access this page');
$group
->set('field_learning_path_visibility', 'private');
$group
->save();
$this
->drupalLogin($authenticated);
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(403, 'Authenticated user can not see a private training.');
$this
->drupalLogout();
$this
->drupalGet($url);
$this
->assertSession()
->pageTextContains('You are not authorized to access this page');
}
public function testTrainingStart() {
$group = $this
->createGroup([
'field_learning_path_visibility' => 'public',
'field_learning_path_published' => 1,
]);
$this
->drupalLogout();
$subscribe_path = Url::fromRoute('entity.group.join', [
'group' => $group
->id(),
]);
$start_path = Url::fromRoute('opigno_learning_path.steps.start', [
'group' => $group
->id(),
]);
$canonical_path = Url::fromRoute('entity.group.canonical', [
'group' => $group
->id(),
]);
$user_one = $this
->drupalCreateUser();
$this
->drupalLogin($user_one);
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(200);
$join_button = $this
->assertSession()
->buttonExists('Join training');
$join_button
->click();
$this
->assertSession()
->statusCodeEquals(200, 'Authenticated user can subscribe to a public training.');
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(200, 'Authenticated user can start a public training.');
$this
->assertSession()
->pageTextNotContains('You are not authorized to access this page');
$this
->drupalLogout();
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(403, 'Anonymous user can not subscribe to a public training. Redirected to login page.');
$this
->assertSession()
->pageTextContains('You are not authorized to access this page');
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(200, 'Anonymous user can start a public training.');
$group
->set('field_learning_path_visibility', 'semiprivate');
$group
->save();
$user_two = $this
->drupalCreateUser();
$this
->drupalLogin($user_two);
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(200);
$join_button = $this
->assertSession()
->buttonExists('Join training');
$join_button
->click();
$this
->assertSession()
->statusCodeEquals(200, 'Authenticated user can subscribe to a semi-private training.');
$this
->drupalGet($start_path);
$this
->assertSession()
->pageTextContains('No first step assigned');
$this
->assertSession()
->statusCodeEquals(200, 'Authenticated user can start a semi-private training.');
$this
->drupalLogout();
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(403, 'Anonymous user can not subscribe to a semi-private training.');
$this
->resetAll();
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(403, 'Anonymous user can not start a semi-private training.');
$this
->drupalLogin($user_two);
$group
->removeMember($user_two);
$group
->set('field_requires_validation', 1);
$group
->save();
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(200);
$join_button = $this
->assertSession()
->buttonExists('Join training');
$join_button
->click();
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(403, 'Authenticated user can not start a semi-private training if user validation is required.');
$this
->drupalLogout();
$group
->set('field_learning_path_visibility', 'private');
LearningPathAccess::setVisibilityFields($group);
$group
->save();
$user_three = $this
->drupalCreateUser();
$this
->drupalLogin($user_three);
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(403, 'Authenticated user can not subscribe to a private training.');
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(403, 'Authenticated user can not start a private training.');
$this
->drupalLogout();
$this
->drupalGet($subscribe_path);
$this
->assertSession()
->statusCodeEquals(403, 'Anonymous user can not subscribe to a private training.');
$this
->drupalGet($start_path);
$this
->assertSession()
->statusCodeEquals(403, 'Anonymous user can not start a private training.');
}
}