Skip to content

Commit b8e4734

Browse files
committed
enum is applied for accessmodes
1 parent 7fc986e commit b8e4734

File tree

4 files changed

+36
-16
lines changed

4 files changed

+36
-16
lines changed

src/Enums/AccessMode.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
namespace src\Enums;
4+
5+
enum AccessMode: string
6+
{
7+
case READ = 'READ';
8+
case WRITE = 'WRITE';
9+
}

src/Neo4jQueryAPI.php

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use RuntimeException;
1919
use stdClass;
2020
use Neo4j\QueryAPI\Objects\Bookmarks;
21+
use src\Enums\AccessMode;
2122

2223
class Neo4jQueryAPI
2324
{
@@ -53,19 +54,18 @@ public static function login(string $address, string $username, string $password
5354
* @throws RequestExceptionInterface
5455
* @api
5556
*/
56-
public function run(string $cypher, array $parameters = [], string $database = 'neo4j', Bookmarks $bookmark = null, ?string $impersonatedUser = null, string $accessMode = 'WRITE' ): ResultSet
57+
public function run(string $cypher, array $parameters = [], string $database = 'neo4j', Bookmarks $bookmark = null, ?string $impersonatedUser = null, AccessMode $accessMode = AccessMode::WRITE ): ResultSet
5758
{
5859
$validAccessModes = ['READ', 'WRITE', 'ROUTE'];
59-
if (!in_array(strtoupper($accessMode), $validAccessModes, true)) {
60-
throw new InvalidArgumentException("Invalid access mode: $accessMode. Allowed values are 'READ', 'WRITE', or 'ROUTE'.");
61-
}
60+
6261
try {
6362
$payload = [
6463
'statement' => $cypher,
6564
'parameters' => empty($parameters) ? new stdClass() : $parameters,
6665
'includeCounters' => true,
67-
'routing' => strtoupper($accessMode)
66+
'accessMode' => $accessMode->value,
6867
];
68+
6969
error_log("Request Payload: " . json_encode($payload));
7070

7171
if ($bookmark !== null) {
@@ -74,8 +74,12 @@ public function run(string $cypher, array $parameters = [], string $database = '
7474
if ($impersonatedUser !== null) {
7575
$payload['impersonatedUser'] = $impersonatedUser;
7676
}
77-
78-
//
77+
if ($accessMode) {
78+
$payload['accessMode'] = $accessMode->value;
79+
}
80+
if (!in_array($accessMode, AccessMode::cases(), true)) {
81+
throw new RuntimeException("Invalid AccessMode: " . print_r($accessMode, true));
82+
}
7983

8084

8185
$response = $this->client->post('/db/' . $database . '/query/v2', [
@@ -126,7 +130,8 @@ public function run(string $cypher, array $parameters = [], string $database = '
126130
$rows,
127131
$resultCounters,
128132
new Bookmarks($data['bookmarks'] ?? []),
129-
$profile
133+
$profile,
134+
$accessMode
130135
);
131136
} catch (RequestExceptionInterface $e) {
132137
error_log("Request Exception: " . $e->getMessage());

src/Results/ResultSet.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Neo4j\QueryAPI\Objects\ResultCounters;
1010
use Neo4j\QueryAPI\Objects\Bookmarks;
1111
use Traversable;
12+
use src\Enums\AccessMode;
1213

1314
/**
1415
* @api
@@ -25,7 +26,8 @@ public function __construct(
2526
private readonly array $rows,
2627
private ResultCounters $counters,
2728
private Bookmarks $bookmarks,
28-
private ?ProfiledQueryPlan $profiledQueryPlan = null
29+
private ?ProfiledQueryPlan $profiledQueryPlan = null,
30+
private ?AccessMode $accessMode= null
2931
)
3032
{
3133

@@ -77,10 +79,9 @@ public function getBookmarks(): ?Bookmarks
7779
* @api
7880
*/
7981

80-
public function testAccessMode()
82+
public function getAccessMode(): ?AccessMode
8183
{
82-
$resultSet = new ResultSet([], null, 'WRITE');
83-
$this->assertEquals('WRITE', $resultSet->getAccessMode());
84+
return $this->accessMode;
8485
}
8586

8687

tests/Integration/Neo4jQueryAPIIntegrationTest.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Neo4j\QueryAPI\Transaction;
1616
use Psr\Http\Message\ResponseInterface;
17+
use src\Enums\AccessMode;
1718

1819
class Neo4jQueryAPIIntegrationTest extends TestCase
1920
{
@@ -230,12 +231,16 @@ public function testImpersonatedUserFailure(): void
230231

231232
//
232233

233-
public function testRunWithDefaultAccessMode(): void
234+
public function testRunWithWriteAccessMode(): void
234235
{
235-
$result = $this->api->run("MATCH (n) RETURN COUNT(n)");
236+
$result = $this->api->run(
237+
"CREATE (n:Person {name: 'Alice'}) RETURN n",
238+
[],
239+
null,
240+
AccessMode::WRITE // why its considered as bookmark
241+
);
236242

237-
$this->assertInstanceOf(ResultSet::class, $result);
238-
// Default mode is WRITE;
243+
$this->assertNotEmpty($result->getData());
239244
}
240245

241246
public function testRunWithAccessMode(): void

0 commit comments

Comments
 (0)