1
0
Fork 0
mirror of synced 2024-06-14 00:34:51 +12:00

Merge pull request #758 from appwrite/feat-merge-webhooks-and-functions-events

Merged all system events
This commit is contained in:
Eldad A. Fux 2020-12-07 19:17:39 +02:00 committed by GitHub
commit 84fb5387ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 136 additions and 92 deletions

View file

@ -966,13 +966,13 @@ App::delete('/v1/account')
->label('sdk.response.code', Response::STATUS_CODE_NOCONTENT)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_NONE)
->action(function ($request, $response, $user, $projectDB, $audits, $webhooks) {
->action(function ($request, $response, $user, $projectDB, $audits, $events) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $user */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$protocol = $request->getProtocol();
$user = $projectDB->updateDocument(\array_merge($user->getArrayCopy(), [
@ -998,7 +998,7 @@ App::delete('/v1/account')
->setParam('data', $user->getArrayCopy())
;
$webhooks
$events
->setParam('payload', $response->output($user, Response::MODEL_USER))
;
@ -1013,7 +1013,7 @@ App::delete('/v1/account')
->addCookie(Auth::$cookieName, '', \time() - 3600, '/', Config::getParam('cookieDomain'), ('https' == $protocol), true, Config::getParam('cookieSamesite'))
->noContent()
;
}, ['request', 'response', 'user', 'projectDB', 'audits', 'webhooks']);
}, ['request', 'response', 'user', 'projectDB', 'audits', 'events']);
App::delete('/v1/account/sessions/:sessionId')
->desc('Delete Account Session')
@ -1029,13 +1029,13 @@ App::delete('/v1/account/sessions/:sessionId')
->label('sdk.response.model', Response::MODEL_NONE)
->label('abuse-limit', 100)
->param('sessionId', null, new UID(), 'Session unique ID. Use the string \'current\' to delete the current device session.')
->action(function ($sessionId, $request, $response, $user, $projectDB, $audits, $webhooks) {
->action(function ($sessionId, $request, $response, $user, $projectDB, $audits, $events) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $user */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$protocol = $request->getProtocol();
$sessionId = ($sessionId === 'current')
@ -1073,7 +1073,7 @@ App::delete('/v1/account/sessions/:sessionId')
;
}
$webhooks
$events
->setParam('payload', $response->output($token, Response::MODEL_SESSION))
;
@ -1082,7 +1082,7 @@ App::delete('/v1/account/sessions/:sessionId')
}
throw new Exception('Session not found', 404);
}, ['request', 'response', 'user', 'projectDB', 'audits', 'webhooks']);
}, ['request', 'response', 'user', 'projectDB', 'audits', 'events']);
App::delete('/v1/account/sessions')
->desc('Delete All Account Sessions')
@ -1097,13 +1097,13 @@ App::delete('/v1/account/sessions')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_NONE)
->label('abuse-limit', 100)
->action(function ($request, $response, $user, $projectDB, $audits, $webhooks) {
->action(function ($request, $response, $user, $projectDB, $audits, $events) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $user */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$protocol = $request->getProtocol();
$tokens = $user->getAttribute('tokens', []);
@ -1136,7 +1136,7 @@ App::delete('/v1/account/sessions')
}
}
$webhooks
$events
->setParam('payload', $response->output(new Document([
'sum' => count($tokens),
'sessions' => $tokens
@ -1144,7 +1144,7 @@ App::delete('/v1/account/sessions')
;
$response->noContent();
}, ['request', 'response', 'user', 'projectDB', 'audits', 'webhooks']);
}, ['request', 'response', 'user', 'projectDB', 'audits', 'events']);
App::post('/v1/account/recovery')
->desc('Create Password Recovery')
@ -1162,7 +1162,7 @@ App::post('/v1/account/recovery')
->label('abuse-key', 'url:{url},email:{param-email}')
->param('email', '', new Email(), 'User email.')
->param('url', '', function ($clients) { return new Host($clients); }, 'URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['clients'])
->action(function ($email, $url, $request, $response, $projectDB, $project, $locale, $mails, $audits, $webhooks) {
->action(function ($email, $url, $request, $response, $projectDB, $project, $locale, $mails, $audits, $events) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
@ -1170,7 +1170,7 @@ App::post('/v1/account/recovery')
/** @var Utopia\Locale\Locale $locale */
/** @var Appwrite\Event\Event $mails */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$isPreviliggedUser = Auth::isPreviliggedUser(Authorization::$roles);
$isAppUser = Auth::isAppUser(Authorization::$roles);
@ -1249,7 +1249,7 @@ App::post('/v1/account/recovery')
->trigger();
;
$webhooks
$events
->setParam('payload',
$response->output($recovery->setAttribute('secret', $secret),
Response::MODEL_TOKEN
@ -1270,7 +1270,7 @@ App::post('/v1/account/recovery')
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($recovery, Response::MODEL_TOKEN)
;
}, ['request', 'response', 'projectDB', 'project', 'locale', 'mails', 'audits', 'webhooks']);
}, ['request', 'response', 'projectDB', 'project', 'locale', 'mails', 'audits', 'events']);
App::put('/v1/account/recovery')
->desc('Complete Password Recovery')
@ -1363,7 +1363,7 @@ App::post('/v1/account/verification')
->label('abuse-limit', 10)
->label('abuse-key', 'url:{url},email:{param-email}')
->param('url', '', function ($clients) { return new Host($clients); }, 'URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['clients']) // TODO add built-in confirm page
->action(function ($url, $request, $response, $project, $user, $projectDB, $locale, $audits, $webhooks, $mails) {
->action(function ($url, $request, $response, $project, $user, $projectDB, $locale, $audits, $events, $mails) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $project */
@ -1371,7 +1371,7 @@ App::post('/v1/account/verification')
/** @var Appwrite\Database\Database $projectDB */
/** @var Utopia\Locale\Locale $locale */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $mails */
$isPreviliggedUser = Auth::isPreviliggedUser(Authorization::$roles);
@ -1440,7 +1440,7 @@ App::post('/v1/account/verification')
->trigger()
;
$webhooks
$events
->setParam('payload',
$response->output($verification->setAttribute('secret', $verificationSecret),
Response::MODEL_TOKEN
@ -1461,7 +1461,7 @@ App::post('/v1/account/verification')
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($verification, Response::MODEL_TOKEN)
;
}, ['request', 'response', 'project', 'user', 'projectDB', 'locale', 'audits', 'webhooks', 'mails']);
}, ['request', 'response', 'project', 'user', 'projectDB', 'locale', 'audits', 'events', 'mails']);
App::put('/v1/account/verification')
->desc('Complete Email Verification')

View file

@ -235,10 +235,10 @@ App::delete('/v1/database/collections/:collectionId')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_NONE)
->param('collectionId', '', new UID(), 'Collection unique ID.')
->action(function ($collectionId, $response, $projectDB, $webhooks, $audits, $deletes) {
->action(function ($collectionId, $response, $projectDB, $events, $audits, $deletes) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
$collection = $projectDB->getDocument($collectionId, false);
@ -255,7 +255,7 @@ App::delete('/v1/database/collections/:collectionId')
->setParam('document', $collection)
;
$webhooks
$events
->setParam('payload', $response->output($collection, Response::MODEL_COLLECTION))
;
@ -266,7 +266,7 @@ App::delete('/v1/database/collections/:collectionId')
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks', 'audits', 'deletes']);
}, ['response', 'projectDB', 'events', 'audits', 'deletes']);
App::post('/v1/database/collections/:collectionId/documents')
->desc('Create Document')
@ -565,10 +565,10 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId')
->label('sdk.response.model', Response::MODEL_NONE)
->param('collectionId', null, new UID(), 'Collection unique ID. You can create a new collection with validation rules using the Database service [server integration](/docs/server/database#createCollection).')
->param('documentId', null, new UID(), 'Document unique ID.')
->action(function ($collectionId, $documentId, $response, $projectDB, $webhooks, $audits) {
->action(function ($collectionId, $documentId, $response, $projectDB, $events, $audits) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
$collection = $projectDB->getDocument($collectionId, false);
@ -592,7 +592,7 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId')
throw new Exception('Failed to remove document from DB', 500);
}
$webhooks
$events
->setParam('payload', $response->output($document, Response::MODEL_ANY))
;
@ -603,4 +603,4 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId')
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks', 'audits']);
}, ['response', 'projectDB', 'events', 'audits']);

View file

@ -534,10 +534,10 @@ App::delete('/v1/storage/files/:fileId')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_NONE)
->param('fileId', '', new UID(), 'File unique ID.')
->action(function ($fileId, $response, $projectDB, $webhooks, $audits, $usage) {
->action(function ($fileId, $response, $projectDB, $events, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $usage */
@ -564,12 +564,12 @@ App::delete('/v1/storage/files/:fileId')
->setParam('storage', $file->getAttribute('size', 0) * -1)
;
$webhooks
$events
->setParam('payload', $response->output($file, Response::MODEL_FILE))
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks', 'audits', 'usage']);
}, ['response', 'projectDB', 'events', 'audits', 'usage']);
// App::get('/v1/storage/files/:fileId/scan')
// ->desc('Scan Storage')

View file

@ -203,10 +203,10 @@ App::delete('/v1/teams/:teamId')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_NONE)
->param('teamId', '', new UID(), 'Team unique ID.')
->action(function ($teamId, $response, $projectDB, $webhooks) {
->action(function ($teamId, $response, $projectDB, $events) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$team = $projectDB->getDocument($teamId);
@ -233,12 +233,12 @@ App::delete('/v1/teams/:teamId')
throw new Exception('Failed to remove team from DB', 500);
}
$webhooks
$events
->setParam('payload', $response->output($team, Response::MODEL_TEAM))
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks']);
}, ['response', 'projectDB', 'events']);
App::post('/v1/teams/:teamId/memberships')
->desc('Create Team Membership')
@ -683,11 +683,11 @@ App::delete('/v1/teams/:teamId/memberships/:inviteId')
->label('sdk.response.model', Response::MODEL_NONE)
->param('teamId', '', new UID(), 'Team unique ID.')
->param('inviteId', '', new UID(), 'Invite unique ID.')
->action(function ($teamId, $inviteId, $response, $projectDB, $audits, $webhooks) {
->action(function ($teamId, $inviteId, $response, $projectDB, $audits, $events) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$membership = $projectDB->getDocument($inviteId);
@ -725,9 +725,9 @@ App::delete('/v1/teams/:teamId/memberships/:inviteId')
->setParam('resource', 'teams/'.$teamId)
;
$webhooks
$events
->setParam('payload', $response->output($membership, Response::MODEL_MEMBERSHIP))
;
$response->noContent();
}, ['response', 'projectDB', 'audits', 'webhooks']);
}, ['response', 'projectDB', 'audits', 'events']);

View file

@ -402,10 +402,10 @@ App::delete('/v1/users/:userId/sessions/:sessionId')
->label('abuse-limit', 100)
->param('userId', '', new UID(), 'User unique ID.')
->param('sessionId', null, new UID(), 'User unique session ID.')
->action(function ($userId, $sessionId, $response, $projectDB, $webhooks) {
->action(function ($userId, $sessionId, $response, $projectDB, $events) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$user = $projectDB->getDocument($userId);
@ -421,14 +421,14 @@ App::delete('/v1/users/:userId/sessions/:sessionId')
throw new Exception('Failed to remove token from DB', 500);
}
$webhooks
$events
->setParam('payload', $response->output($user, Response::MODEL_USER))
;
}
}
$response->noContent();
}, ['response', 'projectDB', 'webhooks']);
}, ['response', 'projectDB', 'events']);
App::delete('/v1/users/:userId/sessions')
->desc('Delete User Sessions')
@ -444,10 +444,10 @@ App::delete('/v1/users/:userId/sessions')
->label('sdk.response.model', Response::MODEL_NONE)
->label('abuse-limit', 100)
->param('userId', '', new UID(), 'User unique ID.')
->action(function ($userId, $response, $projectDB, $webhooks) {
->action(function ($userId, $response, $projectDB, $events) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
$user = $projectDB->getDocument($userId);
@ -463,12 +463,12 @@ App::delete('/v1/users/:userId/sessions')
}
}
$webhooks
$events
->setParam('payload', $response->output($user, Response::MODEL_USER))
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks']);
}, ['response', 'projectDB', 'events']);
App::delete('/v1/users/:userId')
->desc('Delete User')
@ -484,10 +484,10 @@ App::delete('/v1/users/:userId')
->label('sdk.response.model', Response::MODEL_NONE)
->label('abuse-limit', 100)
->param('userId', '', function () {return new UID();}, 'User unique ID.')
->action(function ($userId, $response, $projectDB, $webhooks, $deletes) {
->action(function ($userId, $response, $projectDB, $events, $deletes) {
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Database $projectDB */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $deletes */
$user = $projectDB->getDocument($userId);
@ -519,9 +519,9 @@ App::delete('/v1/users/:userId')
->setParam('document', $user)
;
$webhooks
$events
->setParam('payload', $response->output($user, Response::MODEL_USER))
;
$response->noContent();
}, ['response', 'projectDB', 'webhooks', 'deletes']);
}, ['response', 'projectDB', 'events', 'deletes']);

