1
0
Fork 0
mirror of synced 2024-06-03 03:14:50 +12:00
appwrite/tests/e2e/General/HTTPTest.php

194 lines
7 KiB
PHP
Raw Normal View History

2020-07-08 09:14:40 +12:00
<?php
2020-12-27 01:10:14 +13:00
namespace Tests\E2E\General;
2020-07-08 09:14:40 +12:00
2022-02-13 22:12:16 +13:00
use Appwrite\Extend\Exception;
2020-07-08 09:14:40 +12:00
use Tests\E2E\Client;
use Tests\E2E\Scopes\ProjectNone;
use Tests\E2E\Scopes\Scope;
use Tests\E2E\Scopes\SideNone;
class HTTPTest extends Scope
{
use ProjectNone;
use SideNone;
public function testOptions()
{
/**
* Test for SUCCESS
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_OPTIONS, '/', \array_merge([
2020-07-08 09:14:40 +12:00
'origin' => 'http://localhost',
'content-type' => 'application/json',
]), []);
2021-02-03 00:27:12 +13:00
$this->assertEquals(204, $response['headers']['status-code']);
2020-07-08 09:14:40 +12:00
$this->assertEquals('Appwrite', $response['headers']['server']);
$this->assertEquals('GET, POST, PUT, PATCH, DELETE', $response['headers']['access-control-allow-methods']);
$this->assertEquals('Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-Appwrite-ID, Content-Range, Range, Cache-Control, Expires, Pragma, X-Fallback-Cookies', $response['headers']['access-control-allow-headers']);
2020-07-08 09:14:40 +12:00
$this->assertEquals('X-Fallback-Cookies', $response['headers']['access-control-expose-headers']);
$this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']);
$this->assertEquals('true', $response['headers']['access-control-allow-credentials']);
$this->assertEmpty($response['body']);
}
public function testError()
{
/**
* Test for SUCCESS
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_GET, '/error', \array_merge([
2020-07-08 09:14:40 +12:00
'origin' => 'http://localhost',
'content-type' => 'application/json',
]), []);
$this->assertEquals(404, $response['headers']['status-code']);
$this->assertEquals('Not Found', $response['body']['message']);
2022-02-13 22:12:16 +13:00
$this->assertEquals(Exception::GENERAL_ROUTE_NOT_FOUND, $response['body']['type']);
2020-07-08 09:14:40 +12:00
$this->assertEquals(404, $response['body']['code']);
$this->assertEquals('dev', $response['body']['version']);
}
2020-10-30 10:15:45 +13:00
public function testManifest()
{
/**
* Test for SUCCESS
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_GET, '/manifest.json', \array_merge([
2020-10-30 10:15:45 +13:00
'origin' => 'http://localhost',
'content-type' => 'application/json',
]), []);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals('Appwrite', $response['body']['name']);
$this->assertEquals('Appwrite', $response['body']['short_name']);
$this->assertEquals('.', $response['body']['start_url']);
$this->assertEquals('.', $response['body']['start_url']);
$this->assertEquals('https://appwrite.io/', $response['body']['url']);
$this->assertEquals('standalone', $response['body']['display']);
}
public function testHumans()
{
/**
* Test for SUCCESS
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_GET, '/humans.txt', \array_merge([
2020-10-30 10:15:45 +13:00
'origin' => 'http://localhost',
]), []);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertStringContainsString('# humanstxt.org/', $response['body']);
}
public function testRobots()
{
/**
* Test for SUCCESS
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_GET, '/robots.txt', \array_merge([
2020-10-30 10:15:45 +13:00
'origin' => 'http://localhost',
]), []);
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertStringContainsString('# robotstxt.org/', $response['body']);
}
2020-11-12 11:03:27 +13:00
2022-02-01 04:04:30 +13:00
public function testAcmeChallenge()
{
// Preparation
2022-02-01 04:04:30 +13:00
$previousEndpoint = $this->client->getEndpoint();
$this->client->setEndpoint("http://localhost");
/**
* Test for SUCCESS
*/
$response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/8DdIKX257k6Dih5s_saeVMpTnjPJdKO5Ase0OCiJrIg', \array_merge([
'origin' => 'http://localhost',
]), []);
$this->assertEquals(404, $response['headers']['status-code']);
// 'Unknown path', but validation passed
2022-02-01 04:04:30 +13:00
/**
* Test for FAILURE
*/
$response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/../../../../../../../etc/passwd', \array_merge([
'origin' => 'http://localhost',
]), []);
$this->assertEquals(400, $response['headers']['status-code']);
// Cleanup
$this->client->setEndpoint($previousEndpoint);
2022-02-01 04:04:30 +13:00
}
2022-10-25 12:37:19 +13:00
public function testSpecs()
2020-11-15 02:05:18 +13:00
{
$directory = __DIR__ . '/../../../app/config/specs/';
2020-11-15 02:05:18 +13:00
$files = scandir($directory);
2020-11-15 02:05:18 +13:00
$client = new Client();
2021-07-27 04:10:08 +12:00
$client->setEndpoint('https://validator.swagger.io');
2020-11-15 02:05:18 +13:00
2022-10-25 12:37:19 +13:00
$versions = [
'latest',
'0.15.x',
'0.14.x',
];
2022-05-24 02:54:50 +12:00
foreach ($files as $file) {
if (in_array($file, ['.', '..'])) {
continue;
}
2022-10-25 12:37:19 +13:00
$allowed = false;
foreach ($versions as $version) {
if (\str_contains($file, $version)) {
$allowed = true;
break;
}
}
if (!$allowed) {
2022-01-02 01:27:52 +13:00
continue;
}
/**
* Test for SUCCESS
*/
$response = $client->call(Client::METHOD_POST, '/validator/debug', [
'content-type' => 'application/json',
2022-05-24 02:54:50 +12:00
], json_decode(file_get_contents($directory . $file), true));
$response['body'] = json_decode($response['body'], true);
$this->assertEquals(200, $response['headers']['status-code']);
2022-10-23 20:18:52 +13:00
// looks like recent change in the validator
$this->assertTrue(empty($response['body']['schemaValidationMessages']));
}
2020-11-15 02:05:18 +13:00
}
2022-05-24 02:54:50 +12:00
public function testVersions()
{
2021-02-25 07:31:43 +13:00
/**
* Test without header
*/
2022-01-03 05:08:27 +13:00
$response = $this->client->call(Client::METHOD_GET, '/versions', \array_merge([
2021-02-25 07:31:43 +13:00
'content-type' => 'application/json',
], $this->getHeaders()));
$body = $response['body'];
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertIsString($body['server']);
$this->assertIsString($body['client-web']);
$this->assertIsString($body['client-flutter']);
$this->assertIsString($body['console-web']);
$this->assertIsString($body['server-nodejs']);
$this->assertIsString($body['server-deno']);
$this->assertIsString($body['server-php']);
$this->assertIsString($body['server-python']);
$this->assertIsString($body['server-ruby']);
2022-02-26 15:01:02 +13:00
$this->assertIsString($body['console-cli']);
2021-02-25 07:31:43 +13:00
}
}