View source
<?php
namespace Drupal\Tests\sms\Functional;
use Drupal\Core\Entity\EntityInterface;
use Drupal\sms\Entity\PhoneNumberSettingsInterface;
use Drupal\sms\Entity\SmsGateway;
use Drupal\Component\Utility\Unicode;
use Drupal\sms\Entity\SmsGatewayInterface;
use Drupal\sms\Message\SmsMessage;
use Drupal\sms\Message\SmsDeliveryReport;
use Drupal\sms\Message\SmsMessageInterface;
use Drupal\sms\Message\SmsMessageResult;
trait SmsFrameworkTestTrait {
protected function setFallbackGateway(SmsGatewayInterface $sms_gateway = NULL) {
$sms_gateway = $sms_gateway ? $sms_gateway
->id() : NULL;
$this
->config('sms.settings')
->set('fallback_gateway', $sms_gateway)
->save();
}
protected function createMemoryGateway(array $values = []) {
$id = isset($values['id']) ? $values['id'] : Unicode::strtolower($this
->randomMachineName(16));
$gateway = SmsGateway::create($values + [
'plugin' => 'memory',
'id' => $id,
'label' => $this
->randomString(),
'settings' => [
'gateway_id' => $id,
],
] + $values);
$gateway
->enable();
$gateway
->save();
return $gateway;
}
public function getTestMessages(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.send', []);
return isset($sms_messages[$gateway_id]) ? $sms_messages[$gateway_id] : [];
}
public function getLastTestMessage(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.send', []);
return isset($sms_messages[$gateway_id]) ? end($sms_messages[$gateway_id]) : FALSE;
}
public function resetTestMessages(SmsGatewayInterface $sms_gateway = NULL) {
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.send', []);
if ($sms_gateway) {
$sms_messages[$sms_gateway
->id()] = [];
}
else {
$sms_messages = [];
}
\Drupal::state()
->set('sms_test_gateway.memory.send', $sms_messages);
}
protected function getIncomingMessages(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.incoming', []);
return isset($sms_messages[$gateway_id]) ? $sms_messages[$gateway_id] : [];
}
protected function getLastIncomingMessage(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.incoming', []);
return isset($sms_messages[$gateway_id]) ? end($sms_messages[$gateway_id]) : FALSE;
}
protected function resetIncomingMessages(SmsGatewayInterface $sms_gateway = NULL) {
$sms_messages = \Drupal::state()
->get('sms_test_gateway.memory.incoming', []);
if ($sms_gateway) {
$sms_messages[$sms_gateway
->id()] = [];
}
else {
$sms_messages = [];
}
\Drupal::state()
->set('sms_test_gateway.memory.incoming', $sms_messages);
}
protected function getTestMessageReports(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_reports = \Drupal::state()
->get('sms_test_gateway.memory.report', []);
return isset($sms_reports[$gateway_id]) ? $sms_reports[$gateway_id] : [];
}
protected function getLastTestMessageReport(SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$sms_reports = \Drupal::state()
->get('sms_test_gateway.memory.report', []);
return isset($sms_reports[$gateway_id]) ? end($sms_reports[$gateway_id]) : FALSE;
}
protected function getTestMessageReport($message_id, SmsGatewayInterface $sms_gateway) {
$gateway_id = $sms_gateway
->id();
$reports = \Drupal::state()
->get('sms_test_gateway.memory.report', []);
return $reports[$gateway_id][$message_id];
}
protected function resetTestMessageReports() {
\Drupal::state()
->set('sms_test_gateway.memory.report', []);
}
protected function createEntityWithPhoneNumber(PhoneNumberSettingsInterface $phone_number_settings, array $phone_numbers = []) {
$entity_type = $phone_number_settings
->getPhoneNumberEntityTypeId();
$field_name = $phone_number_settings
->getFieldName('phone_number');
$entity_type_manager = \Drupal::entityTypeManager();
$test_entity = $entity_type_manager
->getStorage($entity_type)
->create([
'name' => $this
->randomMachineName(),
]);
foreach ($phone_numbers as $phone_number) {
$test_entity->{$field_name}[] = $phone_number;
}
$test_entity
->save();
return $test_entity;
}
protected function verifyPhoneNumber(EntityInterface $entity, $phone_number) {
$verifications = \Drupal::entityTypeManager()
->getStorage('sms_phone_number_verification')
->loadByProperties([
'entity__target_type' => $entity
->getEntityTypeId(),
'entity__target_id' => $entity
->id(),
'phone' => $phone_number,
]);
$verification = reset($verifications);
$verification
->setStatus(TRUE)
->save();
}
protected function getLastVerification() {
$verification_storage = \Drupal::entityTypeManager()
->getStorage('sms_phone_number_verification');
$verification_ids = $verification_storage
->getQuery()
->sort('created', 'DESC')
->range(0, 1)
->execute();
$verifications = $verification_storage
->loadMultiple($verification_ids);
return reset($verifications);
}
protected function createMessageResult(SmsMessageInterface $sms_message) {
$reports = array_map(function ($recipient) {
return (new SmsDeliveryReport())
->setRecipient($recipient);
}, $sms_message
->getRecipients());
return (new SmsMessageResult())
->setErrorMessage($this
->randomString())
->setReports($reports);
}
protected function randomSmsMessage($uid = 1) {
$phone_numbers = $this
->randomPhoneNumbers(1);
return new SmsMessage($phone_numbers[0], $this
->randomPhoneNumbers(), $this
->randomString(), [], $uid);
}
protected function randomPhoneNumbers($quantity = NULL) {
$quantity = isset($quantity) ? $quantity : rand(2, 20);
$numbers = [];
for ($i = 0; $i < $quantity; $i++) {
$numbers[] = '+' . rand(1000, 999999999);
}
return $numbers;
}
}