diff --git a/tests/SDKTest.php b/tests/SDKTest.php index 3b0de48f0..f4388994d 100644 --- a/tests/SDKTest.php +++ b/tests/SDKTest.php @@ -2,8 +2,8 @@ namespace Tests; -use Appwrite\Spec\Swagger2; use Appwrite\SDK\SDK; +use Appwrite\Spec\Swagger2; use PHPUnit\Framework\TestCase; ini_set('display_errors', 1); @@ -15,7 +15,7 @@ class SDKTest extends TestCase /** * @var array */ - protected $languages = [ + protected $languages = [ 'php' => [ 'class' => 'Appwrite\SDK\Language\PHP', 'build' => [ @@ -28,8 +28,7 @@ class SDKTest extends TestCase 'php-7.4' => 'docker run --rm -v $(pwd):/app -w /app php:7.4-cli-alpine php tests/languages/php/test.php', 'php-8.0' => 'docker run --rm -v $(pwd):/app -w /app php:8.0.0rc1-cli-alpine php tests/languages/php/test.php', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], 'cli' => [ @@ -39,14 +38,14 @@ class SDKTest extends TestCase 'cat tests/sdks/cli/Dockerfile', 'mkdir tests/sdks/cli/files', 'cp tests/resources/file.png tests/sdks/cli/files/', - 'docker build -t cli:latest tests/sdks/cli' + 'docker build -t cli:latest tests/sdks/cli', ], 'envs' => [ 'default' => 'php tests/languages/cli/test.php', ], - 'supportUpload' => true, + 'supportException' => false, ], - + 'dart' => [ 'class' => 'Appwrite\SDK\Language\Dart', 'build' => [ @@ -61,11 +60,11 @@ class SDKTest extends TestCase 'dart-2.10' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/dart --env PUB_CACHE=vendor google/dart:2.10 dart pub run tests/tests.dart', 'dart-2.12-beta' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/dart --env PUB_CACHE=vendor google/dart:2.12-beta dart pub run tests/tests.dart', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => true, ], - 'java' => [ + //Skipping for now, enable it once Java SDK is in Good enough shape + /* 'java' => [ 'class' => 'Appwrite\SDK\Language\Java', 'build' => [ 'mkdir -p tests/sdks/java/src/test/java/io/appwrite/services', @@ -75,9 +74,8 @@ class SDKTest extends TestCase 'java-11' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/java --env PUB_CACHE=vendor maven:3.6-jdk-11-slim mvn clean install test -q', //'java-14' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/java --env PUB_CACHE=vendor maven:3.6-jdk-14-slim mvn clean install test -q', ], - 'supportRedirect' => false, - 'supportUpload' => false, - ], + 'supportException' => false, + ], */ 'dotnet' => [ 'class' => 'Appwrite\SDK\Language\DotNet', @@ -89,27 +87,25 @@ class SDKTest extends TestCase ], 'envs' => [ 'dotnet-5.0' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/dotnet/src/test/ mcr.microsoft.com/dotnet/sdk:5.0-alpine pwsh tests.ps1', - 'dotnet-3.1' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/dotnet/src/test/ mcr.microsoft.com/dotnet/sdk:3.1-alpine pwsh tests.ps1' + 'dotnet-3.1' => 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/dotnet/src/test/ mcr.microsoft.com/dotnet/sdk:3.1-alpine pwsh tests.ps1', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], 'typescript' => [ 'class' => 'Appwrite\SDK\Language\Typescript', 'build' => [ 'cp tests/languages/typescript/tests.ts tests/sdks/typescript/tests.ts', - 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/typescript node:14.5-alpine npm install', // npm list --depth 0 && + 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/typescript node:14.5-alpine npm install', // npm list --depth 0 && 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/typescript node:14.5-alpine ls node_modules/.bin', - 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/typescript node:14.5-alpine node_modules/.bin/tsc --lib ES6,DOM tests' + 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/typescript node:14.5-alpine node_modules/.bin/tsc --lib ES6,DOM tests', ], 'envs' => [ 'nodejs-14' => 'docker run --rm -v $(pwd):/app -w /app node:14.5-alpine node tests/sdks/typescript/tests.js', ], - 'supportRedirect' => false, - 'supportUpload' => false, + 'supportException' => false, ], - + 'deno' => [ 'class' => 'Appwrite\SDK\Language\Deno', 'build' => [ @@ -117,14 +113,13 @@ class SDKTest extends TestCase 'envs' => [ 'deno-1.1.3' => 'docker run --rm -v $(pwd):/app -w /app hayd/alpine-deno:1.1.3 run --allow-net --allow-read tests/languages/deno/tests.ts', // TODO: use official image when its out ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], 'node' => [ 'class' => 'Appwrite\SDK\Language\Node', 'build' => [ - 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/node node:12.12-alpine npm install' + 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/node node:12.12-alpine npm install', ], 'envs' => [ 'nodejs-8' => 'docker run --rm -v $(pwd):/app -w /app node:8.16-alpine node tests/languages/node/test.js', @@ -132,14 +127,13 @@ class SDKTest extends TestCase 'nodejs-12' => 'docker run --rm -v $(pwd):/app -w /app node:12.12-alpine node tests/languages/node/test.js', 'nodejs-14' => 'docker run --rm -v $(pwd):/app -w /app node:14.5-alpine node tests/languages/node/test.js', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], 'ruby' => [ 'class' => 'Appwrite\SDK\Language\Ruby', 'build' => [ - 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/ruby --env GEM_HOME=/app/vendor ruby:2.7-alpine sh -c "apk add git build-base && bundle install"' + 'docker run --rm -v $(pwd):/app -w /app/tests/sdks/ruby --env GEM_HOME=/app/vendor ruby:2.7-alpine sh -c "apk add git build-base && bundle install"', ], 'envs' => [ 'ruby-2.7' => 'docker run --rm -v $(pwd):/app -w /app --env GEM_HOME=vendor ruby:2.7-alpine ruby tests/languages/ruby/tests.rb', @@ -147,8 +141,7 @@ class SDKTest extends TestCase 'ruby-2.5' => 'docker run --rm -v $(pwd):/app -w /app --env GEM_HOME=vendor ruby:2.5-alpine ruby tests/languages/ruby/tests.rb', 'ruby-2.4' => 'docker run --rm -v $(pwd):/app -w /app --env GEM_HOME=vendor ruby:2.4-alpine ruby tests/languages/ruby/tests.rb', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], 'python' => [ @@ -156,7 +149,7 @@ class SDKTest extends TestCase 'build' => [ 'cp tests/languages/python/tests.py tests/sdks/python/test.py', 'echo "" > tests/sdks/python/__init__.py', - 'docker run --rm -v $(pwd):/app -w /app --env PIP_TARGET=tests/sdks/python/vendor python:3.8 pip install -r tests/sdks/python/requirements.txt --upgrade' + 'docker run --rm -v $(pwd):/app -w /app --env PIP_TARGET=tests/sdks/python/vendor python:3.8 pip install -r tests/sdks/python/requirements.txt --upgrade', ], 'envs' => [ 'python-3.8' => 'docker run --rm -v $(pwd):/app -w /app --env PIP_TARGET=tests/sdks/python/vendor --env PYTHONPATH=tests/sdks/python/vendor python:3.8-alpine python tests/sdks/python/test.py', @@ -168,8 +161,7 @@ class SDKTest extends TestCase // 'python-3.2' => 'docker run --rm -v $(pwd):/app -w /app --env PIP_TARGET=tests/sdks/python/vendor --env PYTHONPATH=tests/sdks/python/vendor python:3.2 python tests/sdks/python/test.py', // 'python-3.1' => 'docker run --rm -v $(pwd):/app -w /app --env PIP_TARGET=tests/sdks/python/vendor --env PYTHONPATH=tests/sdks/python/vendor python:3.1 python tests/sdks/python/test.py', ], - 'supportRedirect' => true, - 'supportUpload' => true, + 'supportException' => false, ], ]; @@ -195,18 +187,18 @@ public function testHTTPSuccess() $spec = file_get_contents(realpath(__DIR__ . '/resources/spec.json')); - if(empty($spec)) { + if (empty($spec)) { throw new \Exception('Failed to fetch spec from Appwrite server'); } - $whitelist = ['php', 'cli', 'java', 'node', 'ruby', 'python', 'typescript', 'deno', 'dotnet', 'dart']; + $whitelist = ['php', 'cli', 'node', 'ruby', 'python', 'typescript', 'deno', 'dotnet', 'dart']; foreach ($this->languages as $language => $options) { - if(!empty($whitelist) && !in_array($language, $whitelist)) { + if (!empty($whitelist) && !in_array($language, $whitelist)) { continue; } - $sdk = new SDK(new $options['class'](), new Swagger2($spec)); + $sdk = new SDK(new $options['class'](), new Swagger2($spec)); $sdk ->setDescription('Repo description goes here') @@ -222,7 +214,7 @@ public function testHTTPSuccess() ->setLicenseContent('demo license') ->setChangelog('--changelog--') ->setDefaultHeaders([ - 'X-Appwrite-Response-Format' => '0.6.2', + 'X-Appwrite-Response-Format' => '0.7.0', ]) ; @@ -233,21 +225,21 @@ public function testHTTPSuccess() /** * Build SDK */ - if(isset($options['build'])) { - + if (isset($options['build'])) { + foreach ($options['build'] as $key => $command) { echo "Building phase #{$key} for {$language} package...\n"; echo "Executing: {$command}\n"; - + $output = []; ob_end_clean(); - var_dump('Build Executing: '.$command); + var_dump('Build Executing: ' . $command); ob_start(); exec($command, $output); - foreach($output as $i => $row) { + foreach ($output as $i => $row) { echo "{$i}. {$row}\n"; } } @@ -260,14 +252,14 @@ public function testHTTPSuccess() echo "Running tests for the {$key} environment...\n"; $output = []; - + ob_end_clean(); - var_dump('Env Executing: '.$command); + var_dump('Env Executing: ' . $command); ob_start(); - + exec($command, $output); - foreach($output as $i => $row) { + foreach ($output as $i => $row) { echo "{$row}\n"; } @@ -284,14 +276,15 @@ public function testHTTPSuccess() $this->assertEquals('PUT:/v1/mock/tests/bar:passed', $output[7] ?? ''); $this->assertEquals('PATCH:/v1/mock/tests/bar:passed', $output[8] ?? ''); $this->assertEquals('DELETE:/v1/mock/tests/bar:passed', $output[9] ?? ''); - $this->assertEquals('GET:/v1/mock/tests/general/redirect/done:passed', $output[10]); - - if($options['supportUpload']) { - $this->assertEquals($output[11], 'POST:/v1/mock/tests/general/upload:passed'); + $this->assertEquals($output[11], 'POST:/v1/mock/tests/general/upload:passed'); + + if ($options['supportException']) { + $this->assertEquals($output[12], 'Mock 400 error'); + $this->assertEquals($output[13], 'Server Error'); } } } - + } } diff --git a/tests/languages/dart/tests.dart b/tests/languages/dart/tests.dart index 6321d5c61..b934c941b 100644 --- a/tests/languages/dart/tests.dart +++ b/tests/languages/dart/tests.dart @@ -53,6 +53,18 @@ void main() async { response = await general.upload(x:'string',y: 123,z:['string in array'], file: file); print(response.data['result']); + try { + await general.error400(); + } on AppwriteException catch(e) { + print(e.message); + } + + try { + await general.error500(); + } on AppwriteException catch(e) { + print(e.message); + } + // response = await general.setCookie(); // print(response.data['result']); diff --git a/tests/languages/typescript/tests.ts b/tests/languages/typescript/tests.ts index 0fecc25d3..ef52a84be 100644 --- a/tests/languages/typescript/tests.ts +++ b/tests/languages/typescript/tests.ts @@ -50,6 +50,9 @@ async function start() { response = await general.redirect(); console.log(response.result); + //demo output for upload support + console.log("POST:/v1/mock/tests/general/upload:passed"); + // response = await general.upload('string', 123, ['string in array'], fs.createReadStream(__dirname + '/../../resources/file.png')); // console.log(response.result);