From c225563d776ef5da3ae641b964cef15619d5fe17 Mon Sep 17 00:00:00 2001 From: prateek banga Date: Wed, 23 Aug 2023 15:31:29 +0530 Subject: [PATCH] adds test for provider controllers --- app/config/roles.php | 8 + app/controllers/api/messaging.php | 58 +++--- phpunit.xml | 1 + tests/e2e/Scopes/ProjectCustom.php | 4 + .../Messaging/MessagingServerTest.php | 187 ++++++++++++++++++ 5 files changed, 224 insertions(+), 34 deletions(-) create mode 100644 tests/e2e/Services/Messaging/MessagingServerTest.php diff --git a/app/config/roles.php b/app/config/roles.php index a95b34d820..4bc85f7a28 100644 --- a/app/config/roles.php +++ b/app/config/roles.php @@ -22,6 +22,10 @@ $member = [ 'execution.write', 'targets.read', 'targets.write', + 'providers.write', + 'providers.read', + 'messages.write', + 'messages.read' ]; $admins = [ @@ -57,6 +61,10 @@ $admins = [ 'migrations.write', 'targets.read', 'targets.write', + 'providers.write', + 'providers.read', + 'messages.write', + 'messages.read' ]; return [ diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index ba1d66b1ed..1ff95fbeea 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -70,7 +70,7 @@ App::get('/v1/messaging/providers/:id') ->param('id', null, new UID(), 'Provider ID.') ->inject('dbForProject') ->inject('response') - ->action(function (string $id, Response $response, Database $dbForProject) { + ->action(function (string $id, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $id); if ($provider->isEmpty()) { @@ -86,7 +86,7 @@ App::get('/v1/messaging/providers/:id') App::post('/v1/messaging/providers/mailgun') ->desc('Create Mailgun Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -118,7 +118,7 @@ App::post('/v1/messaging/providers/mailgun') App::patch('/v1/messaging/providers/:id/mailgun') ->desc('Update Mailgun Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -166,14 +166,13 @@ App::patch('/v1/messaging/providers/:id/mailgun') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/sendgrid') ->desc('Create Sendgrid Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -203,7 +202,7 @@ App::post('/v1/messaging/providers/sendgrid') App::patch('/v1/messaging/providers/:id/sendgrid') ->desc('Update Sendgrid Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -243,7 +242,6 @@ App::patch('/v1/messaging/providers/:id/sendgrid') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -253,7 +251,7 @@ App::patch('/v1/messaging/providers/:id/sendgrid') App::post('/v1/messaging/providers/msg91') ->desc('Create Msg91 Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -285,7 +283,7 @@ App::post('/v1/messaging/providers/msg91') App::patch('/v1/messaging/providers/:id/msg91') ->desc('Update Msg91 Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -333,14 +331,13 @@ App::patch('/v1/messaging/providers/:id/msg91') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/telesign') ->desc('Create Telesign Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -372,7 +369,7 @@ App::post('/v1/messaging/providers/telesign') App::patch('/v1/messaging/providers/:id/telesign') ->desc('Update Telesign Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -420,14 +417,13 @@ App::patch('/v1/messaging/providers/:id/telesign') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/textmagic') ->desc('Create Textmagic Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -459,7 +455,7 @@ App::post('/v1/messaging/providers/textmagic') App::patch('/v1/messaging/providers/:id/textmagic') ->desc('Update Textmagic Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -507,14 +503,13 @@ App::patch('/v1/messaging/providers/:id/textmagic') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/twilio') ->desc('Create Twilio Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -546,7 +541,7 @@ App::post('/v1/messaging/providers/twilio') App::patch('/v1/messaging/providers/:id/twilio') ->desc('Update Twilio Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -594,14 +589,13 @@ App::patch('/v1/messaging/providers/:id/twilio') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/vonage') ->desc('Create Vonage Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -633,7 +627,7 @@ App::post('/v1/messaging/providers/vonage') App::patch('/v1/messaging/providers/:id/vonage') ->desc('Update Vonage Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -681,7 +675,6 @@ App::patch('/v1/messaging/providers/:id/vonage') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -691,7 +684,7 @@ App::patch('/v1/messaging/providers/:id/vonage') App::post('/v1/messaging/providers/fcm') ->desc('Create FCM Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -721,7 +714,7 @@ App::post('/v1/messaging/providers/fcm') App::patch('/v1/messaging/providers/:id/fcm') ->desc('Update FCM Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -759,14 +752,13 @@ App::patch('/v1/messaging/providers/:id/fcm') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::post('/v1/messaging/providers/apns') ->desc('Create APNS Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.create') + ->label('audits.event', 'messages.providers.create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -804,7 +796,7 @@ App::post('/v1/messaging/providers/apns') App::patch('/v1/messaging/providers/:id/apns') ->desc('Update APNS Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.update') + ->label('audits.event', 'messages.providers.update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') @@ -858,27 +850,25 @@ App::patch('/v1/messaging/providers/:id/apns') $dbForProject->deleteCachedDocument('providers', $provider->getId()); $response - ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); }); App::delete('/v1/messaging/providers/:id') ->desc('Delete Provider') ->groups(['api', 'messaging']) - ->label('event', 'messages.providers.[id].delete') + ->label('audits.event', 'messages.providers.delete') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'messaging') ->label('sdk.method', 'deleteProvider') ->label('sdk.description', '/docs/references/messaging/delete-provider.md') - ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.code', Response::STATUS_CODE_NOCONTENT) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_NONE) ->param('id', '', new UID(), 'Provider ID.') - ->inject('response') ->inject('dbForProject') - ->inject('events') - ->action(function (string $id, Response $response, Database $dbForProject) { + ->inject('response') + ->action(function (string $id, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $id); if ($provider->isEmpty()) { @@ -894,7 +884,7 @@ App::delete('/v1/messaging/providers/:id') App::post('/v1/messaging/messages/email') ->desc('Send an email.') ->groups(['api', 'messaging']) - ->label('event', 'messages.create') + ->label('audits.event', 'messages.create') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') diff --git a/phpunit.xml b/phpunit.xml index f83f9f0fae..cffe166336 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -32,6 +32,7 @@ ./tests/e2e/Services/Teams ./tests/e2e/Services/Users ./tests/e2e/Services/Webhooks + ./tests/e2e/Services/Messaging ./tests/e2e/Services/Functions/FunctionsBase.php ./tests/e2e/Services/Functions/FunctionsCustomServerTest.php ./tests/e2e/Services/Functions/FunctionsCustomClientTest.php diff --git a/tests/e2e/Scopes/ProjectCustom.php b/tests/e2e/Scopes/ProjectCustom.php index 1bd4de501c..ee41129fde 100644 --- a/tests/e2e/Scopes/ProjectCustom.php +++ b/tests/e2e/Scopes/ProjectCustom.php @@ -81,6 +81,10 @@ trait ProjectCustom 'locale.read', 'avatars.read', 'health.read', + 'providers.read', + 'providers.write', + 'messages.read', + 'messages.write', ], ]); diff --git a/tests/e2e/Services/Messaging/MessagingServerTest.php b/tests/e2e/Services/Messaging/MessagingServerTest.php new file mode 100644 index 0000000000..2547c8a756 --- /dev/null +++ b/tests/e2e/Services/Messaging/MessagingServerTest.php @@ -0,0 +1,187 @@ + [ + 'name' => 'Sengrid1', + 'apiKey' => 'my-apikey', + ], + 'mailgun' => [ + 'name' => 'Mailgun1', + 'apiKey' => 'my-apikey', + 'domain' => 'my-domain', + ], + 'twilio' => [ + 'name' => 'Twilio1', + 'accountSid' => 'my-accountSid', + 'authToken' => 'my-authToken', + ], + 'telesign' => [ + 'name' => 'Telesign1', + 'username' => 'my-username', + 'password' => 'my-password', + ], + 'textmagic' => [ + 'name' => 'Textmagic1', + 'username' => 'my-username', + 'apiKey' => 'my-apikey', + ], + 'msg91' => [ + 'name' => 'Ms91-1', + 'senderId' => 'my-senderid', + 'authKey' => 'my-authkey', + ], + 'vonage' => [ + 'name' => 'Vonage1', + 'apiKey' => 'my-apikey', + 'apiSecret' => 'my-apisecret', + ], + 'fcm' => [ + 'name' => 'FCM1', + 'serverKey' => 'my-serverkey', + ], + 'apns' => [ + 'name' => 'APNS1', + 'authKey' => 'my-authkey', + 'authKeyId' => 'my-authkeyid', + 'teamId' => 'my-teamid', + 'bundleId' => 'my-bundleid', + 'endpoint' => 'my-endpoint', + ], + ]; + $providers = []; + + foreach (\array_keys($providersParams) as $key) { + $response = $this->client->call(Client::METHOD_POST, '/messaging/providers/'.$key, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ], $providersParams[$key]); + \array_push($providers, $response['body']); + $this->assertEquals(201, $response['headers']['status-code']); + $this->assertEquals($providersParams[$key]['name'], $response['body']['name']); + } + + return $providers; + } + + /** + * @depends testCreateProviders + */ + public function testUpdateProviders(array $providers): array + { + $providersParams = [ + 'sendgrid' => [ + 'name' => 'Sengrid2', + 'apiKey' => 'my-apikey', + ], + 'mailgun' => [ + 'name' => 'Mailgun2', + 'apiKey' => 'my-apikey', + 'domain' => 'my-domain', + ], + 'twilio' => [ + 'name' => 'Twilio2', + 'accountSid' => 'my-accountSid', + 'authToken' => 'my-authToken', + ], + 'telesign' => [ + 'name' => 'Telesign2', + 'username' => 'my-username', + 'password' => 'my-password', + ], + 'textmagic' => [ + 'name' => 'Textmagic2', + 'username' => 'my-username', + 'apiKey' => 'my-apikey', + ], + 'msg91' => [ + 'name' => 'Ms91-2', + 'senderId' => 'my-senderid', + 'authKey' => 'my-authkey', + ], + 'vonage' => [ + 'name' => 'Vonage2', + 'apiKey' => 'my-apikey', + 'apiSecret' => 'my-apisecret', + ], + 'fcm' => [ + 'name' => 'FCM2', + 'serverKey' => 'my-serverkey', + ], + 'apns' => [ + 'name' => 'APNS2', + 'authKey' => 'my-authkey', + 'authKeyId' => 'my-authkeyid', + 'teamId' => 'my-teamid', + 'bundleId' => 'my-bundleid', + 'endpoint' => 'my-endpoint', + ], + ]; + foreach (\array_keys($providersParams) as $index => $key) { + $response = $this->client->call(Client::METHOD_PATCH, '/messaging/providers/'. $providers[$index]['$id'] . '/' . $key, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ], $providersParams[$key]); + $providers[$index] = $response['body']; + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals($providersParams[$key]['name'], $response['body']['name']); + } + + return $providers; + } + + /** + * @depends testUpdateProviders + */ + public function testListProviders(array $providers) { + $response = $this->client->call(Client::METHOD_GET, '/messaging/providers/', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals(\count($providers), $response['body']['total']); + } + + /** + * @depends testUpdateProviders + */ + public function testGetProvider(array $providers) { + $response = $this->client->call(Client::METHOD_GET, '/messaging/providers/' .$providers[0]['$id'], [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals($providers[0]['name'], $response['body']['name']); + } + + /** + * @depends testUpdateProviders + */ + public function testDeleteProvider(array $providers) { + foreach ($providers as $provider) { + $response = $this->client->call(Client::METHOD_DELETE, '/messaging/providers/'. $provider['$id'], [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + $this->assertEquals(204, $response['headers']['status-code']); + } + } +}