civicrm_entity-8.x-3.0-beta1/tests/src/FunctionalJavascript/Views/ActivityFullcalendarViewTest.php

tests/src/FunctionalJavascript/Views/ActivityFullcalendarViewTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\civicrm_entity\FunctionalJavascript\Views;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver;
use Drupal\Tests\civicrm_entity\FunctionalJavascript\CivicrmEntityTestBase;

/**
 * Test of Full Calendar Activity Views.
 *
 * @requires module fullcalendar_view
 */
final class ActivityFullcalendarViewTest extends CivicrmEntityTestBase {

  /**
   * {@inheritdoc}
   *
   * @todo fix config schema from this module for Views.
   */
  protected $strictConfigSchema = FALSE;

  /**
   * The test activity.
   *
   * @var mixed
   */
  private $activityId;

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

  /**
   * {@inheritdoc}
   *
   * @todo needs more data.
   */
  public function setUp(): void {
    parent::setUp();

    $admin_user = $this->createUser([
      'access content',
      'administer civicrm entity',
    ]);
    $this->drupalLogin($admin_user);
    $this->enableCivicrmEntityTypes(['civicrm_activity', 'civicrm_contact']);

    $civicrm_api = $this->container->get('civicrm_entity.api');
    $result = $civicrm_api->save('Contact', [
      'contact_type' => 'Individual',
      'first_name' => 'Johnny',
      'last_name' => 'Appleseed',
      'email' => 'johnny@example.com',
    ]);
    $contact_id = $result['id'];
    $user = $this->createUser([], 'johnny');

    // Verify the user and contact linked.
    $fetched_contact_id = \CRM_Core_BAO_UFMatch::getContactId($user->id());
    self::assertEquals($contact_id, $fetched_contact_id);

    $date = new DrupalDateTime('now');
    $result = $civicrm_api->save('Activity', [
      'source_contact_id' => $contact_id,
      'activity_type_id' => 'Meeting',
      'subject' => 'Meeting about new seeds',
      'activity_date_time' => $date->format('Y-m-d') . ' 12:00:00',
      'status_id' => 2,
      'priority_id' => 1,
      'duration' => 120,
      'location' => 'Pennsylvania',
      'details' => 'We need to find more seeds!',
    ]);
    $this->activityId = $result['id'];

    \Drupal::configFactory()
      ->getEditable('views.settings')
      ->set('ui.always_live_preview', FALSE)
      ->set('ui.show.advanced_column', TRUE)
      ->save();
  }

  /**
   * Test Full Calendar Display.
   */
  public function testFullcalendarDisplay(): void {
    $this->drupalGet('/activity-fullcalendar');
    $this->createScreenshot('../calendar.png');
    $fullcalendar = $this->assertSession()->elementExists('css', '.js-drupal-fullcalendar');
    $this->assertSession()->waitForElement('css', '.fc-event-container');
    $this->assertSession()->elementTextContains('css', '.fc-event-container .fc-time', '12:00 pm');
    $this->assertSession()->elementTextContains('css', '.fc-event-container .fc-title', 'Meeting about new seeds');

    // @todo The dialog opened is extremely difficult to target.
    $this->click('.fc-event-container .fc-event');
    $this->assertSession()->waitForElement('css', '.jsframe-titlebar-focused');
    $this->assertSession()->elementTextContains('css', '.jsframe-titlebar-focused', 'Meeting about new seeds');

    $modal = $this->assertSession()->elementExists('css', 'div[id^="window_"][id$="_canvas"]');
    self::assertNotNull($modal);
    $this->assertSession()->elementTextContains('css', 'div[id^="window_"][id$="_canvas"]', 'Meeting about new seeds');
    $this->assertSession()->elementTextContains('css', 'div[id^="window_"][id$="_canvas"]', 'johnny');

    $civicrm_api = $this->container->get('civicrm_entity.api');
    $activity = $civicrm_api->get('activity', [
      'id' => $this->activityId,
    ]);

    $date = new DrupalDateTime($activity[$this->activityId]['activity_date_time']);
    $duration = $activity[$this->activityId]['duration'];
    $start_formatted = $date->format('D, m/d/Y - H:i');
    $date->add(new \DateInterval("PT{$duration}M"));
    $end_formatted = $date->format('D, m/d/Y - H:i');
    $this->assertSession()->pageTextContains($start_formatted . ' - ' . $end_formatted);
  }

  /**
   * Test Activity Drag and Update.
   */
  public function testActivityDragAndUpdate(): void {
    $previous_day = new DrupalDateTime('-1 day');
    $previous_day_formatted = $previous_day->format('Y-m-d');

    $this->drupalGet('/activity-fullcalendar');
    $fullcalendar = $this->assertSession()->elementExists('css', '.js-drupal-fullcalendar');
    $event = $this->assertSession()->waitForElement('css', '.fc-event-container .fc-event');
    $destination = $this->assertSession()->elementExists('css', ".fc-bg [data-date='$previous_day_formatted']", $fullcalendar);

    // Using dragTo causes exceptions due to an alert appearing during the
    // "drop" event.
    // $event->dragTo($destination);
    $driver = $this->getSession()->getDriver();
    assert($driver instanceof DrupalSelenium2Driver);
    $webdriver_session = $driver->getWebDriverSession();

    $webdriver_session->moveto([
      'element' => $webdriver_session->element('xpath', $event->getXpath())->getID(),
    ]);
    $webdriver_session->buttondown();
    $webdriver_session->moveto([
      'element' => $webdriver_session->element('xpath', $destination->getXpath())->getID(),
    ]);
    $webdriver_session->buttonup();

    $driver = $this->getSession()->getDriver();
    assert($driver instanceof DrupalSelenium2Driver);
    $alert_text = $driver->getWebDriverSession()->getAlert_text();
    // @todo deprecated in Drupal 9.2 PHPUnit bump.
    // Change to assertMatchesRegularExpression for PHPUnit 10.
    // @see https://www.drupal.org/project/drupal/issues/3217709
    $this->assertRegExp(
      '/^Meeting about new seeds start is now ([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]) (2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9]) and end is now ([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]) (2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9]) - Do you want to save this change\?$/',
      $alert_text
    );
    $driver->getWebDriverSession()->accept_alert();
    $this->assertSession()->assertWaitOnAjaxRequest();

    $civicrm_api = $this->container->get('civicrm_entity.api');
    $activity = $civicrm_api->get('activity', [
      'id' => $this->activityId,
    ]);
    $this->assertEquals($previous_day_formatted . ' 12:00:00', $activity[$this->activityId]['activity_date_time']);
  }

}

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

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