getProject()['$id']; $query = $this->getQuery(self::$CREATE_DATABASE); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => ID::unique(), 'name' => 'Actors', ] ]; $database = $this->client->call(Client::METHOD_POST, '/graphql', [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $this->getProject()['apiKey'], ], $gqlPayload); $this->assertIsArray($database['body']['data']); $this->assertArrayNotHasKey('errors', $database['body']); $database = $database['body']['data']['databasesCreate']; $this->assertEquals('Actors', $database['name']); return $database; } /** * @depends testCreateDatabase */ public function testCreateTable($database): array { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$CREATE_TABLE); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $database['_id'], 'tableId' => 'actors', 'name' => 'Actors', 'rowSecurity' => false, 'permissions' => [ Permission::read(Role::any()), Permission::create(Role::users()), Permission::update(Role::users()), Permission::delete(Role::users()), ], ] ]; $table = $this->client->call(Client::METHOD_POST, '/graphql', [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $this->getProject()['apiKey'], ], $gqlPayload); $this->assertIsArray($table['body']['data']); $this->assertArrayNotHasKey('errors', $table['body']); $table = $table['body']['data']['databasesCreateTable']; $this->assertEquals('Actors', $table['name']); return [ 'table' => $table, 'database' => $database, ]; } /** * @depends testCreateTable */ public function testCreateStringColumn($data): array { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$CREATE_STRING_COLUMN); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'key' => 'name', 'size' => 256, 'required' => true, ] ]; $column = $this->client->call(Client::METHOD_POST, '/graphql', [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $this->getProject()['apiKey'], ], $gqlPayload); $this->assertArrayNotHasKey('errors', $column['body']); $this->assertIsArray($column['body']['data']); $this->assertIsArray($column['body']['data']['tablesCreateStringColumn']); return $data; } /** * @depends testCreateTable */ public function testCreateIntegerColumn($data): array { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$CREATE_INTEGER_COLUMN); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'key' => 'age', 'min' => 18, 'max' => 150, 'required' => true, ] ]; $column = $this->client->call(Client::METHOD_POST, '/graphql', [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $this->getProject()['apiKey'], ], $gqlPayload); $this->assertArrayNotHasKey('errors', $column['body']); $this->assertIsArray($column['body']['data']); $this->assertIsArray($column['body']['data']['tablesCreateIntegerColumn']); return $data; } /** * @depends testCreateStringColumn * @depends testCreateIntegerColumn */ public function testCreateRow($data): array { sleep(1); $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$CREATE_ROW); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'rowId' => ID::unique(), 'data' => [ 'name' => 'John Doe', 'age' => 35, ], 'permissions' => [ Permission::read(Role::any()), Permission::update(Role::any()), Permission::delete(Role::any()), ], ] ]; $row = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); $this->assertArrayNotHasKey('errors', $row['body']); $this->assertIsArray($row['body']['data']); $row = $row['body']['data']['tablesCreateRow']; $this->assertIsArray($row); return [ 'database' => $data['database'], 'table' => $data['table'], 'row' => $row, ]; } /** * @depends testCreateTable * @throws \Exception */ public function testGetRows($data): void { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$GET_ROWS); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], ] ]; $rows = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); $this->assertArrayNotHasKey('errors', $rows['body']); $this->assertIsArray($rows['body']['data']); $this->assertIsArray($rows['body']['data']['tablesListRows']); } /** * @depends testCreateRow * @throws \Exception */ public function testGetDocument($data): void { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$GET_ROW); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'rowId' => $data['row']['_id'], ] ]; $row = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); $this->assertArrayNotHasKey('errors', $row['body']); $this->assertIsArray($row['body']['data']); $this->assertIsArray($row['body']['data']['tablesGetRow']); } /** * @depends testCreateRow * @throws \Exception */ public function testUpdateRow($data): void { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$UPDATE_ROW); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'rowId' => $data['row']['_id'], 'data' => [ 'name' => 'New Row Name', ], ] ]; $row = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); $this->assertArrayNotHasKey('errors', $row['body']); $this->assertIsArray($row['body']['data']); $row = $row['body']['data']['tablesUpdateRow']; $this->assertIsArray($row); $this->assertStringContainsString('New Row Name', $row['data']); } /** * @depends testCreateRow * @throws \Exception */ public function testDeleteRow($data): void { $projectId = $this->getProject()['$id']; $query = $this->getQuery(self::$DELETE_ROW); $gqlPayload = [ 'query' => $query, 'variables' => [ 'databaseId' => $data['database']['_id'], 'tableId' => $data['table']['_id'], 'rowId' => $data['row']['_id'], ] ]; $row = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); $this->assertIsNotArray($row['body']); $this->assertEquals(204, $row['headers']['status-code']); } }