diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index a646f000fe..9e1cd6c558 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -134,6 +134,34 @@ App::get('/v1/storage/buckets') ]), Response::MODEL_BUCKET_LIST); }); +App::get('/v1/storage/buckets/:bucketId') + ->desc('Get Bucket') + ->groups(['api', 'storage']) + ->label('scope', 'buckets.read') + ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) + ->label('sdk.namespace', 'storage') + ->label('sdk.method', 'getBucket') + ->label('sdk.description', '/docs/references/storage/get-bucket.md') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) + ->label('sdk.response.model', Response::MODEL_BUCKET) + ->param('bucketId', '', new UID(), 'Bucket unique ID.') + ->inject('response') + ->inject('projectDB') + ->action(function ($bucketId, $response, $projectDB) { + /** @var Appwrite\Utopia\Response $response */ + /** @var Appwrite\Database\Database $projectDB */ + + $bucket = $projectDB->getDocument($bucketId); + + if (empty($bucket->getId()) || Database::SYSTEM_COLLECTION_BUCKETS != $bucket->getCollection()) { + throw new Exception('Bucket not found', 404); + } + + $response->dynamic($bucket, Response::MODEL_BUCKET); + }); + + App::post('/v1/storage/files') ->desc('Create File') ->groups(['api', 'storage']) diff --git a/tests/e2e/Services/Storage/StorageBase.php b/tests/e2e/Services/Storage/StorageBase.php index a20721e22d..bdd277752a 100644 --- a/tests/e2e/Services/Storage/StorageBase.php +++ b/tests/e2e/Services/Storage/StorageBase.php @@ -297,4 +297,44 @@ trait StorageBase return $data; } + + /** + * @depends testCreateBucket + */ + public function testGetBucket($data): array + { + $id = $data['bucketId'] ?? ''; + /** + * Test for SUCCESS + */ + $response = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $id, + array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertNotEmpty($response['body']); + $this->assertEquals($id, $response['body']['$id']); + $this->assertEquals('Test Bucket', $response['body']['name']); + + /** + * Test for FAILURE + */ + + $response = $this->client->call(Client::METHOD_GET, '/storage/buckets/empty', + array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + $this->assertEquals(404, $response['headers']['status-code']); + + $response = $this->client->call(Client::METHOD_GET, '/storage/buckets/id-is-really-long-id-is-really-long-id-is-really-long-id-is-really-long', + array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + $this->assertEquals(400, $response['headers']['status-code']); + + return $data; + } } \ No newline at end of file