public function ContactDedupeTest::testSubmitWebform in Webform CiviCRM Integration 8.5
Test submitting Contact - Matching Rule
File
- tests/
src/ FunctionalJavascript/ ContactDedupeTest.php, line 29
Class
- ContactDedupeTest
- Tests submitting a Webform with CiviCRM: single contact + custom fields.
Namespace
Drupal\Tests\webform_civicrm\FunctionalJavascriptCode
public function testSubmitWebform() {
$this
->createContactSubtype();
$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
->assertSession()
->waitForText('Enable CiviCRM Processing');
$this
->assertSession()
->waitForField('nid');
$this
->getSession()
->getPage()
->checkField('nid');
$this
->getSession()
->getPage()
->selectFieldOption('civicrm_1_contact_1_contact_contact_sub_type[]', 'Student');
$this
->assertSession()
->assertWaitOnAjaxRequest();
// The Default Unsupervised Matching Rule in CiviCRM is: Email so we need to get it on the webform:
$this
->getSession()
->getPage()
->selectFieldOption('contact_1_number_of_email', 1);
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->assertSession()
->checkboxChecked("civicrm_1_contact_1_email_email");
$this
->getSession()
->getPage()
->selectFieldOption('civicrm_1_contact_1_email_location_type_id', 'Main');
$this
->htmlOutput();
$this
->getSession()
->getPage()
->pressButton('Save Settings');
$this
->assertSession()
->pageTextContains('Saved CiviCRM settings');
$this
->assertPageNoErrorMessages();
$this
->drupalLogout();
$this
->drupalGet($this->webform
->toUrl('canonical'));
$this
->assertPageNoErrorMessages();
$this
->assertSession()
->waitForField('First Name');
$this
->getSession()
->getPage()
->fillField('First Name', 'Frederick');
$this
->getSession()
->getPage()
->fillField('Last Name', 'Pabst');
$this
->getSession()
->getPage()
->fillField('Email', 'frederick@pabst.io');
$this
->getSession()
->getPage()
->pressButton('Submit');
$this
->assertPageNoErrorMessages();
$this
->assertSession()
->pageTextContains('New submission added to CiviCRM Webform Test.');
// Note: custom fields are on contact_id=3 (1=default org; 2=the drupal user)
$utils = \Drupal::service('webform_civicrm.utils');
$api_result = $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('Student', implode($contact['contact_sub_type']));
$api_result = $utils
->wf_civicrm_api('Email', 'get', [
'contact_id' => $contact['id'],
'sequential' => 1,
]);
$email = reset($api_result['values']);
$this
->assertEquals('frederick@pabst.io', $email['email']);
// Next: load the form again and resubmit it -> update the Last Name:
$this
->drupalGet($this->webform
->toUrl('canonical'));
$this
->assertPageNoErrorMessages();
$this
->assertSession()
->waitForField('First Name');
$this
->getSession()
->getPage()
->fillField('First Name', 'Frederick');
$this
->getSession()
->getPage()
->fillField('Last Name', 'Pabsted');
$this
->getSession()
->getPage()
->fillField('Email', 'frederick@pabst.io');
$this
->getSession()
->getPage()
->pressButton('Submit');
$this
->assertPageNoErrorMessages();
$this
->assertSession()
->pageTextContains('New submission added to CiviCRM Webform Test.');
// Check to see Last Name has been updated
$api_result = $utils
->wf_civicrm_api('Contact', 'get', [
'sequential' => 1,
'contact_id' => $contact['id'],
]);
$contact = reset($api_result['values']);
$this
->assertEquals('Pabsted', $contact['last_name']);
// throw new \Exception(var_export($contact, TRUE));
// First Name and Email should have remained the same:
$this
->assertEquals('Frederick', $contact['first_name']);
$this
->assertEquals('Student', implode($contact['contact_sub_type']));
$api_result = $utils
->wf_civicrm_api('Email', 'get', [
'contact_id' => $contact['id'],
'sequential' => 1,
]);
$email = reset($api_result['values']);
$this
->assertEquals('frederick@pabst.io', $email['email']);
}