View file

@ -22,14 +22,14 @@ Config::setParam('domainVerification', false);
Config::setParam('cookieDomain', 'localhost');
Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE);
App::init(function ($utopia, $request, $response, $console, $project, $user, $locale, $webhooks, $audits, $usage, $deletes, $clients) {
App::init(function ($utopia, $request, $response, $console, $project, $user, $locale, $events, $audits, $usage, $deletes, $clients) {
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $console */
/** @var Appwrite\Database\Document $project */
/** @var Appwrite\Database\Document $user */
/** @var Utopia\Locale\Locale $locale */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $usage */
/** @var Appwrite\Event\Event $deletes */
@ -220,7 +220,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo
/*
* Background Jobs
*/
$webhooks
$events
->setParam('projectId', $project->getId())
->setParam('userId', $user->getId())
->setParam('event', $route->getLabel('event', ''))
@ -250,25 +250,33 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo
$deletes
->setParam('projectId', $project->getId())
;
}, ['utopia', 'request', 'response', 'console', 'project', 'user', 'locale', 'webhooks', 'audits', 'usage', 'deletes', 'clients']);
}, ['utopia', 'request', 'response', 'console', 'project', 'user', 'locale', 'events', 'audits', 'usage', 'deletes', 'clients']);
App::shutdown(function ($utopia, $request, $response, $project, $webhooks, $audits, $usage, $deletes, $mode) {
App::shutdown(function ($utopia, $request, $response, $project, $events, $audits, $usage, $deletes, $mode) {
/** @var Utopia\App $utopia */
/** @var Utopia\Swoole\Request $request */
/** @var Appwrite\Utopia\Response $response */
/** @var Appwrite\Database\Document $project */
/** @var Appwrite\Event\Event $webhooks */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Event\Event $usage */
/** @var Appwrite\Event\Event $deletes */
/** @var bool $mode */
if (!empty($webhooks->getParam('event'))) {
if(empty($webhooks->getParam('payload'))) {
$webhooks->setParam('payload', $response->getPayload());
if (!empty($events->getParam('event'))) {
if(empty($events->getParam('payload'))) {
$events->setParam('payload', $response->getPayload());
}
$webhooks->trigger();
$events
->setQueue('v1-webhooks')
->setClass('WebhooksV1')
->trigger();
$events
->setQueue('v1-functions')
->setClass('FunctionsV1')
->trigger();
}
if (!empty($audits->getParam('event'))) {
@ -291,7 +299,7 @@ App::shutdown(function ($utopia, $request, $response, $project, $webhooks, $audi
->trigger()
;
}
}, ['utopia', 'request', 'response', 'project', 'webhooks', 'audits', 'usage', 'deletes', 'mode']);
}, ['utopia', 'request', 'response', 'project', 'events', 'audits', 'usage', 'deletes', 'mode']);
App::options(function ($request, $response) {
/** @var Utopia\Swoole\Request $request */

View file

@ -203,24 +203,6 @@ $register->set('smtp', function () {
$register->set('geodb', function () {
return new Reader(__DIR__.'/db/DBIP/dbip-country-lite-2020-01.mmdb');
});
$register->set('queue-webhooks', function () {
return new Event('v1-webhooks', 'WebhooksV1');
});
$register->set('queue-audits', function () {
return new Event('v1-audits', 'AuditsV1');
});
$register->set('queue-usage', function () {
return new Event('v1-usage', 'UsageV1');
});
$register->set('queue-mails', function () {
return new Event('v1-mails', 'MailsV1');
});
$register->set('queue-deletes', function () {
return new Event('v1-deletes', 'DeletesV1');
});
$register->set('queue-functions', function () {
return new Event('v1-functions', 'FunctionsV1');
});
/*
* Localization
@ -311,28 +293,24 @@ App::setResource('locale', function() {
});
// Queues
App::setResource('webhooks', function($register) {
return $register->get('queue-webhooks');
App::setResource('events', function($register) {
return new Event('', '');
}, ['register']);
App::setResource('audits', function($register) {
return $register->get('queue-audits');
return new Event('v1-audits', 'AuditsV1');
}, ['register']);
App::setResource('usage', function($register) {
return $register->get('queue-usage');
return new Event('v1-usage', 'UsageV1');
}, ['register']);
App::setResource('mails', function($register) {
return $register->get('queue-mails');
return new Event('v1-mails', 'MailsV1');
}, ['register']);
App::setResource('deletes', function($register) {
return $register->get('queue-deletes');
}, ['register']);
App::setResource('functions', function($register) {
return $register->get('queue-functions');
return new Event('v1-deletes', 'DeletesV1');
}, ['register']);
// Test Mock

View file

@ -33,6 +33,42 @@ class Event
$this->class = $class;
}
/**
* @param string $queue
* return $this
*/
public function setQueue(string $queue): self
{
$this->queue = $queue;
return $this;
}
/**
* @return string
*/
public function getQueue()
{
return $this->queue;
}
/**
* @param string $class
* return $this
*/
public function setClass(string $class): self
{
$this->class = $class;
return $this;
}
/**
* @return string
*/
public function getClass()
{
return $this->class;
}
/**
* @param string $key
* @param mixed $value

View file

@ -5,7 +5,7 @@ namespace Appwrite\Tests;
use Appwrite\Auth\Validator\Password;
use PHPUnit\Framework\TestCase;
class PasswordTestTest extends TestCase
class PasswordTest extends TestCase
{
/**
* @var Password

View file

@ -32,6 +32,28 @@ class EventTest extends TestCase
{
}
public function testQueue()
{
$this->assertEquals($this->queue, $this->object->getQueue());
$this->object->setQueue('demo');
$this->assertEquals('demo', $this->object->getQueue());
$this->object->setQueue($this->queue);
}
public function testClass()
{
$this->assertEquals('TestsV1', $this->object->getClass());
$this->object->setClass('TestsV2');
$this->assertEquals('TestsV2', $this->object->getClass());
$this->object->setClass('TestsV1');
}
public function testParams()
{
$this->object