Merge branch '0.9.x' of https://github.com/appwrite/appwrite into feat-265-realtime
This commit is contained in:
commit
3d896af4bb
23 changed files with 164 additions and 101 deletions
|
@ -242,6 +242,7 @@ App::get('/v1/storage/files/:fileId/preview')
|
|||
->param('fileId', '', new UID(), 'File unique ID')
|
||||
->param('width', 0, new Range(0, 4000), 'Resize preview image width, Pass an integer between 0 to 4000.', true)
|
||||
->param('height', 0, new Range(0, 4000), 'Resize preview image height, Pass an integer between 0 to 4000.', true)
|
||||
->param('gravity', Image::GRAVITY_CENTER, new WhiteList([Image::GRAVITY_CENTER, Image::GRAVITY_NORTH, Image::GRAVITY_NORTHWEST, Image::GRAVITY_NORTHEAST, Image::GRAVITY_WEST, Image::GRAVITY_EAST, Image::GRAVITY_SOUTHWEST, Image::GRAVITY_SOUTH, Image::GRAVITY_SOUTHEAST]), 'Image crop gravity', true)
|
||||
->param('quality', 100, new Range(0, 100), 'Preview image quality. Pass an integer between 0 to 100. Defaults to 100.', true)
|
||||
->param('borderWidth', 0, new Range(0, 100), 'Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.', true)
|
||||
->param('borderColor', '', new HexColor(), 'Preview image border color. Use a valid HEX color, no # is needed for prefix.', true)
|
||||
|
@ -254,7 +255,7 @@ App::get('/v1/storage/files/:fileId/preview')
|
|||
->inject('response')
|
||||
->inject('project')
|
||||
->inject('projectDB')
|
||||
->action(function ($fileId, $width, $height, $quality, $borderWidth, $borderColor, $borderRadius, $opacity, $rotation, $background, $output, $request, $response, $project, $projectDB) {
|
||||
->action(function ($fileId, $width, $height, $gravity, $quality, $borderWidth, $borderColor, $borderRadius, $opacity, $rotation, $background, $output, $request, $response, $project, $projectDB) {
|
||||
/** @var Utopia\Swoole\Request $request */
|
||||
/** @var Appwrite\Utopia\Response $response */
|
||||
/** @var Appwrite\Database\Document $project */
|
||||
|
@ -342,7 +343,7 @@ App::get('/v1/storage/files/:fileId/preview')
|
|||
|
||||
$image = new Image($source);
|
||||
|
||||
$image->crop((int) $width, (int) $height);
|
||||
$image->crop((int) $width, (int) $height, $gravity);
|
||||
|
||||
if (!empty($opacity) || $opacity==0) {
|
||||
$image->setOpacity($opacity);
|
||||
|
|
24
app/http.php
24
app/http.php
|
@ -12,26 +12,6 @@ use Swoole\Http\Request as SwooleRequest;
|
|||
use Swoole\Http\Response as SwooleResponse;
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Config\Config;
|
||||
use Utopia\Domains\Domain;
|
||||
|
||||
// xdebug_start_trace('/tmp/trace');
|
||||
|
||||
Files::load(__DIR__ . '/../public');
|
||||
|
||||
include __DIR__ . '/controllers/general.php';
|
||||
|
||||
$domain = App::getEnv('_APP_DOMAIN', '');
|
||||
|
||||
Console::info('Issuing a TLS certificate for the master domain ('.$domain.') in 30 seconds.
|
||||
Make sure your domain points to your server IP or restart your Appwrite server to try again.'); // TODO move this to installation script
|
||||
|
||||
ResqueScheduler::enqueueAt(\time() + 30, 'v1-certificates', 'CertificatesV1', [
|
||||
'document' => [],
|
||||
'domain' => $domain,
|
||||
'validateTarget' => false,
|
||||
'validateCNAME' => false,
|
||||
]);
|
||||
|
||||
$http = new Server("0.0.0.0", App::getEnv('PORT', 80));
|
||||
|
||||
|
@ -101,8 +81,8 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
|||
$register->set('db', function () use (&$db) {
|
||||
return $db;
|
||||
});
|
||||
|
||||
$register->set('cache', function () use (&$redis) { // Register cache connection
|
||||
|
||||
$register->set('cache', function () use (&$redis) {
|
||||
return $redis;
|
||||
});
|
||||
|
||||
|
|
20
app/init.php
20
app/init.php
|
@ -161,19 +161,21 @@ $register->set('dbPool', function () { // Register DB connection
|
|||
|
||||
return $pool;
|
||||
});
|
||||
|
||||
$register->set('redisPool', function () {
|
||||
$user = App::getEnv('_APP_REDIS_USER', '');
|
||||
$pass = App::getEnv('_APP_REDIS_PASS', '');
|
||||
$auth = [];
|
||||
if ($user) {
|
||||
$auth[] = $user;
|
||||
$redisHost = App::getEnv('_APP_REDIS_HOST', '');
|
||||
$redisPort = App::getEnv('_APP_REDIS_PORT', '');
|
||||
$redisUser = App::getEnv('_APP_REDIS_USER', '');
|
||||
$redisPass = App::getEnv('_APP_REDIS_PASS', '');
|
||||
$redisAuth = [];
|
||||
|
||||
if ($redisUser) {
|
||||
$redisAuth[] = $redisUser;
|
||||
}
|
||||
if ($pass) {
|
||||
$auth[] = $pass;
|
||||
if ($redisPass) {
|
||||
$redisAuth[] = $redisPass;
|
||||
}
|
||||
|
||||
$pool = new RedisPool(10, App::getEnv('_APP_REDIS_HOST', ''), App::getEnv('_APP_REDIS_PORT', ''), $auth);
|
||||
$pool = new RedisPool(10, $redisHost, $redisPort, $redisAuth);
|
||||
|
||||
return $pool;
|
||||
});
|
||||
|
|
|
@ -332,7 +332,7 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled',true);
|
|||
<div data-ui-modal class="modal box close" data-button-alias=".android-new">
|
||||
<button type="button" class="close pull-end" data-ui-modal-close=""><i class="icon-cancel"></i></button>
|
||||
|
||||
<h1 class="margin-bottom-xl">Register your Android App</h1>
|
||||
<h1>Register your Android App</h1>
|
||||
|
||||
<form
|
||||
data-analytics
|
||||
|
|
|
@ -8,7 +8,6 @@ use Utopia\CLI\Console;
|
|||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Audits V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' audits worker v1 has started');
|
||||
|
||||
class AuditsV1 extends Worker
|
||||
|
@ -44,4 +43,4 @@ class AuditsV1 extends Worker
|
|||
{
|
||||
// ... Remove environment for this job
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,20 +1,19 @@
|
|||
<?php
|
||||
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Config\Config;
|
||||
use Utopia\Domains\Domain;
|
||||
use Appwrite\Database\Database;
|
||||
use Appwrite\Database\Adapter\MySQL as MySQLAdapter;
|
||||
use Appwrite\Database\Adapter\Redis as RedisAdapter;
|
||||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Network\Validator\CNAME;
|
||||
use Appwrite\Resque\Worker;
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Config\Config;
|
||||
use Utopia\Domains\Domain;
|
||||
|
||||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Certificates V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' certificates worker v1 has started');
|
||||
|
||||
class CertificatesV1 extends Worker
|
||||
|
@ -208,4 +207,4 @@ class CertificatesV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -17,7 +17,6 @@ use Utopia\Audit\Adapters\MySQL as AuditAdapter;
|
|||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Deletes V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' deletes worker v1 has started'."\n");
|
||||
|
||||
class DeletesV1 extends Worker
|
||||
|
|
|
@ -6,7 +6,6 @@ use Appwrite\Database\Adapter\MySQL as MySQLAdapter;
|
|||
use Appwrite\Database\Adapter\Redis as RedisAdapter;
|
||||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Event\Event;
|
||||
use Appwrite\Event\Realtime;
|
||||
use Appwrite\Resque\Worker;
|
||||
use Cron\CronExpression;
|
||||
use Swoole\Runtime;
|
||||
|
@ -578,4 +577,4 @@ class FunctionsV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,7 +7,6 @@ use Utopia\CLI\Console;
|
|||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Mails V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' mails worker v1 has started'."\n");
|
||||
|
||||
class MailsV1 extends Worker
|
||||
|
@ -72,4 +71,4 @@ class MailsV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,19 +1,18 @@
|
|||
<?php
|
||||
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Config\Config;
|
||||
use Appwrite\Database\Database;
|
||||
use Appwrite\Database\Adapter\MySQL as MySQLAdapter;
|
||||
use Appwrite\Database\Adapter\Redis as RedisAdapter;
|
||||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Resque\Worker;
|
||||
use Cron\CronExpression;
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
use Utopia\Config\Config;
|
||||
|
||||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Tasks V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' tasks worker v1 has started');
|
||||
|
||||
class TasksV1 extends Worker
|
||||
|
@ -209,4 +208,4 @@ class TasksV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,7 +7,6 @@ use Utopia\CLI\Console;
|
|||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Usage V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' usage worker v1 has started');
|
||||
|
||||
class UsageV1 extends Worker
|
||||
|
@ -80,4 +79,4 @@ class UsageV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
<?php
|
||||
|
||||
use Appwrite\Resque\Worker;
|
||||
use Utopia\App;
|
||||
use Utopia\CLI\Console;
|
||||
|
||||
require_once __DIR__.'/../workers.php';
|
||||
|
||||
Console::title('Webhooks V1 Worker');
|
||||
|
||||
Console::success(APP_NAME.' webhooks worker v1 has started');
|
||||
use Appwrite\Resque\Worker;
|
||||
|
||||
|
@ -92,4 +92,4 @@ class WebhooksV1 extends Worker
|
|||
public function shutdown(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -51,7 +51,7 @@
|
|||
"utopia-php/domains": "1.1.*",
|
||||
"utopia-php/swoole": "0.2.*",
|
||||
"utopia-php/storage": "0.5.*",
|
||||
"utopia-php/image": "0.2.*",
|
||||
"utopia-php/image": "0.3.*",
|
||||
"resque/php-resque": "1.3.6",
|
||||
"matomo/device-detector": "4.2.2",
|
||||
"dragonmantank/cron-expression": "3.1.0",
|
||||
|
|
28
composer.lock
generated
28
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "c73fd7564a192ea65a1398edccb590f4",
|
||||
"content-hash": "399d2426ca92e04b6d6fb84a91c316c3",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/jwt",
|
||||
|
@ -1742,16 +1742,16 @@
|
|||
},
|
||||
{
|
||||
"name": "utopia-php/image",
|
||||
"version": "0.2.1",
|
||||
"version": "0.3.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/image.git",
|
||||
"reference": "0754955a165483852184d1215cc3bf659432d23a"
|
||||
"reference": "2044fdd44d87c4253cfe929cca975fd037461b00"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/image/zipball/0754955a165483852184d1215cc3bf659432d23a",
|
||||
"reference": "0754955a165483852184d1215cc3bf659432d23a",
|
||||
"url": "https://api.github.com/repos/utopia-php/image/zipball/2044fdd44d87c4253cfe929cca975fd037461b00",
|
||||
"reference": "2044fdd44d87c4253cfe929cca975fd037461b00",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1789,9 +1789,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/image/issues",
|
||||
"source": "https://github.com/utopia-php/image/tree/0.2.1"
|
||||
"source": "https://github.com/utopia-php/image/tree/0.3.2"
|
||||
},
|
||||
"time": "2021-04-13T07:47:24+00:00"
|
||||
"time": "2021-06-10T09:16:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/locale",
|
||||
|
@ -4472,16 +4472,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
"version": "5.0.2",
|
||||
"version": "5.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/global-state.git",
|
||||
"reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
|
||||
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
|
||||
"reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
|
||||
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4524,7 +4524,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/global-state/issues",
|
||||
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
|
||||
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4532,7 +4532,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-26T15:55:19+00:00"
|
||||
"time": "2021-06-11T13:31:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/lines-of-code",
|
||||
|
@ -6074,5 +6074,5 @@
|
|||
"platform-overrides": {
|
||||
"php": "8.0"
|
||||
},
|
||||
"plugin-api-version": "2.0.0"
|
||||
"plugin-api-version": "2.1.0"
|
||||
}
|
||||
|
|
BIN
public/images/clients/ios.png
Normal file
BIN
public/images/clients/ios.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
public/images/clients/linux.png
Normal file
BIN
public/images/clients/linux.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
public/images/clients/macos.png
Normal file
BIN
public/images/clients/macos.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
public/images/clients/windows.png
Normal file
BIN
public/images/clients/windows.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -9,11 +9,11 @@ abstract class Pool
|
|||
|
||||
abstract public function get();
|
||||
|
||||
public function destruct ()
|
||||
public function destruct()
|
||||
{
|
||||
$this->available = false;
|
||||
while (!$this->pool->isEmpty()) {
|
||||
$this->pool->pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
49
src/Appwrite/Database/Pool/PDOPool.php
Normal file
49
src/Appwrite/Database/Pool/PDOPool.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Database\Pool;
|
||||
|
||||
use Appwrite\Database\Pool;
|
||||
use Appwrite\Extend\PDO;
|
||||
use SplQueue;
|
||||
|
||||
class PDOPool extends Pool
|
||||
{
|
||||
public function __construct(int $size, string $host = 'localhost', string $schema = 'appwrite', string $user = '', string $pass = '', string $charset = 'utf8mb4')
|
||||
{
|
||||
$this->pool = new SplQueue;
|
||||
$this->size = $size;
|
||||
for ($i = 0; $i < $this->size; $i++) {
|
||||
$pdo = new PDO(
|
||||
"mysql:" .
|
||||
"host={$host};" .
|
||||
"dbname={$schema};" .
|
||||
"charset={$charset}",
|
||||
$user,
|
||||
$pass,
|
||||
[
|
||||
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
|
||||
PDO::ATTR_TIMEOUT => 3, // Seconds
|
||||
PDO::ATTR_PERSISTENT => true,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
|
||||
]
|
||||
);
|
||||
$this->pool->enqueue($pdo);
|
||||
}
|
||||
}
|
||||
|
||||
public function put(PDO $pdo)
|
||||
{
|
||||
$this->pool->enqueue($pdo);
|
||||
}
|
||||
|
||||
public function get(): PDO
|
||||
{
|
||||
if ($this->available && count($this->pool) > 0) {
|
||||
return $this->pool->dequeue();
|
||||
}
|
||||
sleep(0.01);
|
||||
return $this->get();
|
||||
}
|
||||
}
|
42
src/Appwrite/Database/Pool/RedisPool.php
Normal file
42
src/Appwrite/Database/Pool/RedisPool.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Database\Pool;
|
||||
|
||||
use Appwrite\Database\Pool;
|
||||
use SplQueue;
|
||||
|
||||
use Redis;
|
||||
|
||||
class RedisPool extends Pool
|
||||
{
|
||||
public function __construct(int $size, string $host, int $port, array $auth = [])
|
||||
{
|
||||
$this->pool = new SplQueue;
|
||||
$this->size = $size;
|
||||
for ($i = 0; $i < $this->size; $i++) {
|
||||
$redis = new Redis();
|
||||
$redis->pconnect($host, $port);
|
||||
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
|
||||
|
||||
if ($auth) {
|
||||
$redis->auth($auth);
|
||||
}
|
||||
|
||||
$this->pool->enqueue($redis);
|
||||
}
|
||||
}
|
||||
|
||||
public function put(Redis $redis)
|
||||
{
|
||||
$this->pool->enqueue($redis);
|
||||
}
|
||||
|
||||
public function get(): Redis
|
||||
{
|
||||
if ($this->available && !$this->pool->isEmpty()) {
|
||||
return $this->pool->dequeue();
|
||||
}
|
||||
sleep(0.1);
|
||||
return $this->get();
|
||||
}
|
||||
}
|
|
@ -2,18 +2,14 @@
|
|||
|
||||
namespace Appwrite\Resque;
|
||||
|
||||
use Swoole\Runtime;
|
||||
|
||||
use function Swoole\Coroutine\run;
|
||||
|
||||
abstract class Worker
|
||||
{
|
||||
public $args = [];
|
||||
|
||||
abstract public function init(): void;
|
||||
|
||||
|
||||
abstract public function run(): void;
|
||||
|
||||
|
||||
abstract public function shutdown(): void;
|
||||
|
||||
public function setUp(): void
|
||||
|
|
|
@ -94,33 +94,33 @@ class HTTPTest extends Scope
|
|||
$this->assertStringContainsString('# robotstxt.org/', $response['body']);
|
||||
}
|
||||
|
||||
public function testSpecSwagger2()
|
||||
{
|
||||
$response = $this->client->call(Client::METHOD_GET, '/specs/swagger2?platform=client', [
|
||||
'content-type' => 'application/json',
|
||||
], []);
|
||||
// public function testSpecSwagger2()
|
||||
// {
|
||||
// $response = $this->client->call(Client::METHOD_GET, '/specs/swagger2?platform=client', [
|
||||
// 'content-type' => 'application/json',
|
||||
// ], []);
|
||||
|
||||
if(!file_put_contents(__DIR__ . '/../../resources/swagger2.json', json_encode($response['body']))) {
|
||||
throw new Exception('Failed to save spec file');
|
||||
}
|
||||
// if(!file_put_contents(__DIR__ . '/../../resources/swagger2.json', json_encode($response['body']))) {
|
||||
// throw new Exception('Failed to save spec file');
|
||||
// }
|
||||
|
||||
$client = new Client();
|
||||
$client->setEndpoint('https://validator.swagger.io');
|
||||
// $client = new Client();
|
||||
// $client->setEndpoint('https://validator.swagger.io');
|
||||
|
||||
/**
|
||||
* Test for SUCCESS
|
||||
*/
|
||||
$response = $client->call(Client::METHOD_POST, '/validator/debug', [
|
||||
'content-type' => 'application/json',
|
||||
], json_decode(file_get_contents(realpath(__DIR__ . '/../../resources/swagger2.json')), true));
|
||||
// /**
|
||||
// * Test for SUCCESS
|
||||
// */
|
||||
// $response = $client->call(Client::METHOD_POST, '/validator/debug', [
|
||||
// 'content-type' => 'application/json',
|
||||
// ], json_decode(file_get_contents(realpath(__DIR__ . '/../../resources/swagger2.json')), true));
|
||||
|
||||
$response['body'] = json_decode($response['body'], true);
|
||||
// $response['body'] = json_decode($response['body'], true);
|
||||
|
||||
$this->assertEquals(200, $response['headers']['status-code']);
|
||||
$this->assertTrue(empty($response['body']));
|
||||
// $this->assertEquals(200, $response['headers']['status-code']);
|
||||
// $this->assertTrue(empty($response['body']));
|
||||
|
||||
unlink(realpath(__DIR__ . '/../../resources/swagger2.json'));
|
||||
}
|
||||
// unlink(realpath(__DIR__ . '/../../resources/swagger2.json'));
|
||||
// }
|
||||
|
||||
public function testSpecOpenAPI3()
|
||||
{
|
||||
|
@ -209,4 +209,4 @@ class HTTPTest extends Scope
|
|||
$this->assertIsString($body['server-ruby']);
|
||||
$this->assertIsString($body['server-cli']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue