knowledge-8.x-1.x-dev/tests/src/Functional/CompetencyPromotionTest.php

tests/src/Functional/CompetencyPromotionTest.php
<?php

namespace Drupal\Tests\knowledge\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests knowledge administration and preview access.
 *
 * @group knowledge
 */
class CompetencyPromotionTest extends BrowserTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'knowledge',
    'node',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * The learner user.
   *
   * @var \Drupal\user\UserInterface
   */
  protected $learner;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->learner = $this->drupalCreateUser([
      'access knowledge',
      'access content',
      'view own knowledge_competency',
    ]);

  }

  /**
   * Tests role advancement, auto-promotion, current role.
   */
  public function testCompetencyAutoSelf() {
    $learner_id = $this->learner->id();
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $competency_url = "user/$learner_id/competency";
    $edit_url = "user/$learner_id/edit";
    // The coach is not the learner's coach yet.
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(403);

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doCandidate();

    $this->assertSession()->pageTextContains('was promoted to Candidate');

    $this->doContributor();

    $this->assertSession()->pageTextContains('was promoted to Contributor');

    $this->doPublisher();

    $this->assertSession()->pageTextContains('was promoted to Publisher');

  }

  /**
   * Tests role advancement, auto-promotion, next role.
   */
  public function testCompetencyAutoNext() {
    $config = \Drupal::service('config.factory')->getEditable('knowledge.competency.settings');
    $settings = $config->get('roles');
    foreach ($settings as $index => $value) {
      $settings[$index]['promote'] = 'next';
      if ($value['role'] == 'publisher') {
        $settings[$index]['promote'] = '_none';
        $settings[$index]['action'] = '_none';
      }
    }
    $config->set('roles', $settings)->save();

    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $learner_id = $this->learner->id();
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $competency_url = "user/$learner_id/competency";
    $edit_url = "user/$learner_id/edit";
    // The coach is not the learner's coach yet.
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(403);

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doCandidate();

    $this->assertSession()->pageTextContains('was promoted to Contributor');

    $this->doContributor();

    $this->assertSession()->pageTextContains('was promoted to Publisher');

    $this->doPublisher();

  }

  /**
   * Tests role advancement, leader approval, current role.
   */
  public function testCompetencyLeaderSelf() {
    $config = \Drupal::service('config.factory')->getEditable('knowledge.competency.settings');
    $settings = $config->get('roles');
    foreach ($settings as $index => $value) {
      $settings[$index]['action'] = 'leader';
    }
    $config->set('roles', $settings)->save();

    $leader = $this->drupalCreateUser([
      'view follower knowledge_competency',
    ]);
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $learner_id = $this->learner->id();
    $competency_url = "user/$learner_id/competency";

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->knowledge_leader->target_id = $leader->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doCandidate();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(200);

    $this->assertSession()->pageTextContains('Candidate');
    $this->submitForm([], 'Promote');

    $this->assertSession()->pageTextContains('was promoted to Candidate');

    $this->drupalLogin($coach);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->doContributor();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(200);

    $this->assertSession()->pageTextContains('Contributor');
    $this->submitForm([], 'Promote');

    $this->assertSession()->pageTextContains('was promoted to Contributor');

    $this->drupalLogin($coach);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->doPublisher();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(200);

    $this->assertSession()->pageTextContains('Publisher');
    $this->submitForm([], 'Promote');

    $this->assertSession()->pageTextContains('was promoted to Publisher');

  }

  /**
   * Tests role advancement, leader approval, current role.
   */
  public function testCompetencyLeaderNext() {
    $config = \Drupal::service('config.factory')->getEditable('knowledge.competency.settings');
    $settings = $config->get('roles');
    foreach ($settings as $index => $value) {
      $settings[$index]['action'] = 'leader';
      $settings[$index]['promote'] = 'next';
      if ($value['role'] == 'knowledge_publisher') {
        $settings[$index]['promote'] = '_none';
        $settings[$index]['action'] = '_none';
      }
    }
    $config->set('roles', $settings)->save();

    $leader = $this->drupalCreateUser([
      'view follower knowledge_competency',
    ]);
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $learner_id = $this->learner->id();
    $competency_url = "user/$learner_id/competency";

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->knowledge_leader->target_id = $leader->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doCandidate();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(200);

    $this->assertSession()->pageTextContains('Contributor');
    $this->submitForm([], 'Promote');

    $this->assertSession()->pageTextContains('was promoted to Contributor');

    $this->drupalLogin($coach);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->doContributor();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(200);

    $this->assertSession()->pageTextContains('Publisher');
    $this->submitForm([], 'Promote');

    $this->assertSession()->pageTextContains('was promoted to Publisher');

    $this->drupalLogin($coach);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->doPublisher();

    $this->drupalLogin($leader);
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);

    $this->drupalGet($competency_url . '/approve');
    $assert->statusCodeEquals(404);

    // $this->assertSession()->pageTextContains('Publisher');
    // $this->submitForm([], 'Promote');
    // $this->assertSession()->pageTextContains('was promoted to Publisher');
  }

  /**
   * Tests role advancement, _none, on role.
   */
  public function testCompetencyNone() {
    $config = \Drupal::service('config.factory')->getEditable('knowledge.competency.settings');
    $settings = $config->get('roles');
    foreach ($settings as $index => $value) {
      $settings[$index]['action'] = '_none';
      $settings[$index]['promote'] = '_none';
    }
    $config->set('roles', $settings)->save();

    $learner_id = $this->learner->id();
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $competency_url = "user/$learner_id/competency";
    $edit_url = "user/$learner_id/edit";
    // The coach is not the learner's coach yet.
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(403);

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doCandidate();

    $this->assertSession()->pageTextNotContains('was promoted to Candidate');

    $this->doContributor();

    $this->assertSession()->pageTextNotContains('was promoted to Contributor');

    $this->doPublisher();

    $this->assertSession()->pageTextNotContains('was promoted to Publisher');

  }

  /**
   * Tests role advancement, auto-promotion, current role.
   */
  public function testCompetencyAutoSelfAll() {
    $learner_id = $this->learner->id();
    $coach = $this->drupalCreateUser([
      'edit learner knowledge_competency',
    ]);
    $this->drupalLogin($coach);

    $assert = $this->assertSession();

    $competency_url = "user/$learner_id/competency";
    $edit_url = "user/$learner_id/edit";
    // The coach is not the learner's coach yet.
    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(403);

    // The coach is the learner's coach.
    $this->learner->knowledge_coach->target_id = $coach->id();
    $this->learner->save();

    $this->drupalGet($competency_url);
    $assert->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('Candidate');
    $this->assertSession()->pageTextContains('Contributor');
    $this->assertSession()->pageTextContains('Publisher');

    $this->doPublisher();

    $this->assertSession()->pageTextContains('was promoted to Publisher');

  }

  /**
   * Submit the form with Candidate values.
   */
  protected function doCandidate() {
    $this->submitForm([
      'edit-field-search-it-value' => 1,
      'edit-field-link-it-value' => 1,
      'edit-field-flag-it-value' => 1,
    ], 'Save');
  }

  /**
   * Submit the form with Contributor values.
   */
  protected function doContributor() {
    $this->submitForm([
      'edit-field-search-it-value' => 1,
      'edit-field-link-it-value' => 1,
      'edit-field-flag-it-value' => 1,

      'edit-field-business-value' => 1,
      'edit-field-documents-request-value' => 1,
      'edit-field-fix-it-value' => 1,
      'edit-field-reuse-value' => 1,
      'edit-field-kcs-article-elements-value' => 1,
      'edit-field-structure-value' => 1,
      'edit-field-complete-thoughts-value' => 1,
      'edit-field-one-value' => 1,
      'edit-field-includes-context-value' => 1,
      'edit-field-update-or-create-value' => 1,
      'edit-field-solve-loop-value' => 1,

    ], 'Save');
  }

  /**
   * Submit the form with publisher values.
   */
  protected function doPublisher() {
    $this->submitForm([
      'edit-field-search-it-value' => 1,
      'edit-field-link-it-value' => 1,
      'edit-field-flag-it-value' => 1,

      'edit-field-business-value' => 1,
      'edit-field-documents-request-value' => 1,
      'edit-field-fix-it-value' => 1,
      'edit-field-reuse-value' => 1,
      'edit-field-kcs-article-elements-value' => 1,
      'edit-field-structure-value' => 1,
      'edit-field-complete-thoughts-value' => 1,
      'edit-field-one-value' => 1,
      'edit-field-includes-context-value' => 1,
      'edit-field-update-or-create-value' => 1,
      'edit-field-solve-loop-value' => 1,

      'edit-field-capture-context-value' => 1,
      'edit-field-audience-value' => 1,
      'edit-field-content-standard-value' => 1,
      'edit-field-sufficient-to-solve-value' => 1,
      'edit-field-relevant-value' => 1,
      'edit-field-iterative-search-value' => 1,
      'edit-field-improve-value' => 1,
      'edit-field-process-adherence-value' => 1,
      'edit-field-confidence-value' => 1,
      'edit-field-capture-in-the-moment-value' => 1,
      'edit-field-collaborate-value' => 1,

    ], 'Save');
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc