appwrite/tests/unit/Event/EventTest.php

161 lines
6.6 KiB
PHP
Raw Normal View History

2019-12-26 10:00:29 +00:00
<?php
2022-08-01 10:22:04 +00:00
namespace Tests\Unit\Event;
2019-12-26 10:00:29 +00:00
use Appwrite\Event\Event;
2022-03-29 08:30:57 +00:00
use InvalidArgumentException;
2019-12-26 10:00:29 +00:00
use PHPUnit\Framework\TestCase;
2025-01-29 14:13:58 +00:00
use Utopia\Queue\Publisher;
2023-10-10 18:02:24 +00:00
2024-09-05 17:11:39 +00:00
require_once __DIR__ . '/../../../app/init.php';
2019-12-26 10:00:29 +00:00
2019-12-26 10:20:09 +00:00
class EventTest extends TestCase
2019-12-26 10:00:29 +00:00
{
2022-08-01 10:22:04 +00:00
protected ?Event $object = null;
protected string $queue = '';
2026-04-01 17:31:11 +00:00
protected MockPublisher $publisher;
2019-12-26 10:00:29 +00:00
2020-09-30 21:52:28 +00:00
public function setUp(): void
2019-12-26 10:00:29 +00:00
{
2025-01-29 14:13:58 +00:00
$this->publisher = new MockPublisher();
2019-12-26 10:00:29 +00:00
$this->queue = 'v1-tests' . uniqid();
2025-01-29 14:13:58 +00:00
$this->object = new Event($this->publisher);
2023-10-10 18:02:24 +00:00
$this->object->setClass('TestsV1');
$this->object->setQueue($this->queue);
2019-12-26 10:00:29 +00:00
}
2022-08-01 10:22:04 +00:00
public function testQueue(): void
{
$this->assertEquals($this->queue, $this->object->getQueue());
$this->object->setQueue('demo');
$this->assertEquals('demo', $this->object->getQueue());
$this->object->setQueue($this->queue);
}
2022-08-01 10:22:04 +00:00
public function testClass(): void
{
$this->assertEquals('TestsV1', $this->object->getClass());
$this->object->setClass('TestsV2');
$this->assertEquals('TestsV2', $this->object->getClass());
$this->object->setClass('TestsV1');
}
2022-08-01 10:22:04 +00:00
public function testParams(): void
2019-12-26 10:00:29 +00:00
{
2023-10-10 18:02:24 +00:00
2019-12-26 10:00:29 +00:00
$this->object
2020-10-29 22:20:32 +00:00
->setParam('eventKey1', 'eventValue1')
2022-03-29 08:30:57 +00:00
->setParam('eventKey2', 'eventValue2');
2019-12-26 10:00:29 +00:00
$this->object->trigger();
2022-04-18 16:21:45 +00:00
$this->assertEquals('eventValue1', $this->object->getParam('eventKey1'));
$this->assertEquals('eventValue2', $this->object->getParam('eventKey2'));
2020-10-29 22:20:32 +00:00
$this->assertEquals(null, $this->object->getParam('eventKey3'));
2025-01-29 14:13:58 +00:00
$this->assertCount(1, $this->publisher->getEvents($this->object->getQueue()));
2023-05-15 00:30:31 +00:00
}
2022-08-01 10:22:04 +00:00
public function testReset(): void
2020-07-04 13:06:23 +00:00
{
$this->object
2020-10-29 22:20:32 +00:00
->setParam('eventKey1', 'eventValue1')
2022-03-29 08:30:57 +00:00
->setParam('eventKey2', 'eventValue2');
2020-07-04 13:06:23 +00:00
2020-10-29 22:20:32 +00:00
$this->assertEquals('eventValue1', $this->object->getParam('eventKey1'));
$this->assertEquals('eventValue2', $this->object->getParam('eventKey2'));
2020-07-04 13:06:23 +00:00
$this->object->reset();
2020-10-29 22:20:32 +00:00
$this->assertEquals(null, $this->object->getParam('eventKey1'));
$this->assertEquals(null, $this->object->getParam('eventKey2'));
$this->assertEquals(null, $this->object->getParam('eventKey3'));
2020-07-04 13:06:23 +00:00
}
2022-03-29 08:30:57 +00:00
2022-08-01 10:22:04 +00:00
public function testGenerateEvents(): void
2022-03-29 08:30:57 +00:00
{
2022-04-04 06:30:07 +00:00
$event = Event::generateEvents('users.[userId].create', [
'userId' => 'torsten'
]);
$this->assertCount(4, $event);
$this->assertContains('users.torsten.create', $event);
$this->assertContains('users.torsten', $event);
$this->assertContains('users.*.create', $event);
$this->assertContains('users.*', $event);
2022-03-29 08:30:57 +00:00
$event = Event::generateEvents('users.[userId].update.email', [
'userId' => 'torsten'
]);
$this->assertCount(6, $event);
$this->assertContains('users.torsten.update.email', $event);
$this->assertContains('users.torsten.update', $event);
$this->assertContains('users.torsten', $event);
$this->assertContains('users.*.update.email', $event);
$this->assertContains('users.*.update', $event);
$this->assertContains('users.*', $event);
2025-04-27 05:06:21 +00:00
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create', [
'tableId' => 'chapters',
'rowId' => 'prolog',
2022-03-29 08:30:57 +00:00
]);
2022-04-18 16:21:45 +00:00
$this->assertCount(10, $event);
2025-04-27 05:06:21 +00:00
$this->assertContains('tables.chapters.rows.prolog.create', $event);
$this->assertContains('tables.chapters.rows.prolog', $event);
$this->assertContains('tables.chapters.rows.*.create', $event);
$this->assertContains('tables.chapters.rows.*', $event);
$this->assertContains('tables.chapters', $event);
$this->assertContains('tables.*.rows.prolog.create', $event);
$this->assertContains('tables.*.rows.prolog', $event);
$this->assertContains('tables.*.rows.*.create', $event);
$this->assertContains('tables.*.rows.*', $event);
$this->assertContains('tables.*', $event);
$event = Event::generateEvents('databases.[databaseId].tables.[tableId].rows.[rowId].create', [
Database layer (#3338) * database response model * database collection config * new database scopes * database service update * database execption codes * remove read write permission from database model * updating tests and fixing some bugs * server side tests are now passing * databases api * tests for database endpoint * composer update * fix error * formatting * formatting fixes * get database test * more updates to events and usage * more usage updates * fix delete type * fix test * delete database * more fixes * databaseId in attributes and indexes * more fixes * fix issues * fix index subquery * fix console scope and index query * updating tests as required * fix phpcs errors and warnings * updates to review suggestions * UI progress * ui updates and cleaning up * fix type * rework database events * update tests * update types * event generation fixed * events config updated * updating context to support multiple * realtime updates * fix ids * update context * validator updates * fix naming conflict * fix tests * fix lint errors * fix wprler and realtime tests * fix webhooks test * fix event validator and other tests * formatting fixes * removing leftover var_dumps * remove leftover comment * update usage params * usage metrics updates * update database usage * fix usage * specs update * updates to usage * fix UI and usage * fix lints * internal id fixes * fixes for internal Id * renaming services and related files * rename tests * rename doc link * rename readme * fix test name * tests: fixes for 0.15.x sync Co-authored-by: Torsten Dittmann <torsten.dittmann@googlemail.com>
2022-06-22 10:51:49 +00:00
'databaseId' => 'chaptersDB',
2025-04-27 05:06:21 +00:00
'tableId' => 'chapters',
'rowId' => 'prolog',
Database layer (#3338) * database response model * database collection config * new database scopes * database service update * database execption codes * remove read write permission from database model * updating tests and fixing some bugs * server side tests are now passing * databases api * tests for database endpoint * composer update * fix error * formatting * formatting fixes * get database test * more updates to events and usage * more usage updates * fix delete type * fix test * delete database * more fixes * databaseId in attributes and indexes * more fixes * fix issues * fix index subquery * fix console scope and index query * updating tests as required * fix phpcs errors and warnings * updates to review suggestions * UI progress * ui updates and cleaning up * fix type * rework database events * update tests * update types * event generation fixed * events config updated * updating context to support multiple * realtime updates * fix ids * update context * validator updates * fix naming conflict * fix tests * fix lint errors * fix wprler and realtime tests * fix webhooks test * fix event validator and other tests * formatting fixes * removing leftover var_dumps * remove leftover comment * update usage params * usage metrics updates * update database usage * fix usage * specs update * updates to usage * fix UI and usage * fix lints * internal id fixes * fixes for internal Id * renaming services and related files * rename tests * rename doc link * rename readme * fix test name * tests: fixes for 0.15.x sync Co-authored-by: Torsten Dittmann <torsten.dittmann@googlemail.com>
2022-06-22 10:51:49 +00:00
]);
$this->assertCount(22, $event);
2025-04-27 05:06:21 +00:00
$this->assertContains('databases.chaptersDB.tables.chapters.rows.prolog.create', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.prolog', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.*.create', $event);
$this->assertContains('databases.chaptersDB.tables.chapters.rows.*', $event);
$this->assertContains('databases.chaptersDB.tables.chapters', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.prolog.create', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.prolog', $event);
$this->assertContains('databases.chaptersDB.tables.*', $event);
Database layer (#3338) * database response model * database collection config * new database scopes * database service update * database execption codes * remove read write permission from database model * updating tests and fixing some bugs * server side tests are now passing * databases api * tests for database endpoint * composer update * fix error * formatting * formatting fixes * get database test * more updates to events and usage * more usage updates * fix delete type * fix test * delete database * more fixes * databaseId in attributes and indexes * more fixes * fix issues * fix index subquery * fix console scope and index query * updating tests as required * fix phpcs errors and warnings * updates to review suggestions * UI progress * ui updates and cleaning up * fix type * rework database events * update tests * update types * event generation fixed * events config updated * updating context to support multiple * realtime updates * fix ids * update context * validator updates * fix naming conflict * fix tests * fix lint errors * fix wprler and realtime tests * fix webhooks test * fix event validator and other tests * formatting fixes * removing leftover var_dumps * remove leftover comment * update usage params * usage metrics updates * update database usage * fix usage * specs update * updates to usage * fix UI and usage * fix lints * internal id fixes * fixes for internal Id * renaming services and related files * rename tests * rename doc link * rename readme * fix test name * tests: fixes for 0.15.x sync Co-authored-by: Torsten Dittmann <torsten.dittmann@googlemail.com>
2022-06-22 10:51:49 +00:00
$this->assertContains('databases.chaptersDB', $event);
2025-04-27 05:06:21 +00:00
$this->assertContains('databases.*.tables.chapters.rows.prolog.create', $event);
$this->assertContains('databases.*.tables.chapters.rows.prolog', $event);
$this->assertContains('databases.*.tables.chapters', $event);
$this->assertContains('databases.*.tables.*.rows.*.create', $event);
$this->assertContains('databases.*.tables.*.rows.*', $event);
$this->assertContains('databases.*.tables.*', $event);
Database layer (#3338) * database response model * database collection config * new database scopes * database service update * database execption codes * remove read write permission from database model * updating tests and fixing some bugs * server side tests are now passing * databases api * tests for database endpoint * composer update * fix error * formatting * formatting fixes * get database test * more updates to events and usage * more usage updates * fix delete type * fix test * delete database * more fixes * databaseId in attributes and indexes * more fixes * fix issues * fix index subquery * fix console scope and index query * updating tests as required * fix phpcs errors and warnings * updates to review suggestions * UI progress * ui updates and cleaning up * fix type * rework database events * update tests * update types * event generation fixed * events config updated * updating context to support multiple * realtime updates * fix ids * update context * validator updates * fix naming conflict * fix tests * fix lint errors * fix wprler and realtime tests * fix webhooks test * fix event validator and other tests * formatting fixes * removing leftover var_dumps * remove leftover comment * update usage params * usage metrics updates * update database usage * fix usage * specs update * updates to usage * fix UI and usage * fix lints * internal id fixes * fixes for internal Id * renaming services and related files * rename tests * rename doc link * rename readme * fix test name * tests: fixes for 0.15.x sync Co-authored-by: Torsten Dittmann <torsten.dittmann@googlemail.com>
2022-06-22 10:51:49 +00:00
$this->assertContains('databases.*', $event);
2025-04-27 05:06:21 +00:00
$this->assertContains('databases.*.tables.*.rows.prolog', $event);
$this->assertContains('databases.*.tables.*.rows.prolog.create', $event);
$this->assertContains('databases.*.tables.chapters.rows.*', $event);
$this->assertContains('databases.*.tables.chapters.rows.*.create', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.*', $event);
$this->assertContains('databases.chaptersDB.tables.*.rows.*.create', $event);
Database layer (#3338) * database response model * database collection config * new database scopes * database service update * database execption codes * remove read write permission from database model * updating tests and fixing some bugs * server side tests are now passing * databases api * tests for database endpoint * composer update * fix error * formatting * formatting fixes * get database test * more updates to events and usage * more usage updates * fix delete type * fix test * delete database * more fixes * databaseId in attributes and indexes * more fixes * fix issues * fix index subquery * fix console scope and index query * updating tests as required * fix phpcs errors and warnings * updates to review suggestions * UI progress * ui updates and cleaning up * fix type * rework database events * update tests * update types * event generation fixed * events config updated * updating context to support multiple * realtime updates * fix ids * update context * validator updates * fix naming conflict * fix tests * fix lint errors * fix wprler and realtime tests * fix webhooks test * fix event validator and other tests * formatting fixes * removing leftover var_dumps * remove leftover comment * update usage params * usage metrics updates * update database usage * fix usage * specs update * updates to usage * fix UI and usage * fix lints * internal id fixes * fixes for internal Id * renaming services and related files * rename tests * rename doc link * rename readme * fix test name * tests: fixes for 0.15.x sync Co-authored-by: Torsten Dittmann <torsten.dittmann@googlemail.com>
2022-06-22 10:51:49 +00:00
2022-03-29 08:30:57 +00:00
try {
2025-04-27 05:06:21 +00:00
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create', [
'tableId' => 'chapters'
2022-03-29 08:30:57 +00:00
]);
$this->fail();
} catch (\Throwable $th) {
$this->assertInstanceOf(InvalidArgumentException::class, $th, 'An invalid exception was thrown');
}
try {
2025-04-27 05:06:21 +00:00
$event = Event::generateEvents('tables.[tableId].rows.[rowId].create');
2022-03-29 08:30:57 +00:00
$this->fail();
} catch (\Throwable $th) {
$this->assertInstanceOf(InvalidArgumentException::class, $th, 'An invalid exception was thrown');
}
}
2020-09-30 21:52:28 +00:00
}