From 234f7f003be046fb8c18696c1c84f1c00e339364 Mon Sep 17 00:00:00 2001 From: Prateek Banga Date: Wed, 27 Sep 2023 18:58:00 +0530 Subject: [PATCH] updated test cases for msg91 provider, moves worker to use provider from settings --- .env | 7 ++- app/config/collections.php | 2 +- app/controllers/api/account.php | 6 +- app/controllers/api/messaging.php | 17 +++--- app/controllers/api/teams.php | 3 +- app/workers/messaging.php | 55 +++++++++---------- docker-compose.yml | 5 ++ src/Appwrite/Event/Messaging.php | 20 +++---- .../Account/AccountCustomClientTest.php | 1 + tests/e2e/Services/GraphQL/AccountTest.php | 1 + tests/e2e/Services/GraphQL/Base.php | 2 + .../e2e/Services/Messaging/MessagingBase.php | 1 + 12 files changed, 67 insertions(+), 53 deletions(-) diff --git a/.env b/.env index 9117fe9f3..7f41937b8 100644 --- a/.env +++ b/.env @@ -100,4 +100,9 @@ _APP_ASSISTANT_OPENAI_API_KEY= _APP_MESSAGE_SMS_PROVIDER_MSG91_SENDER_ID= _APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY= _APP_MESSAGE_SMS_PROVIDER_MSG91_FROM= -_APP_MESSAGE_SMS_PROVIDER_MSG91_TO= \ No newline at end of file +_APP_MESSAGE_SMS_PROVIDER_MSG91_TO= +_APP_MESSAGE_SMS_PROVIDER_MAILGUN_API_KEY= +_APP_MESSAGE_SMS_PROVIDER_MAILGUN_DOMAIN= +_APP_MESSAGE_SMS_PROVIDER_MAILGUN_FROM= +_APP_MESSAGE_SMS_PROVIDER_MAILGUN_RECEIVER_EMAIL= +_APP_MESSAGE_SMS_PROVIDER_MAILGUN_IS_EU_REGION= diff --git a/app/config/collections.php b/app/config/collections.php index 5506467cc..9aec38a3d 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -1456,7 +1456,7 @@ $commonCollections = [ 'size' => 16384, 'signed' => true, 'required' => false, - 'default' => null, + 'default' => [], 'array' => false, 'filters' => ['json'], ], diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index e4ef08900..7115bf568 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -1343,14 +1343,13 @@ App::post('/v1/account/sessions/phone') 'to' => [$target->getId()], 'data' => [ 'content' => $message, - 'from' => $from, ], 'providerId' => $provider->getId(), 'providerInternalId' => $provider->getInternalId(), ])); $messaging - ->setMessage($messageDoc) + ->setMessageId($messageDoc->getId()) ->setProject($project) ->trigger(); @@ -2973,14 +2972,13 @@ App::post('/v1/account/verification/phone') 'to' => [$target->getId()], 'data' => [ 'content' => $message, - 'from' => $from, ], 'providerId' => $provider->getId(), 'providerInternalId' => $provider->getInternalId(), ])); $messaging - ->setMessage($messageDoc) + ->setMessageId($messageDoc->getId()) ->setProject($project) ->trigger(); diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 45c2760ab..9abf1d492 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -262,6 +262,7 @@ App::post('/v1/messaging/providers/sendgrid') 'type' => 'email', 'default' => $default, 'enabled' => $enabled, + 'options' => [], 'search' => $providerId . ' ' . $name . ' ' . 'sendgrid' . ' ' . 'email', 'credentials' => [ 'apiKey' => $apiKey, @@ -361,11 +362,12 @@ App::post('/v1/messaging/providers/msg91') ->param('name', '', new Text(128), 'Provider name.') ->param('default', false, new Boolean(), 'Set as default provider.', true) ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->param('from', '', new Text(256), 'Sender Number.') ->param('senderId', '', new Text(0), 'Msg91 Sender ID.') ->param('authKey', '', new Text(0), 'Msg91 Auth Key.') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, bool $default, bool $enabled, string $senderId, string $authKey, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, bool $default, bool $enabled, string $from, string $senderId, string $authKey, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -379,6 +381,9 @@ App::post('/v1/messaging/providers/msg91') 'senderId' => $senderId, 'authKey' => $authKey, ], + 'options' => [ + 'from' => $from, + ] ]); // Check if a default provider exists, if not, set this one as default @@ -1243,15 +1248,14 @@ App::post('/v1/messaging/messages/email') ->param('providerId', '', new Text(128), 'Email Provider ID.') ->param('to', [], new ArrayList(new Text(65535)), 'List of Topic IDs or List of User IDs or List of Target IDs.') ->param('subject', '', new Text(128), 'Email Subject.') - ->param('description', '', new Text(256), 'Description for Message.') + ->param('description', '', new Text(256), 'Description for Message.', true) ->param('content', '', new Text(65407), 'Email Content.') - ->param('from', '', new Text(128), 'Email from.', true) ->param('html', false, new Boolean(false), 'Is content of type HTML', true) ->inject('dbForProject') ->inject('project') ->inject('messaging') ->inject('response') - ->action(function (string $messageId, string $providerId, array $to, string $subject, string $description, string $content, string $from, string $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) { + ->action(function (string $messageId, string $providerId, array $to, string $subject, string $description, string $content, string $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) { $messageId = $messageId == 'unique()' ? ID::unique() : $messageId; $provider = $dbForProject->getDocument('providers', $providerId); @@ -1268,16 +1272,15 @@ App::post('/v1/messaging/messages/email') 'data' => [ 'subject' => $subject, 'content' => $content, - 'from' => $from, 'html' => $html, 'description' => $description, ], 'status' => 'processing', - 'search' => $subject . ' ' . $from, + 'search' => $messageId . ' ' . $description . ' ' . $subject, ])); $messaging - ->setMessage($message) + ->setMessageId($message->getId()) ->setProject($project) ->trigger(); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 4a697bedb..18c8118cb 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -666,7 +666,6 @@ App::post('/v1/teams/:teamId/memberships') 'to' => [$target->getId()], 'data' => [ 'content' => $message, - 'from' => $from, ], 'providerId' => $provider->getId(), 'providerInternalId' => $provider->getInternalId(), @@ -674,7 +673,7 @@ App::post('/v1/teams/:teamId/memberships') ])); $messaging - ->setMessage($messageDoc) + ->setMessageId($messageDoc->getId()) ->setProject($project) ->trigger(); } diff --git a/app/workers/messaging.php b/app/workers/messaging.php index 5b92bf59a..b5dc79917 100644 --- a/app/workers/messaging.php +++ b/app/workers/messaging.php @@ -91,7 +91,7 @@ class MessagingV1 extends Worker $project = new Document($this->args['project']); $this->dbForProject = $this->getProjectDB($project); - $messageRecord = new Document($this->args['message']); + $messageRecord = $this->dbForProject->getDocument('messages', $this->args['messageId']); $providerId = $messageRecord->getAttribute('providerId'); $providerRecord = $this->dbForProject->getDocument('providers', $providerId); @@ -135,15 +135,14 @@ class MessagingV1 extends Worker $maxBatchSize = $provider->getMaxMessagesPerRequest(); $batches = \array_chunk($identifiers, $maxBatchSize); - $message = $messageRecord->getArrayCopy(); $deliveredTo = 0; foreach ($batches as $batch) { - $message['to'] = $batch; + $messageRecord->setAttribute('to', $batch); $message = match ($providerRecord->getAttribute('type')) { - 'sms' => $this->buildSMSMessage($message), - 'push' => $this->buildPushMessage($message), - 'email' => $this->buildEmailMessage($message), + 'sms' => $this->buildSMSMessage($messageRecord, $providerRecord), + 'push' => $this->buildPushMessage($messageRecord), + 'email' => $this->buildEmailMessage($messageRecord, $providerRecord), default => null }; try { @@ -163,7 +162,7 @@ class MessagingV1 extends Worker } else { $messageRecord->setAttribute('status', 'sent'); } - + $messageRecord->setAttribute('to', $recipientsId); $messageRecord->setAttribute('deliveredTo', $deliveredTo); $messageRecord->setAttribute('deliveryTime', DateTime::now()); @@ -174,37 +173,37 @@ class MessagingV1 extends Worker { } - private function buildEmailMessage($data): Email + private function buildEmailMessage($message, $provider): Email { - $from = $data['data']['from']; - $to = $data['to']; - $subject = $data['data']['subject']; - $content = $data['data']['content']; - $html = $data['data']['html']; + $from = $provider['options']['from']; + $to = $message['to']; + $subject = $message['data']['subject']; + $content = $message['data']['content']; + $html = $message['data']['html']; return new Email(to: $to, subject: $subject, content: $content, from: $from, html: $html); } - private function buildSMSMessage($data): SMS + private function buildSMSMessage($message, $provider): SMS { - $to = $data['to']; - $content = $data['data']['content']; - $from = $data['data']['from']; + $to = $message['to']; + $content = $message['data']['content']; + $from = $provider['options']['from']; return new SMS($to, $content, $from); } - private function buildPushMessage($data): Push + private function buildPushMessage($message): Push { - $to = $data['to']; - $title = $data['data']['title']; - $body = $data['data']['body']; - $data = $data['data']['data']; - $action = $data['data']['action']; - $sound = $data['data']['sound']; - $icon = $data['data']['icon']; - $color = $data['data']['color']; - $tag = $data['data']['tag']; - $badge = $data['data']['badge']; + $to = $message['to']; + $title = $message['data']['title']; + $body = $message['data']['body']; + $data = $message['data']['data']; + $action = $message['data']['action']; + $sound = $message['data']['sound']; + $icon = $message['data']['icon']; + $color = $message['data']['color']; + $tag = $message['data']['tag']; + $badge = $message['data']['badge']; return new Push($to, $title, $body, $data, $action, $sound, $icon, $color, $tag, $badge); } } diff --git a/docker-compose.yml b/docker-compose.yml index 053042f81..b60406369 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -190,6 +190,11 @@ services: - _APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY - _APP_MESSAGE_SMS_PROVIDER_MSG91_FROM - _APP_MESSAGE_SMS_PROVIDER_MSG91_TO + - _APP_MESSAGE_SMS_PROVIDER_MAILGUN_API_KEY + - _APP_MESSAGE_SMS_PROVIDER_MAILGUN_DOMAIN + - _APP_MESSAGE_SMS_PROVIDER_MAILGUN_FROM + - _APP_MESSAGE_SMS_PROVIDER_MAILGUN_RECEIVER_EMAIL + - _APP_MESSAGE_SMS_PROVIDER_MAILGUN_IS_EU_REGION appwrite-realtime: entrypoint: realtime diff --git a/src/Appwrite/Event/Messaging.php b/src/Appwrite/Event/Messaging.php index 9616f93a2..1df75dfed 100644 --- a/src/Appwrite/Event/Messaging.php +++ b/src/Appwrite/Event/Messaging.php @@ -7,7 +7,7 @@ use Utopia\Database\Document; class Messaging extends Event { - protected ?Document $message = null; + protected ?string $messageId = null; public function __construct() { @@ -17,26 +17,26 @@ class Messaging extends Event /** - * Sets message record for the messaging event. + * Sets message ID for the messaging event. * - * @param Document $message + * @param string $message * @return self */ - public function setMessage(Document $message): self + public function setMessageId(string $messageId): self { - $this->message = $message; + $this->messageId = $messageId; return $this; } /** - * Returns set message for the messaging event. + * Returns set message ID for the messaging event. * - * @return Document + * @return string */ - public function getMessage(): Document + public function getMessageId(): string { - return $this->message; + return $this->messageId; } /** @@ -50,7 +50,7 @@ class Messaging extends Event return Resque::enqueue($this->queue, $this->class, [ 'project' => $this->project, 'user' => $this->user, - 'message' => $this->message, + 'messageId' => $this->messageId, ]); } } diff --git a/tests/e2e/Services/Account/AccountCustomClientTest.php b/tests/e2e/Services/Account/AccountCustomClientTest.php index 77d8662ba..96f2b1230 100644 --- a/tests/e2e/Services/Account/AccountCustomClientTest.php +++ b/tests/e2e/Services/Account/AccountCustomClientTest.php @@ -765,6 +765,7 @@ class AccountCustomClientTest extends Scope 'senderId' => $senderId, 'authKey' => $authKey, 'default' => true, + 'from' => $from, ]); $this->assertEquals(201, $response['headers']['status-code']); /** diff --git a/tests/e2e/Services/GraphQL/AccountTest.php b/tests/e2e/Services/GraphQL/AccountTest.php index aa60d2d81..5970883db 100644 --- a/tests/e2e/Services/GraphQL/AccountTest.php +++ b/tests/e2e/Services/GraphQL/AccountTest.php @@ -141,6 +141,7 @@ class AccountTest extends Scope 'name' => 'Sms Provider', 'provider' => 'msg91', 'type' => 'sms', + 'from' => $from, 'senderId' => $senderId, 'authKey' => $authKey, 'default' => true, diff --git a/tests/e2e/Services/GraphQL/Base.php b/tests/e2e/Services/GraphQL/Base.php index 7f163fdff..c670f8e17 100644 --- a/tests/e2e/Services/GraphQL/Base.php +++ b/tests/e2e/Services/GraphQL/Base.php @@ -1935,6 +1935,7 @@ trait Base return 'mutation createProviderMsg91( $providerId: String!, $name: String!, + $from: String!, $senderId: String!, $authKey: String! $default: Boolean, @@ -1943,6 +1944,7 @@ trait Base messagingCreateProviderMsg91( providerId: $providerId, name: $name, + from: $from, senderId: $senderId, authKey: $authKey default: $default, diff --git a/tests/e2e/Services/Messaging/MessagingBase.php b/tests/e2e/Services/Messaging/MessagingBase.php index 59007cce1..bbc8b5669 100644 --- a/tests/e2e/Services/Messaging/MessagingBase.php +++ b/tests/e2e/Services/Messaging/MessagingBase.php @@ -44,6 +44,7 @@ trait MessagingBase 'name' => 'Ms91-1', 'senderId' => 'my-senderid', 'authKey' => 'my-authkey', + 'from' => '+123456789' ], 'vonage' => [ 'providerId' => 'unique()',