2020-11-21 01:35:16 +13:00
< ? php
namespace Tests\E2E\Services\Webhooks ;
2021-03-13 10:23:37 +13:00
use CURLFile ;
2020-11-24 04:04:02 +13:00
use Tests\E2E\Client ;
2020-11-21 01:35:16 +13:00
use Tests\E2E\Scopes\ProjectCustom ;
use Tests\E2E\Scopes\Scope ;
use Tests\E2E\Scopes\SideServer ;
2022-02-22 01:46:40 +13:00
use Utopia\CLI\Console ;
2022-07-13 04:44:58 +12:00
use Utopia\Database\DateTime ;
2023-02-06 09:07:46 +13:00
use Utopia\Database\Helpers\ID ;
use Utopia\Database\Helpers\Permission ;
use Utopia\Database\Helpers\Role ;
2023-03-02 01:00:36 +13:00
use Utopia\Database\Validator\Datetime as DatetimeValidator ;
2020-11-21 01:35:16 +13:00
class WebhooksCustomServerTest extends Scope
{
use WebhooksBase ;
use ProjectCustom ;
use SideServer ;
2020-11-24 04:04:02 +13:00
2020-12-01 10:41:58 +13:00
/**
2021-07-03 08:22:12 +12:00
* @ depends testCreateAttributes
2020-12-01 10:41:58 +13:00
*/
public function testUpdateCollection ( $data ) : array
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'actorsId' ];
2022-06-22 22:51:49 +12:00
$databaseId = $data [ 'databaseId' ];
2022-04-19 04:21:45 +12:00
2020-12-01 10:41:58 +13:00
/**
* Test for SUCCESS
*/
2022-06-22 22:51:49 +12:00
$actors = $this -> client -> call ( Client :: METHOD_PUT , '/databases/' . $databaseId . '/collections/' . $id , array_merge ([
2020-12-01 10:41:58 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
]), [
'name' => 'Actors1' ,
2022-08-03 16:17:49 +12:00
'documentSecurity' => true ,
2020-12-01 10:41:58 +13:00
]);
2022-04-19 04:21:45 +12:00
2020-12-01 10:41:58 +13:00
$this -> assertEquals ( $actors [ 'headers' ][ 'status-code' ], 200 );
$this -> assertNotEmpty ( $actors [ 'body' ][ '$id' ]);
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2020-12-01 10:41:58 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-06-22 22:51:49 +12:00
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.update' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $id } .update " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2020-12-04 06:56:07 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), true );
2020-12-01 10:41:58 +13:00
$this -> assertNotEmpty ( $webhook [ 'data' ][ '$id' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'name' ], 'Actors1' );
2022-08-02 21:21:53 +12:00
$this -> assertIsArray ( $webhook [ 'data' ][ '$permissions' ]);
2022-08-14 02:10:28 +12:00
$this -> assertCount ( 4 , $webhook [ 'data' ][ '$permissions' ]);
2020-12-01 10:41:58 +13:00
return array_merge ([ 'actorsId' => $actors [ 'body' ][ '$id' ]]);
}
2021-07-03 10:48:58 +12:00
/**
* @ depends testCreateAttributes
*/
public function testCreateDeleteIndexes ( $data ) : array
{
2022-04-19 04:21:45 +12:00
$actorsId = $data [ 'actorsId' ];
2022-06-22 22:51:49 +12:00
$databaseId = $data [ 'databaseId' ];
2022-04-19 04:21:45 +12:00
2022-06-22 22:51:49 +12:00
$index = $this -> client -> call ( Client :: METHOD_POST , '/databases/' . $databaseId . '/collections/' . $data [ 'actorsId' ] . '/indexes' , array_merge ([
2021-07-03 10:48:58 +12:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
]), [
2021-12-17 05:10:01 +13:00
'key' => 'fullname' ,
2021-08-04 08:22:31 +12:00
'type' => 'key' ,
2021-07-03 10:48:58 +12:00
'attributes' => [ 'lastName' , 'firstName' ],
'orders' => [ 'ASC' , 'ASC' ],
]);
2022-04-19 04:21:45 +12:00
$indexKey = $index [ 'body' ][ 'key' ];
2022-07-21 00:43:18 +12:00
$this -> assertEquals ( $index [ 'headers' ][ 'status-code' ], 202 );
2021-08-23 19:27:09 +12:00
$this -> assertEquals ( $index [ 'body' ][ 'key' ], 'fullname' );
2021-07-03 10:48:58 +12:00
// wait for database worker to create index
sleep ( 5 );
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-07-03 10:48:58 +12:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-06-22 22:51:49 +12:00
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.indexes.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.indexes.*.create' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } .indexes.* " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } .indexes.*.create " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-07-03 10:48:58 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), true );
// Remove index
2022-06-22 22:51:49 +12:00
$this -> client -> call ( Client :: METHOD_DELETE , '/databases/' . $databaseId . '/collections/' . $data [ 'actorsId' ] . '/indexes/' . $index [ 'body' ][ 'key' ], array_merge ([
2021-10-26 14:14:30 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
]));
2021-07-06 06:29:21 +12:00
// // wait for database worker to remove index
2021-10-26 14:14:30 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-07-06 06:29:21 +12:00
2021-10-26 14:14:30 +13:00
// $this->assertEquals($webhook['method'], 'DELETE');
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-06-22 22:51:49 +12:00
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.indexes.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2023-10-19 06:09:23 +13:00
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.indexes.*.update' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-22 22:51:49 +12:00
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } .indexes.* " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2023-10-19 06:09:23 +13:00
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $actorsId } .indexes.*.update " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-10-26 14:14:30 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), true );
2021-07-03 10:48:58 +12:00
return $data ;
}
2020-12-01 10:41:58 +13:00
public function testDeleteCollection () : array
{
2022-06-22 22:51:49 +12:00
/**
* Create database
*/
$database = $this -> client -> call ( Client :: METHOD_POST , '/databases' , array_merge ([
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
], $this -> getHeaders ()), [
2022-08-14 22:33:36 +12:00
'databaseId' => ID :: unique (),
2022-06-22 22:51:49 +12:00
'name' => 'Actors DB' ,
]);
$databaseId = $database [ 'body' ][ '$id' ];
2020-12-01 10:41:58 +13:00
/**
* Test for SUCCESS
*/
2022-06-22 22:51:49 +12:00
$actors = $this -> client -> call ( Client :: METHOD_POST , '/databases/' . $databaseId . '/collections' , array_merge ([
2020-12-01 10:41:58 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
]), [
2022-08-14 22:33:36 +12:00
'collectionId' => ID :: unique (),
2020-12-01 10:41:58 +13:00
'name' => 'Demo' ,
2022-08-03 16:17:49 +12:00
'permissions' => [
2022-08-14 17:21:11 +12:00
Permission :: read ( Role :: any ()),
Permission :: create ( Role :: any ()),
Permission :: update ( Role :: any ()),
Permission :: delete ( Role :: any ()),
2022-08-03 16:17:49 +12:00
],
'documentSecurity' => true ,
2020-12-01 10:41:58 +13:00
]);
2021-12-17 05:10:01 +13:00
2022-04-19 04:21:45 +12:00
$id = $actors [ 'body' ][ '$id' ];
2020-12-01 10:41:58 +13:00
$this -> assertEquals ( $actors [ 'headers' ][ 'status-code' ], 201 );
$this -> assertNotEmpty ( $actors [ 'body' ][ '$id' ]);
2022-06-22 22:51:49 +12:00
$actors = $this -> client -> call ( Client :: METHOD_DELETE , '/databases/' . $databaseId . '/collections/' . $actors [ 'body' ][ '$id' ], array_merge ([
2020-12-01 10:41:58 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
'x-appwrite-key' => $this -> getProject ()[ 'apiKey' ]
]), []);
2021-12-17 05:10:01 +13:00
2020-12-01 10:41:58 +13:00
$this -> assertEquals ( $actors [ 'headers' ][ 'status-code' ], 204 );
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2020-12-01 10:41:58 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-06-22 22:51:49 +12:00
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'databases.' . $databaseId . '.collections.*.delete' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " databases. { $databaseId } .collections. { $id } .delete " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2020-12-04 06:56:07 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), true );
2020-12-01 10:41:58 +13:00
$this -> assertNotEmpty ( $webhook [ 'data' ][ '$id' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'name' ], 'Demo' );
2022-08-02 21:21:53 +12:00
$this -> assertIsArray ( $webhook [ 'data' ][ '$permissions' ]);
2022-08-14 02:10:28 +12:00
$this -> assertCount ( 4 , $webhook [ 'data' ][ '$permissions' ]);
2020-12-01 10:41:58 +13:00
2020-12-02 07:53:31 +13:00
return [];
2020-12-01 10:41:58 +13:00
}
2022-04-19 04:21:45 +12:00
public function testCreateUser () : array
2020-11-24 04:04:02 +13:00
{
2022-04-19 04:21:45 +12:00
$email = uniqid () . 'user@localhost.test' ;
2020-11-24 04:04:02 +13:00
$password = 'password' ;
$name = 'User Name' ;
/**
* Test for SUCCESS
*/
$user = $this -> client -> call ( Client :: METHOD_POST , '/users' , array_merge ([
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
2022-08-14 22:33:36 +12:00
'userId' => ID :: unique (),
2020-11-24 04:04:02 +13:00
'email' => $email ,
'password' => $password ,
'name' => $name ,
]);
$this -> assertEquals ( $user [ 'headers' ][ 'status-code' ], 201 );
$this -> assertNotEmpty ( $user [ 'body' ][ '$id' ]);
$id = $user [ 'body' ][ '$id' ];
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-05-11 01:25:49 +12:00
$this -> assertStringContainsString ( 'users.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.create' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-03 00:14:58 +12:00
$this -> assertStringContainsString ( " users. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-05-11 01:25:49 +12:00
$this -> assertStringContainsString ( " users. { $id } .create " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2020-12-04 06:56:07 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), ( 'server' === $this -> getSide ()));
2020-11-24 04:04:02 +13:00
$this -> assertNotEmpty ( $webhook [ 'data' ][ '$id' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'name' ], $name );
2023-02-06 09:39:41 +13:00
$this -> assertEquals ( true , ( new DatetimeValidator ()) -> isValid ( $webhook [ 'data' ][ 'registration' ]));
2021-07-14 23:02:12 +12:00
$this -> assertEquals ( $webhook [ 'data' ][ 'status' ], true );
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'email' ], $email );
$this -> assertEquals ( $webhook [ 'data' ][ 'emailVerification' ], false );
$this -> assertEquals ( $webhook [ 'data' ][ 'prefs' ], []);
/**
* Test for FAILURE
*/
return [ 'userId' => $user [ 'body' ][ '$id' ], 'name' => $user [ 'body' ][ 'name' ], 'email' => $user [ 'body' ][ 'email' ]];
}
2021-03-05 07:47:02 +13:00
2022-04-19 04:21:45 +12:00
/**
2020-11-24 04:04:02 +13:00
* @ depends testCreateUser
*/
2022-04-19 04:21:45 +12:00
public function testUpdateUserPrefs ( array $data ) : array
2021-03-05 07:47:02 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'userId' ];
2021-03-05 07:47:02 +13:00
/**
* Test for SUCCESS
*/
2022-04-19 04:21:45 +12:00
$user = $this -> client -> call ( Client :: METHOD_PATCH , '/users/' . $id . '/prefs' , array_merge ([
2021-03-05 07:47:02 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
2021-03-08 02:09:45 +13:00
'prefs' => [ 'a' => 'b' ]
2021-03-05 07:47:02 +13:00
]);
$this -> assertEquals ( $user [ 'headers' ][ 'status-code' ], 200 );
2021-03-09 09:48:45 +13:00
$this -> assertEquals ( $user [ 'body' ][ 'a' ], 'b' );
2021-03-05 07:47:02 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-05 07:47:02 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-05-11 01:25:49 +12:00
$this -> assertStringContainsString ( 'users.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.update' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.update.prefs' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } .update " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } .update.prefs " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-05 07:47:02 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), ( 'server' === $this -> getSide ()));
2021-03-08 02:09:45 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'a' ], 'b' );
2021-03-05 07:47:02 +13:00
return $data ;
}
2020-11-24 04:04:02 +13:00
/**
2021-03-09 04:16:28 +13:00
* @ depends testUpdateUserPrefs
2020-11-24 04:04:02 +13:00
*/
2022-04-19 04:21:45 +12:00
public function testUpdateUserStatus ( array $data ) : array
2020-11-24 04:04:02 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'userId' ];
2020-11-24 04:04:02 +13:00
/**
* Test for SUCCESS
*/
$user = $this -> client -> call ( Client :: METHOD_PATCH , '/users/' . $data [ 'userId' ] . '/status' , array_merge ([
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
2021-07-14 23:02:12 +12:00
'status' => false ,
2020-11-24 04:04:02 +13:00
]);
$this -> assertEquals ( $user [ 'headers' ][ 'status-code' ], 200 );
$this -> assertNotEmpty ( $user [ 'body' ][ '$id' ]);
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-05-11 01:25:49 +12:00
$this -> assertStringContainsString ( 'users.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.update' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.update.status' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } .update " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } .update.status " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2020-12-04 06:56:07 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), ( 'server' === $this -> getSide ()));
2020-11-24 04:04:02 +13:00
$this -> assertNotEmpty ( $webhook [ 'data' ][ '$id' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'name' ], $data [ 'name' ]);
2023-02-06 09:39:41 +13:00
$this -> assertEquals ( true , ( new DatetimeValidator ()) -> isValid ( $webhook [ 'data' ][ 'registration' ]));
2021-07-14 23:02:12 +12:00
$this -> assertEquals ( $webhook [ 'data' ][ 'status' ], false );
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'email' ], $data [ 'email' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'emailVerification' ], false );
2021-03-08 02:09:45 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'prefs' ][ 'a' ], 'b' );
2020-11-24 04:04:02 +13:00
return $data ;
}
2022-04-19 04:21:45 +12:00
2020-11-24 04:04:02 +13:00
/**
* @ depends testUpdateUserStatus
*/
2022-04-19 04:21:45 +12:00
public function testDeleteUser ( array $data ) : array
2020-11-24 04:04:02 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'userId' ];
2020-11-24 04:04:02 +13:00
/**
* Test for SUCCESS
*/
$user = $this -> client -> call ( Client :: METHOD_DELETE , '/users/' . $data [ 'userId' ], array_merge ([
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()));
$this -> assertEquals ( $user [ 'headers' ][ 'status-code' ], 204 );
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-05-11 01:25:49 +12:00
$this -> assertStringContainsString ( 'users.*' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( 'users.*.delete' , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
$this -> assertStringContainsString ( " users. { $id } .delete " , $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Events' ]);
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2020-12-04 06:56:07 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
$this -> assertEquals ( empty ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-User-Id' ] ? ? '' ), ( 'server' === $this -> getSide ()));
2020-11-24 04:04:02 +13:00
$this -> assertNotEmpty ( $webhook [ 'data' ][ '$id' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'name' ], $data [ 'name' ]);
2023-02-06 09:39:41 +13:00
$this -> assertEquals ( true , ( new DatetimeValidator ()) -> isValid ( $webhook [ 'data' ][ 'registration' ]));
2021-07-14 23:02:12 +12:00
$this -> assertEquals ( $webhook [ 'data' ][ 'status' ], false );
2020-11-24 04:04:02 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'email' ], $data [ 'email' ]);
$this -> assertEquals ( $webhook [ 'data' ][ 'emailVerification' ], false );
2021-03-08 02:09:45 +13:00
$this -> assertEquals ( $webhook [ 'data' ][ 'prefs' ][ 'a' ], 'b' );
2020-11-24 04:04:02 +13:00
return $data ;
}
2021-03-13 10:23:37 +13:00
2022-04-19 04:21:45 +12:00
public function testCreateFunction () : array
2021-03-13 10:23:37 +13:00
{
/**
* Test for SUCCESS
*/
$function = $this -> client -> call ( Client :: METHOD_POST , '/functions' , array_merge ([
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
2022-08-14 22:33:36 +12:00
'functionId' => ID :: unique (),
2021-03-13 10:23:37 +13:00
'name' => 'Test' ,
2022-08-19 16:04:33 +12:00
'execute' => [ Role :: any () -> toString ()],
2021-06-23 03:56:05 +12:00
'runtime' => 'php-8.0' ,
2023-08-12 01:34:57 +12:00
'entrypoint' => 'index.php' ,
2021-03-13 10:23:37 +13:00
'timeout' => 10 ,
]);
2022-04-19 04:21:45 +12:00
$id = $function [ 'body' ][ '$id' ] ? ? '' ;
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $function [ 'headers' ][ 'status-code' ], 201 );
$this -> assertNotEmpty ( $function [ 'body' ][ '$id' ]);
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
return [
2022-04-19 04:21:45 +12:00
'functionId' => $id ,
2021-03-13 10:23:37 +13:00
];
}
/**
* @ depends testCreateFunction
*/
2022-04-19 04:21:45 +12:00
public function testUpdateFunction ( $data ) : array
2021-03-13 11:48:15 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ];
/**
* Test for SUCCESS
*/
$function = $this -> client -> call ( Client :: METHOD_PUT , '/functions/' . $data [ 'functionId' ], array_merge ([
2021-03-13 11:48:15 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
'name' => 'Test' ,
2021-06-23 03:56:05 +12:00
'runtime' => 'php-8.0' ,
2023-08-19 06:21:54 +12:00
'entrypoint' => 'index.php' ,
2022-08-19 16:04:33 +12:00
'execute' => [ Role :: any () -> toString ()],
2021-03-13 11:48:15 +13:00
'vars' => [
'key1' => 'value1' ,
]
]);
$this -> assertEquals ( $function [ 'headers' ][ 'status-code' ], 200 );
$this -> assertEquals ( $function [ 'body' ][ '$id' ], $data [ 'functionId' ]);
2022-08-04 01:32:50 +12:00
// Create variable
2022-08-10 03:29:24 +12:00
$variable = $this -> client -> call ( Client :: METHOD_POST , '/functions/' . $data [ 'functionId' ] . '/variables' , array_merge ([
2022-08-04 01:32:50 +12:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
'key' => 'key1' ,
'value' => 'value1' ,
]);
2022-08-04 01:35:11 +12:00
2022-08-04 01:32:50 +12:00
$this -> assertEquals ( 201 , $variable [ 'headers' ][ 'status-code' ]);
2021-03-13 11:48:15 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 11:48:15 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.update", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 11:48:15 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
return $data ;
}
2022-04-19 04:21:45 +12:00
2021-03-13 11:48:15 +13:00
/**
* @ depends testUpdateFunction
*/
2022-04-19 04:21:45 +12:00
public function testCreateDeployment ( $data ) : array
2021-03-13 10:23:37 +13:00
{
/**
* Test for SUCCESS
*/
2022-02-22 01:46:40 +13:00
$stderr = '' ;
2022-04-19 04:21:45 +12:00
$stdout = '' ;
2022-02-22 01:46:40 +13:00
$folder = 'timeout' ;
2022-04-19 04:21:45 +12:00
$code = realpath ( __DIR__ . '/../../../resources/functions' ) . " / { $folder } /code.tar.gz " ;
Console :: execute ( 'cd ' . realpath ( __DIR__ . " /../../../resources/functions " ) . " / { $folder } && tar --exclude code.tar.gz -czf code.tar.gz . " , '' , $stdout , $stderr );
2022-02-22 01:46:40 +13:00
2022-04-19 04:21:45 +12:00
$deployment = $this -> client -> call ( Client :: METHOD_POST , '/functions/' . $data [ 'functionId' ] . '/deployments' , array_merge ([
2021-03-13 10:23:37 +13:00
'content-type' => 'multipart/form-data' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()), [
2021-09-01 21:48:56 +12:00
'entrypoint' => 'index.php' ,
2023-03-02 01:00:36 +13:00
'code' => new CURLFile ( $code , 'application/x-gzip' , \basename ( $code )),
'activate' => true
2021-03-13 10:23:37 +13:00
]);
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ] ? ? '' ;
2022-01-25 12:48:51 +13:00
$deploymentId = $deployment [ 'body' ][ '$id' ] ? ? '' ;
2021-03-13 10:23:37 +13:00
2022-07-21 00:43:18 +12:00
$this -> assertEquals ( $deployment [ 'headers' ][ 'status-code' ], 202 );
2022-01-25 12:48:51 +13:00
$this -> assertNotEmpty ( $deployment [ 'body' ][ '$id' ]);
2021-03-13 10:23:37 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.deployments.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
2022-01-26 05:49:41 +13:00
sleep ( 5 );
2021-03-13 10:23:37 +13:00
2022-01-25 12:48:51 +13:00
return array_merge ( $data , [ 'deploymentId' => $deploymentId ]);
2021-03-13 10:23:37 +13:00
}
/**
2022-01-25 12:48:51 +13:00
* @ depends testCreateDeployment
2021-03-13 10:23:37 +13:00
*/
2022-04-19 04:21:45 +12:00
public function testUpdateDeployment ( $data ) : array
2021-03-13 10:23:37 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ] ? ? '' ;
$deploymentId = $data [ 'deploymentId' ] ? ? '' ;
2021-03-13 10:23:37 +13:00
/**
* Test for SUCCESS
*/
2022-04-19 04:21:45 +12:00
$response = $this -> client -> call ( Client :: METHOD_PATCH , '/functions/' . $id . '/deployments/' . $deploymentId , array_merge ([
2021-03-13 10:23:37 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
2022-02-15 22:16:32 +13:00
], $this -> getHeaders ()), []);
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $response [ 'headers' ][ 'status-code' ], 200 );
$this -> assertNotEmpty ( $response [ 'body' ][ '$id' ]);
2022-01-25 12:48:51 +13:00
// Wait for deployment to be built.
2021-09-29 02:29:41 +13:00
sleep ( 5 );
2021-03-13 10:23:37 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.deployments.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.deployments.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.deployments.{$deploymentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.{$deploymentId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 10:23:37 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
/**
2022-06-03 00:14:58 +12:00
* Test for FAILURE
2021-03-13 10:23:37 +13:00
*/
return $data ;
}
/**
2022-01-25 12:48:51 +13:00
* @ depends testUpdateDeployment
2021-03-13 10:23:37 +13:00
*/
2022-04-19 04:21:45 +12:00
public function testExecutions ( $data ) : array
2021-03-13 10:23:37 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ] ? ? '' ;
2021-03-13 10:23:37 +13:00
/**
* Test for SUCCESS
*/
2022-04-19 04:21:45 +12:00
$execution = $this -> client -> call ( Client :: METHOD_POST , '/functions/' . $id . '/executions' , array_merge ([
2021-03-13 10:55:01 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
2022-09-07 20:24:49 +12:00
], $this -> getHeaders ()), [
'async' => true
]);
2021-03-13 10:55:01 +13:00
2022-04-19 04:21:45 +12:00
$executionId = $execution [ 'body' ][ '$id' ] ? ? '' ;
2022-07-21 00:43:18 +12:00
$this -> assertEquals ( $execution [ 'headers' ][ 'status-code' ], 202 );
2021-03-13 10:55:01 +13:00
$this -> assertNotEmpty ( $execution [ 'body' ][ '$id' ]);
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 10:55:01 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.executions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.executions.*.create', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.executions.{$executionId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.executions.{$executionId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.*.create", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.{$executionId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.{$executionId}.create", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 10:55:01 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
2022-04-19 04:21:45 +12:00
// wait for timeout function to complete
2022-09-15 05:17:03 +12:00
sleep ( 20 );
2021-03-13 10:55:01 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-04-26 22:29:12 +12:00
2021-03-13 10:55:01 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.executions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.executions.*.update', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.executions.{$executionId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.executions.{$executionId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.executions.*.update", $webhook['headers']['X-Appwrite-Webhook-Events']);
2023-06-16 00:55:10 +12:00
// $this->assertStringContainsString("functions.{$id}.executions.{$executionId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString("functions.{$id}.executions.{$executionId}.update", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 19:19:50 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 10:55:01 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
2021-03-13 10:23:37 +13:00
/**
2022-06-03 00:14:58 +12:00
* Test for FAILURE
2021-03-13 10:23:37 +13:00
*/
2021-03-13 11:13:44 +13:00
return $data ;
}
/**
2022-06-03 00:14:58 +12:00
* @ depends testExecutions
2021-03-13 11:13:44 +13:00
*/
2022-04-19 04:21:45 +12:00
public function testDeleteDeployment ( $data ) : array
2021-03-13 11:13:44 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ] ? ? '' ;
$deploymentId = $data [ 'deploymentId' ] ? ? '' ;
2021-03-13 11:13:44 +13:00
/**
* Test for SUCCESS
*/
2022-04-19 04:21:45 +12:00
$deployment = $this -> client -> call ( Client :: METHOD_DELETE , '/functions/' . $id . '/deployments/' . $deploymentId , array_merge ([
2021-03-13 11:13:44 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()));
2022-01-25 12:48:51 +13:00
$this -> assertEquals ( $deployment [ 'headers' ][ 'status-code' ], 204 );
$this -> assertEmpty ( $deployment [ 'body' ]);
2021-03-13 11:13:44 +13:00
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 11:13:44 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.deployments.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.deployments.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.*.deployments.{$deploymentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.*", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.*.delete", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.{$deploymentId}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.deployments.{$deploymentId}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 11:13:44 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
/**
* Test for FAILURE
*/
return $data ;
2021-03-13 10:23:37 +13:00
}
2021-03-13 11:58:33 +13:00
/**
2022-01-25 12:48:51 +13:00
* @ depends testDeleteDeployment
2021-03-13 11:58:33 +13:00
*/
2022-04-19 04:21:45 +12:00
public function testDeleteFunction ( $data ) : array
2021-03-13 11:58:33 +13:00
{
2022-04-19 04:21:45 +12:00
$id = $data [ 'functionId' ];
2021-03-13 11:58:33 +13:00
/**
* Test for SUCCESS
*/
2022-04-19 04:21:45 +12:00
$function = $this -> client -> call ( Client :: METHOD_DELETE , '/functions/' . $id , array_merge ([
2021-03-13 11:58:33 +13:00
'content-type' => 'application/json' ,
'x-appwrite-project' => $this -> getProject ()[ '$id' ],
], $this -> getHeaders ()));
$this -> assertEquals ( 204 , $function [ 'headers' ][ 'status-code' ]);
$this -> assertEmpty ( $function [ 'body' ]);
$webhook = $this -> getLastRequest ();
2022-06-08 19:19:50 +12:00
$signatureExpected = self :: getWebhookSignature ( $webhook , $this -> getProject ()[ 'signatureKey' ]);
2021-03-13 11:58:33 +13:00
$this -> assertEquals ( $webhook [ 'method' ], 'POST' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'Content-Type' ], 'application/json' );
$this -> assertEquals ( $webhook [ 'headers' ][ 'User-Agent' ], 'Appwrite-Server vdev. Please report abuse at security@appwrite.io' );
2023-06-15 23:06:04 +12:00
// $this->assertStringContainsString('functions.*', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString('functions.*.delete', $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}", $webhook['headers']['X-Appwrite-Webhook-Events']);
// $this->assertStringContainsString("functions.{$id}.delete", $webhook['headers']['X-Appwrite-Webhook-Events']); TODO @christyjacob4 : enable test once we allow functions.* events
2022-06-08 04:02:39 +12:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Signature' ], $signatureExpected );
2021-03-13 11:58:33 +13:00
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Id' ] ? ? '' , $this -> getProject ()[ 'webhookId' ]);
$this -> assertEquals ( $webhook [ 'headers' ][ 'X-Appwrite-Webhook-Project-Id' ] ? ? '' , $this -> getProject ()[ '$id' ]);
/**
* Test for FAILURE
*/
return $data ;
}
2021-03-13 10:23:37 +13:00
}