Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 44 additions & 51 deletions tests/SDKTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -15,7 +15,7 @@ class SDKTest extends TestCase
/**
* @var array
*/
protected $languages = [
protected $languages = [
'php' => [
'class' => 'Appwrite\SDK\Language\PHP',
'build' => [
Expand All @@ -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' => [
Expand All @@ -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' => [
Expand All @@ -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',
Expand All @@ -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',
Expand All @@ -89,74 +87,69 @@ 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' => [
],
'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',
'nodejs-10' => 'docker run --rm -v $(pwd):/app -w /app node:10.16-alpine node tests/languages/node/test.js',
'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',
'ruby-2.6' => 'docker run --rm -v $(pwd):/app -w /app --env GEM_HOME=vendor ruby:2.6-alpine ruby tests/languages/ruby/tests.rb',
'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' => [
'class' => 'Appwrite\SDK\Language\Python',
'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',
Expand All @@ -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,
],
];

Expand All @@ -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')
Expand All @@ -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',
])
;

Expand All @@ -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";
}
}
Expand All @@ -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";
}

Expand All @@ -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');
}
}
}

}
}
12 changes: 12 additions & 0 deletions tests/languages/dart/tests.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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']);

Expand Down
3 changes: 3 additions & 0 deletions tests/languages/typescript/tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down