Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: react native multipart #979

Merged
merged 16 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
feat: react native tests
  • Loading branch information
loks0n committed Sep 17, 2024
commit ae5bec1ffe6526a301ba5759dc23f0f7bcf2b4a1
3 changes: 2 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ jobs:
Deno1303,
DotNet60,
DotNet80,
FlutterStable,
FlutterBeta,
FlutterStable,
Go122,
KotlinJava8,
KotlinJava11,
Expand All @@ -38,6 +38,7 @@ jobs:
Python38,
Python39,
Python310,
ReactNativeStable,
Ruby27,
Ruby30,
Ruby31,
Expand Down
1 change: 0 additions & 1 deletion templates/react-native/package.json.twig
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
},
"devDependencies": {
"@rollup/plugin-typescript": "8.3.2",
"playwright": "1.15.0",
"rollup": "2.75.4",
"serve-handler": "6.1.0",
"tslib": "2.4.0",
Expand Down
6 changes: 3 additions & 3 deletions templates/react-native/src/client.ts.twig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Models } from './models';
import { Service } from './service';
import { Platform } from 'react-native';

type Payload = {
type Params = {
[key: string]: any;
}

Expand Down Expand Up @@ -345,7 +345,7 @@ class Client {
}
}

async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}): Promise<any> {
async call(method: string, url: URL, headers: Headers = {}, params: Params = {}): Promise<any> {
method = method.toUpperCase();

headers = Object.assign({}, this.headers, headers);
Expand Down Expand Up @@ -425,4 +425,4 @@ class Client {
}

export { Client, {{spec.title | caseUcfirst}}Exception };
export type { Models, Payload };
export type { Models, Params };
1 change: 0 additions & 1 deletion templates/web/package.json.twig
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
},
"devDependencies": {
"@rollup/plugin-typescript": "8.3.2",
"playwright": "1.46.0",
"rollup": "2.75.4",
"serve-handler": "6.1.0",
"tslib": "2.4.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/Node16Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Node16Test extends Base
protected string $language = 'node';
protected string $class = 'Appwrite\SDK\Language\Node';
protected array $build = [
'cp tests/languages/node/test.js tests/sdks/node/test.js',
'cp -R tests/languages/node/* tests/sdks/node/',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/node node:16-alpine npm install',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/node node:16-alpine npm run build'
];
Expand Down
35 changes: 35 additions & 0 deletions tests/ReactNativeStableTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

namespace Tests;

class ReactNativeStableTest extends Base
{
protected string $sdkName = 'react-native';
protected string $sdkPlatform = 'client';
protected string $sdkLanguage = 'react-native';
protected string $version = '0.0.1';

protected string $language = 'javascript';
protected string $class = 'Appwrite\SDK\Language\ReactNative';
protected array $build = [
'cp -R tests/languages/react-native/* tests/sdks/react-native/',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/react-native node:16-alpine npm install',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/react-native node:16-alpine npm run build'
];
protected string $command =
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/react-native node:16-alpine node node.js';

protected array $expectedOutput = [
...Base::FOO_RESPONSES,
...Base::BAR_RESPONSES,
...Base::GENERAL_RESPONSES,
...Base::UPLOAD_RESPONSES,
...Base::ENUM_RESPONSES,
...Base::EXCEPTION_RESPONSES,
...Base::REALTIME_RESPONSES,
...Base::MULTIPART_RESPONSES,
...Base::QUERY_HELPER_RESPONSES,
...Base::PERMISSION_HELPER_RESPONSES,
...Base::ID_HELPER_RESPONSES
];
}
7 changes: 3 additions & 4 deletions tests/WebChromiumTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ class WebChromiumTest extends Base
protected string $language = 'web';
protected string $class = 'Appwrite\SDK\Language\Web';
protected array $build = [
'cp tests/languages/web/tests.js tests/sdks/web/tests.js',
'cp tests/languages/web/node.js tests/sdks/web/node.js',
'cp tests/languages/web/index.html tests/sdks/web/index.html',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy sh -c "npm install && npm run build"',
'cp -R tests/languages/web/* tests/sdks/web/',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy npm install playwright@1.46.0',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy npm run build',
];
protected string $command =
'docker run --network="mockapi" --rm -v $(pwd):/app -e BROWSER=chromium -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy node tests.js';
Expand Down
8 changes: 3 additions & 5 deletions tests/WebNodeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,9 @@ class WebNodeTest extends Base
protected string $language = 'web';
protected string $class = 'Appwrite\SDK\Language\Web';
protected array $build = [
'cp tests/languages/web/tests.js tests/sdks/web/tests.js',
'cp tests/languages/web/node.js tests/sdks/web/node.js',
'cp tests/languages/web/index.html tests/sdks/web/index.html',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy npm install', // npm list --depth 0 &&
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web mcr.microsoft.com/playwright:v1.46.0-jammy npm run build',
'cp -R tests/languages/web/* tests/sdks/web/',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web node:18-alpine npm install',
'docker run --rm -v $(pwd):/app -w /app/tests/sdks/web node:18-alpine npm run build',
];
protected string $command =
'docker run --network="mockapi" --rm -v $(pwd):/app -w /app/tests/sdks/web node:18-alpine node node.js';
Expand Down
147 changes: 147 additions & 0 deletions tests/languages/react-native/node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
const { readFile } = require('fs/promises');
const { Client, Foo, Bar, General, Query, Permission, Role, ID, MockType, Payload } = require('./dist/cjs/sdk.js');
const crypto = require('crypto');

async function start() {
let response;

console.log('\nTest Started');
const client = new Client();
const foo = new Foo(client);
const bar = new Bar(client);
const general = new General(client);
// Foo
response = await foo.get('string', 123, ['string in array']);
console.log(response.result);

response = await foo.post('string', 123, ['string in array']);
console.log(response.result);

response = await foo.put('string', 123, ['string in array']);
console.log(response.result);

response = await foo.patch('string', 123, ['string in array']);
console.log(response.result);

response = await foo.delete('string', 123, ['string in array']);
console.log(response.result);

// Bar
response = await bar.get('string', 123, ['string in array']);
console.log(response.result);

response = await bar.post('string', 123, ['string in array']);
console.log(response.result);

response = await bar.put('string', 123, ['string in array']);
console.log(response.result);

response = await bar.patch('string', 123, ['string in array']);
console.log(response.result);

response = await bar.delete('string', 123, ['string in array']);
console.log(response.result);

// General
response = await general.redirect();
console.log(response.result);

const smallBuffer = await readFile('../../resources/file.png');
const largeBuffer = await readFile('../../resources/large_file.mp4')

response = await general.upload('string', 123, ['string in array'], Payload.fromBinary(smallBuffer, 'file.png'))
console.log(response.result);

response = await general.upload('string', 123, ['string in array'], Payload.fromBinary(largeBuffer, 'large_file.mp4'))
console.log(response.result);

console.log("POST:/v1/mock/tests/general/upload:passed"); // Skip tests
console.log("POST:/v1/mock/tests/general/upload:passed"); // Skip tests

response = await general.enum(MockType.First);
console.log(response.result);

try {
response = await general.empty();
} catch (error) {
console.log(error);
}
try {
response = await general.error400();
} catch(error) {
console.log(error.message);
}
try {
response = await general.error500();
} catch(error) {
console.log(error.message);
}
try {
response = await general.error502();
} catch (error) {
console.log(error.message);
}

console.log('WS:/v1/realtime:passed'); // Skip realtime test on Node.js

// Multipart tests
response = await general.multipart();
console.log(response.x);

const binary = await response['responseBody'].toBinary();
console.log(crypto.createHash('md5').update(Buffer.from(binary)).digest("hex"));

// Query helper tests
console.log(Query.equal("released", [true]));
console.log(Query.equal("title", ["Spiderman", "Dr. Strange"]));
console.log(Query.notEqual("title", "Spiderman"));
console.log(Query.lessThan("releasedYear", 1990));
console.log(Query.greaterThan("releasedYear", 1990));
console.log(Query.search("name", "john"));
console.log(Query.isNull("name"));
console.log(Query.isNotNull("name"));
console.log(Query.between("age", 50, 100));
console.log(Query.between("age", 50.5, 100.5));
console.log(Query.between("name", "Anna", "Brad"));
console.log(Query.startsWith("name", "Ann"));
console.log(Query.endsWith("name", "nne"));
console.log(Query.select(["name", "age"]));
console.log(Query.orderAsc("title"));
console.log(Query.orderDesc("title"));
console.log(Query.cursorAfter("my_movie_id"));
console.log(Query.cursorBefore("my_movie_id"));
console.log(Query.limit(50));
console.log(Query.offset(20));
console.log(Query.contains("title", "Spider"));
console.log(Query.contains("labels", "first"));
console.log(Query.or([
Query.equal("released", true),
Query.lessThan("releasedYear", 1990)
]));
console.log(Query.and([
Query.equal("released", false),
Query.greaterThan("releasedYear", 2015)
]));

// Permission & Role helper tests
console.log(Permission.read(Role.any()));
console.log(Permission.write(Role.user(ID.custom('userid'))));
console.log(Permission.create(Role.users()));
console.log(Permission.update(Role.guests()));
console.log(Permission.delete(Role.team('teamId', 'owner')));
console.log(Permission.delete(Role.team('teamId')));
console.log(Permission.create(Role.member('memberId')));
console.log(Permission.update(Role.users('verified')));
console.log(Permission.update(Role.user(ID.custom('userid'), 'unverified')));
console.log(Permission.create(Role.label('admin')));


// ID helper tests
console.log(ID.unique());
console.log(ID.custom('custom_id'));

response = await general.headers();
console.log(response.result);
}

start();
Loading