webform_civicrm-8.x-5.0-beta3/tests/src/FunctionalJavascript/ContactSubmissionTest.php

tests/src/FunctionalJavascript/ContactSubmissionTest.php
<?php

namespace Drupal\Tests\webform_civicrm\FunctionalJavascript;

use Drupal\Core\Url;

/**
 * Tests submitting a Webform with CiviCRM and a single contact.
 *
 * @group webform_civicrm
 */
final class ContactSubmissionTest extends WebformCivicrmTestBase {

  /**
   * @var array
   */
  private $group;

  /**
   * @var array
   */
  private $contacts;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->setUpExtension('com.aghstrategies.uscounties');
  }

  /**
   * Create 5 contacts and a group.
   * Add 4 contacts to the group.
   * $this->contacts is an array of contacts created.
   * $this->group holds the group information.
   */
  public function createGroupWithContacts() {
    $this->group = civicrm_api3('Group', 'create', [
      'title' => 'TestGroup',
    ]);
    $this->contacts = [];
    foreach ([1, 2, 3, 4, 5] as $k) {
      $this->contacts[$k] = [
        'contact_type' => 'Individual',
        'first_name' => 'Fred' . $k, // will populate the name as Fred1, Fred2...
        'last_name' => 'Pabst' . $k,
      ];
      $contact = $this->utils->wf_civicrm_api('contact', 'create', $this->contacts[$k]);
      $this->contacts[$k]['id'] = $contact['id'];

      //Add all contacts to group except the last contact.
      if ($k != 5) {
        $this->utils->wf_civicrm_api('GroupContact', 'create', [
          'group_id' => $this->group['id'],
          'contact_id' => $this->contacts[$k]['id'],
        ]);
      }
    }
  }

  /**
   * Test Autocomplete widget with group filter.
   */
  public function testAutocompleteWithGroupFilter() {
    // Create sample contacts.
    $this->createGroupWithContacts();
    $this->drupalLogin($this->rootUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));

    $this->enableCivicrmOnWebform();
    $this->saveCiviCRMSettings();

    $this->drupalGet($this->webform->toUrl('edit-form'));

    // Edit contact element and enable select widget.
    $editContact = [
      'selector' => 'edit-webform-ui-elements-civicrm-1-contact-1-contact-existing-operations',
      'widget' => 'Autocomplete',
      'filter' => [
        'group' => $this->group['id'],
      ],
    ];
    $this->editContactElement($editContact);

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    // First 4 contacts are in the group so they should be included in the autocomplete result.
    foreach ([1, 2, 3, 4] as $k) {
      $this->fillContactAutocomplete('token-input-edit-civicrm-1-contact-1-contact-existing', $this->contacts[$k]['first_name']);
      $this->assertFieldValue('edit-civicrm-1-contact-1-contact-first-name', $this->contacts[$k]['first_name']);
      $this->assertFieldValue('edit-civicrm-1-contact-1-contact-last-name', $this->contacts[$k]['last_name']);
      $this->getSession()->getPage()->find('xpath', '//span[contains(@class, "token-input-delete-token")]')->click();;
    }
    // Contact 5 is not in the group. The search should fail.
    $this->fillContactAutocomplete('token-input-edit-civicrm-1-contact-1-contact-existing', 'Fred5');
    $this->assertSession()->elementTextContains('css', '[id="edit-civicrm-1-contact-1-fieldset-fieldset"]', '+ Create new +');
    $this->assertFieldValue('edit-civicrm-1-contact-1-contact-first-name', 'Fred5');
    $this->assertFieldValue('edit-civicrm-1-contact-1-contact-last-name', '');
  }

  /**
   * Test select contact widget for existingcontact element.
   */
  public function testSelectContactElement() {
    // Create sample contacts.
    $this->createGroupWithContacts();

    $this->drupalLogin($this->rootUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));

    $this->enableCivicrmOnWebform();
    $this->saveCiviCRMSettings();

    $this->drupalGet($this->webform->toUrl('edit-form'));
    // Edit contact element and enable select widget.
    $editContact = [
      'selector' => 'edit-webform-ui-elements-civicrm-1-contact-1-contact-existing-operations',
      'widget' => 'Select List',
      'filter' => [
        'group' => $this->group['id'],
      ],
    ];
    $this->editContactElement($editContact);

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    // Check if no autocomplete is present on the page.
    $this->assertSession()->elementNotExists('css', '.token-input-list');
    // Asset if select element is rendered for contact element.
    $this->assertSession()->elementExists('css', 'select#edit-civicrm-1-contact-1-contact-existing');

    // Check if expected contacts are loaded in the select element.
    $loadedContacts = $this->getOptions('Existing Contact');
    foreach ($this->contacts as $k => $value) {
      if ($k == 5) {
        $this->assertArrayNotHasKey($value['id'], $loadedContacts, 'Unexpected contact loaded on the select element.');
      }
      else {
        $this->assertArrayHasKey($value['id'], $loadedContacts, 'Expected contact not loaded on the select element.');
      }
    }
    $this->getSession()->getPage()->selectFieldOption('Existing Contact', $this->contacts[1]['id']);
    $this->assertSession()->assertWaitOnAjaxRequest();

    // Check if we can replace/overwrite the currently loaded values for First Name and Last Name
    $this->addFieldValue('First Name', 'Jann');
    $this->addFieldValue('Last Name', 'Arden');
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');

    // Verify if the modified value is updated for the contact.
    $contact_result = $this->utils->wf_civicrm_api('contact', 'get', [
      'sequential' => 1,
      'id' => $this->contacts[1]['id'],
    ]);
    $result_debug = var_export($contact_result, TRUE);

    $this->assertEquals(1, $contact_result['count'], $result_debug);
    $this->assertEquals('Jann', $contact_result['values'][0]['first_name'], $result_debug);
    $this->assertEquals('Arden', $contact_result['values'][0]['last_name'], $result_debug);
  }

  /**
   * Test contact submission using static and autocomplete widget.
   */
  public function testStaticAndAutocompleteOnContactElement() {
    $contact = $this->createIndividual();
    $this->drupalLogin($this->rootUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));

    // The label has a <div> in it which can cause weird failures here.
    $this->enableCivicrmOnWebform();
    $this->getSession()->getPage()->clickLink('Additional Settings');
    $this->assertSession()->elementTextContains('css', '#edit-checksum-text', 'To have this form auto-filled for anonymous users, enable the "Existing Contact" field for Contact 1 and send the following link from CiviMail');
    $this->saveCiviCRMSettings();

    $this->drupalGet($this->webform->toUrl('canonical', ['query' => ['cid1' => $contact['id']]]));
    $this->assertPageNoErrorMessages();

    // Check if no autocomplete is present on the page.
    $this->assertSession()->elementNotExists('css', '.token-input-list');

    // Check if name fields are pre populated with existing values.
    $this->assertSession()->fieldValueEquals('First Name', $contact['first_name']);
    $this->assertSession()->fieldValueEquals('Last Name', $contact['last_name']);

    // Update the name to some other value.
    $this->addFieldValue('First Name', 'Alanis');
    $this->addFieldValue('Last Name', 'Morissette');
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');

    // Verify if the modified value is updated for the contact.
    $contact_result = $this->utils->wf_civicrm_api('contact', 'get', [
      'sequential' => 1,
      'id' => $contact['id'],
    ]);
    $result_debug = var_export($contact_result, TRUE);

    $this->assertArrayHasKey('count', $contact_result, $result_debug);
    $this->assertEquals(1, $contact_result['count'], $result_debug);
    $this->assertEquals('Alanis', $contact_result['values'][0]['first_name'], $result_debug);
    $this->assertEquals('Morissette', $contact_result['values'][0]['last_name'], $result_debug);

    // Enable Autocomplete on the contact Element.
    $this->drupalGet($this->webform->toUrl('edit-form'));
    // Assert CiviCRM elements are not loaded on Add Element form.
    $this->assertSession()->elementExists('css', '#webform-ui-add-element')->click();
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->htmlOutput();
    $this->assertSession()->elementNotExists('css', '[data-drupal-selector="edit-elements-civicrm-contact"]');
    $this->assertSession()->elementNotExists('css', '[data-drupal-selector="edit-elements-civicrm-options"]');
    $this->assertSession()->elementNotExists('css', '[data-drupal-selector="edit-elements-civicrm-select"]');
    $this->getSession()->getPage()->pressButton('Close');

    $contactElementEdit = $this->assertSession()->elementExists('css', '[data-drupal-selector="edit-webform-ui-elements-civicrm-1-contact-1-contact-existing-operations"] a.webform-ajax-link');
    $contactElementEdit->click();
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->htmlOutput();
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->assertSession()->elementExists('css', '[data-drupal-selector="edit-form"]')->click();

    $this->assertSession()->waitForField('properties[widget]');
    $this->getSession()->getPage()->selectFieldOption('Form Widget', 'Autocomplete');
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->assertSession()->waitForElementVisible('css', '[data-drupal-selector="edit-properties-search-prompt"]');
    $this->addFieldValue('Search Prompt', '- Select Contact -');

    $this->getSession()->getPage()->pressButton('Save');
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->assertSession()->pageTextContains('Existing Contact has been updated');

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    // Check if autocomplete is present on the page.
    $this->assertSession()->elementExists('css', '.token-input-list');

    $currentUserUF = $this->getUFMatchRecord($this->rootUser->id());
    $currentUserDisplayName = $this->utils->wf_civicrm_api('contact', 'getvalue', [
      'id' => $currentUserUF['contact_id'],
      'return' => "display_name",
    ]);
    $this->assertSession()->elementTextContains('css', '.token-input-token', $currentUserDisplayName);
    // Clear the existing selection.
    $this->assertSession()->elementExists('css', '.token-input-delete-token')->click();

    $this->fillContactAutocomplete('token-input-edit-civicrm-1-contact-1-contact-existing', $contact_result['values'][0]['first_name']);
    $this->assertSession()->assertWaitOnAjaxRequest();

    $this->assertFieldValue('edit-civicrm-1-contact-1-contact-first-name', $contact_result['values'][0]['first_name']);
    $this->assertFieldValue('edit-civicrm-1-contact-1-contact-last-name', $contact_result['values'][0]['last_name']);

    // Update the name to some other value.
    $this->addFieldValue('First Name', 'Frederick-Edited');
    $this->addFieldValue('Last Name', 'Pabst-Edited');
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');

    // Verify if the modified value is updated for the contact.
    $contact_result2 = $this->utils->wf_civicrm_api('contact', 'get', [
      'sequential' => 1,
      'id' => $contact_result['id'],
    ]);
    $result_debug = var_export($contact_result2, TRUE);

    $this->assertArrayHasKey('count', $contact_result2, $result_debug);
    $this->assertEquals(1, $contact_result2['count'], $result_debug);
    $this->assertEquals('Frederick-Edited', $contact_result2['values'][0]['first_name'], $result_debug);
    $this->assertEquals('Pabst-Edited', $contact_result2['values'][0]['last_name'], $result_debug);
  }

  /**
   * Test Draft Submission.
   */
  public function testDraftSubmission() {
    $this->drupalLogin($this->rootUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));
    $this->enableCivicrmOnWebform();
    $this->getSession()->getPage()->checkField('Nickname');
    $this->saveCiviCRMSettings();
    $this->drupalGet($this->webform->toUrl('settings-submissions'));
    $this->htmlOutput();
    $this->getSession()->getPage()->selectFieldOption("draft", 'authenticated');
    $this->getSession()->getPage()->pressButton('Save');

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();
    $this->getSession()->getPage()->fillField('Nickname', 'Nick');

    $this->getSession()->getPage()->pressButton('Save Draft');
    $this->assertSession()->pageTextContains('Submission saved. You may return to this form later and it will restore the current values.');
    $this->assertPageNoErrorMessages();

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertSession()->pageTextContains('A partially-completed form was found. Please complete the remaining portions.');
    $this->assertSession()->fieldValueEquals('Nickname', 'Nick');
  }

  /**
   * Test Existing Contact Element configured as Current (logged-in) User
   */
  public function testStaticCurrentUser() {
    $this->drupalLogin($this->rootUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));
    $this->enableCivicrmOnWebform();

    // Scenario: root user is configuring the form - so that the logged in Contact details appear
    $this->assertSession()->checkboxChecked('Existing Contact');
    $this->assertSession()->checkboxChecked('First Name');
    $this->assertSession()->checkboxChecked('Last Name');
    $this->getSession()->getPage()->checkField('Preferred Communication Method(s)');
    $this->assertSession()->checkboxChecked('Preferred Communication Method(s)');

    $this->saveCiviCRMSettings();

    $this->drupalGet($this->webform->toUrl('edit-form'));
    $editContact = [
      'selector' => 'edit-webform-ui-elements-civicrm-1-contact-1-contact-existing-operations',
      'widget' => 'Static',
      'default' => 'Current User',
      'required' => TRUE,
    ];
    $this->editContactElement($editContact);
    $this->assertSession()->pageTextContains('Existing Contact has been updated');
    $this->editCivicrmOptionElement('edit-webform-ui-elements-civicrm-1-contact-1-contact-preferred-communication-method-operations', FALSE);

    $this->drupalLogout();
    $this->drupalLogin($this->adminUser);

    $currentUserUF = $this->getUFMatchRecord($this->adminUser->id());

    $this->utils->wf_civicrm_api('contact', 'create', [
      'id' => $currentUserUF['contact_id'],
      'first_name' => "Admin",
      'last_name' => "User",
    ]);

    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    $this->assertSession()->waitForField('First Name');
    $this->assertSession()->fieldValueEquals('First Name','Admin');
    $this->assertSession()->fieldValueEquals('Last Name', 'User');
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');
    $this->assertPageNoErrorMessages();

    $this->drupalLogout();

    // Submit the form as an anonymous user.
    // Empty static widget should throw an error on submission.
    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('Existing Contact field is required');
  }

  /**
   * Submit webform with subtype value.
   */
  public function testSubmitWebformWithContactSubtype() {
    $params = [
      'name' => "First Contact",
      'is_active' => 1,
      'parent_id' => "Individual",
    ];
    $result = $this->utils->wf_civicrm_api('ContactType', 'create', $params);
    $this->assertEquals(0, $result['is_error']);
    $this->assertEquals(1, $result['count']);

    $this->drupalLogin($this->adminUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));
    $this->enableCivicrmOnWebform();
    $this->getSession()->getPage()->selectFieldOption('civicrm_1_contact_1_contact_contact_sub_type[]', 'create_civicrm_webform_element');
    $this->assertSession()->assertWaitOnAjaxRequest();

    $this->saveCiviCRMSettings();

    $this->drupalLogout();
    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    $this->getSession()->getPage()->checkField('First Contact');
    $this->assertSession()->checkboxChecked("First Contact");
    $this->getSession()->getPage()->fillField('First Name', 'Frederick');
    $this->getSession()->getPage()->fillField('Last Name', 'Pabst');

    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertPageNoErrorMessages();
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');

    $api_result = $this->utils->wf_civicrm_api('Contact', 'get', [
      'sequential' => 1,
      'first_name' => 'Frederick',
      'last_name' => 'Pabst',
    ]);
    $this->assertEquals(1, $api_result['count']);
    $contact = reset($api_result['values']);
    $this->assertEquals('First_Contact', implode($contact['contact_sub_type']));
  }

  /**
   * Ensure "sticky" star in webform results works.
   */
  public function testSubmitWebformSticky() {
    $params = [
      'name' => "First Contact",
      'is_active' => 1,
      'parent_id' => "Individual",
    ];
    $result = $this->utils->wf_civicrm_api('ContactType', 'create', $params);
    $this->assertEquals(0, $result['is_error']);
    $this->assertEquals(1, $result['count']);

    $this->drupalLogin($this->adminUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));
    $this->enableCivicrmOnWebform();
    $this->getSession()->getPage()->selectFieldOption('civicrm_1_contact_1_contact_contact_sub_type[]', 'create_civicrm_webform_element');
    $this->assertSession()->assertWaitOnAjaxRequest();

    $this->saveCiviCRMSettings();

    $this->drupalLogout();
    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    $this->getSession()->getPage()->checkField('First Contact');
    $this->assertSession()->checkboxChecked("First Contact");
    $this->getSession()->getPage()->fillField('First Name', 'Frederick');
    $this->getSession()->getPage()->fillField('Last Name', 'Pabst');

    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertPageNoErrorMessages();

    // Make sure the "sticky" AJAX works.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet($this->webform->toUrl('results-submissions'));
    $stickyLink = $this->assertSession()->elementExists('css', "#webform-submission-1-sticky");
    $this->assertSession()->elementExists('css', '#webform-submission-1-sticky .webform-icon-sticky--off');
    $stickyLink->click();
    $this->assertSession()->assertWaitOnAjaxRequest();
    $this->assertSession()->elementExists('css', '#webform-submission-1-sticky .webform-icon-sticky--on');
  }

  /**
   * Test submitting a contact.
   *
   * @dataProvider dataContactValues
   */
  public function testSubmitWebform($contact_type, array $contact_values) {
    $communication_styles = array_column($this->utils->wf_crm_apivalues('OptionValue', 'get', [
      'sequential' => 1,
      'option_group_id' => "communication_style",
    ]), 'value', 'name');
    $this->assertArrayHasKey('contact', $contact_values, 'Test data must contain contact');
    $this->assertArrayHasKey('first_name', $contact_values['contact'], 'Test contact data must contain first_name');
    $this->assertArrayHasKey('last_name', $contact_values['contact'], 'Test contact data must contain last_name');

    $this->drupalLogin($this->adminUser);
    $this->drupalGet(Url::fromRoute('entity.webform.civicrm', [
      'webform' => $this->webform->id(),
    ]));
    // The label has a <div> in it which can cause weird failures here.
    $this->enableCivicrmOnWebform();

    // @see wf_crm_location_fields().
    $configurable_contact_field_groups = [
      'contact' => [
        'communication_style_id',
      ],
      'address' => [
        'street_address',
        'city',
        'postal_code',
        'county_id',
        'country_id',
        'state_province_id',
      ],
      'email' => 'email',
      'website' => 'url',
      'phone' => 'phone',
      'im' => 'name',
    ];
    // refactor that -> use yield
    // address => 'street_address' or 'city'
    foreach ($configurable_contact_field_groups as $field_group => $field_value_key) {
      if (isset($contact_values[$field_group])) {
        if ($field_group != 'contact') {
          $this->assertTrue(is_array($contact_values[$field_group]));
          $this->assertTrue(isset($contact_values[$field_group][0]));
          $this->getSession()->getPage()->selectFieldOption('contact_1_number_of_' . $field_group, count($contact_values[$field_group]));
          $this->assertSession()->assertWaitOnAjaxRequest();
          $this->htmlOutput();
        }
        if (is_array($field_value_key)) {
          foreach ($field_value_key as $value_key) {
            $this->getSession()->getPage()->checkField("civicrm_1_contact_1_{$field_group}_{$value_key}");
            $this->assertSession()->checkboxChecked("civicrm_1_contact_1_{$field_group}_{$value_key}");
          }
        }
        else {
          $this->assertSession()->checkboxChecked("civicrm_1_contact_1_{$field_group}_{$field_value_key}");
        }
      }
    }
    $this->saveCiviCRMSettings();

    $this->drupalLogout();
    $this->drupalGet($this->webform->toUrl('canonical'));
    $this->assertPageNoErrorMessages();

    foreach ($contact_values as $entity_type => $field_values) {
      foreach ($field_values as $field_name => $field_value) {
        if (is_array($field_value)) {
          foreach ($field_value as $key => $value) {
            $selector = "civicrm_1_contact_1_{$entity_type}_{$key}";
            $this->addFieldValue($selector, $value);
            $this->getSession()->wait(1000);
          }
        }
        else {
          if ($field_name == 'communication_style_id') {
            $field_value = $communication_styles[$field_value] ?? $field_value;
          }
          $selector = "civicrm_1_contact_1_{$entity_type}_{$field_name}";
          $this->addFieldValue($selector, $field_value);
        }
      }
    }
    $this->getSession()->getPage()->pressButton('Submit');
    $this->assertSession()->pageTextContains('New submission added to CiviCRM Webform Test.');
    $contact_result = $this->utils->wf_civicrm_api('contact', 'get', [
      'sequential' => 1,
      'first_name' => $contact_values['contact']['first_name'],
      'last_name' => $contact_values['contact']['last_name'],
    ]);
    $result_debug = var_export($contact_result, TRUE);

    $this->assertArrayHasKey('count', $contact_result, $result_debug);
    $this->assertEquals(1, $contact_result['count'], $result_debug);
    $contact = $contact_result['values'][0];
    $this->assertEquals($contact_type, $contact['contact_type']);

    foreach ($contact_values['contact'] as $field_name => $field_value) {
      if ($field_name == 'communication_style_id') {
        $field_value = $communication_styles[$field_value] ?? $field_value;
      }
      $this->assertEquals($field_value, $contact[$field_name], $result_debug);
    }
    if (isset($contact_values['email'])) {
      $this->assertEquals($contact_values['email'][0]['email'], $contact['email']);
    }

    foreach ($configurable_contact_field_groups as $field_group => $field_value_key) {
      if (isset($contact_values[$field_group]) && $field_group != 'contact') {
        $api_result = $this->utils->wf_civicrm_api($field_group, 'get', [
          'sequential' => 1,
          'contact_id' => $contact['contact_id'],
        ]);
        $this->assertEquals(count($contact_values[$field_group]), $api_result['count']);
        foreach ($api_result['values'] as $key => $result_entity) {
          if (is_array($field_value_key)) {
            foreach ($field_value_key as $value_key) {
              if (isset($contact_values[$field_group][$key][$value_key])) {
                $this->assertEquals($contact_values[$field_group][$key][$value_key], $result_entity[$value_key]);
              }
            }
          }
          elseif (isset($contact_values[$field_group][$key][$field_value_key])) {
            $this->assertEquals($contact_values[$field_group][$key][$field_value_key], $result_entity[$field_value_key]);
          }
        }
      }
    }
  }

  /**
   * Data for the test.
   *
   * Each test returns the Contact type and array of contact values.
   *
   * It is setup that there is one contact, but there may be multiple values
   * for email, website, etc.
   *
   * @todo determine what "type" each email could be.
   *
   * contact_values:
   *  contact:
   *    first_name: foo
   *    last_name: bar
   *    nickname: baz
   *  email:
   *    - email: foo@example.com
   *      type: main
   *  website:
   *    - url: https://example.com
   *
   * @return \Generator
   *   The test data.
   */
  public function dataContactValues() {
    yield [
      'Individual',
      [
        'contact' => [
          'first_name' => 'Frederick',
          'last_name' => 'Pabst',
          'communication_style_id' => 'familiar',
        ]
    ]];
    yield [
      'Individual',
      [
        'contact' => [
          'first_name' => 'Frederick',
          'last_name' => 'Pabst',
        ],
        'email' => [
          [
            'email' => 'fred@example.com',
          ]
        ],
        'address' => [
          [
            'street_address' => 'Test',
            'city' => 'Adamsville',
            'postal_code' => '35005',
            'country_id' => '1228', // United States
            'state_province_id' => '1000', // Alabama
            'county_id' => '7',
          ]
        ],
    ]];
    yield [
      'Individual',
      [
        'contact' => [
          'first_name' => 'Frederick',
          'last_name' => 'Pabst',
          'communication_style_id' => 'formal',
        ],
        'website' => [
          [
            'url' => 'https://example.com',
          ]
        ],
    ]];
    yield [
      'Individual',
      [
        'contact' => [
          'first_name' => 'Frederick',
          'last_name' => 'Pabst',
          'communication_style_id' => 'formal',
        ],
        'phone' => [
          [
            'phone' => '555-555-5555',
          ]
        ],
    ]];
    yield [
      'Individual',
      [
        'contact' => [
          'first_name' => 'Frederick',
          'last_name' => 'Pabst',
          'communication_style_id' => 'familiar',
        ],
        'email' => [
          [
            'email' => 'fred@example.com',
          ]
        ],
        'website' => [
          [
            'url' => 'https://example.com',
          ]
        ],
        'phone' => [
          [
            'phone' => '555-555-5555',
          ]
        ],
    ]];
  }

}

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

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