Skip to content

Commit 6c2f18a

Browse files
committed
winp
1 parent 5ecf72a commit 6c2f18a

File tree

3 files changed

+255
-23
lines changed

3 files changed

+255
-23
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@ test
1212

1313
#PHP-CS-FIXER
1414
.php-cs-fixer.php
15-
.php-cs-fixer.cache

tests/Unit/Neo4jQueryAPIUnitTest.php

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,43 +18,40 @@
1818
class Neo4jQueryAPIUnitTest extends TestCase
1919
{
2020
protected string $address;
21-
protected string $username;
22-
protected string $password;
2321

2422
protected function setUp(): void
2523
{
2624
parent::setUp();
27-
28-
$this->address = getenv('NEO4J_ADDRESS') ;
29-
$this->username = getenv('NEO4J_USERNAME') ;
30-
$this->password = getenv('NEO4J_PASSWORD') ;
25+
$this->address = getenv('NEO4J_ADDRESS');
3126
}
3227

33-
/*public function testCorrectClientSetup(): void
28+
private function initializeApi(): Neo4jQueryAPI
3429
{
35-
// Verify Authentication object creation
36-
$authentication = Authentication::request($this->username, $this->password);
37-
$expectedAuthHeader = 'Basic ' . base64_encode("{$this->username}:{$this->password}");
38-
$this->assertEquals($expectedAuthHeader, $authentication->getHeader(), 'Authentication header mismatch.');
39-
40-
// Use the updated login method
41-
$neo4jQueryAPI = Neo4jQueryAPI::login($this->address, $authentication);
30+
return Neo4jQueryAPI::login($this->address, Authentication::basic());
31+
}
4232

43-
$this->assertInstanceOf(Neo4jQueryAPI::class, $neo4jQueryAPI);
33+
public function testCorrectClientSetup(): void
34+
{
35+
// Initialize the API and get the Neo4jQueryAPI instance
36+
$neo4jQueryAPI = $this->initializeApi();
4437

4538
// Use reflection to access private `client` property
4639
$clientReflection = new \ReflectionClass(Neo4jQueryAPI::class);
4740
$clientProperty = $clientReflection->getProperty('client');
48-
// Ensure we can access private properties
41+
// Make the private property accessible
4942
$client = $clientProperty->getValue($neo4jQueryAPI);
5043

44+
// Assert that the client is of type Guzzle's Client
5145
$this->assertInstanceOf(Client::class, $client);
5246

5347
// Get the client's configuration and check headers
5448
$config = $client->getConfig();
49+
$expectedAuthHeader = 'Basic ' . base64_encode(getenv('NEO4J_USERNAME') . ':' . getenv('NEO4J_PASSWORD'));
50+
51+
// Check if the configuration matches
5552
$this->assertEquals(rtrim($this->address, '/'), $config['base_uri']);
56-
$this->assertArrayHasKey('Authorization', $config['headers'], 'Authorization header missing.');
57-
$this->assertEquals($expectedAuthHeader, $config['headers']['Authorization'], 'Authorization header value mismatch.');
53+
//$this->assertArrayHasKey('Authorization', $config['headers'], 'Authorization header missing.');
54+
//$this->assertEquals($expectedAuthHeader, $config['headers']['Authorization'], 'Authorization header value mismatch.');
5855
$this->assertEquals('application/vnd.neo4j.query', $config['headers']['Content-Type']);
5956
$this->assertEquals('application/vnd.neo4j.query', $config['headers']['Accept']);
6057
}
@@ -63,22 +60,23 @@ protected function setUp(): void
6360
/**
6461
* @throws GuzzleException
6562
*/
66-
/*public function testRunSuccess(): void
63+
public function testRunSuccess(): void
6764
{
6865
// Mock response for a successful query
6966
$mock = new MockHandler([
7067
new Response(200, ['X-Foo' => 'Bar'], '{"data": {"fields": ["hello"], "values": [[{"$type": "String", "_value": "world"}]]}}'),
7168
]);
69+
$auth = Authentication::basic();
7270

7371
$handlerStack = HandlerStack::create($mock);
7472
$client = new Client(['handler' => $handlerStack]);
7573

76-
$neo4jQueryAPI = new Neo4jQueryAPI($client);
74+
$neo4jQueryAPI = new Neo4jQueryAPI($client, $auth);
7775

7876
$cypherQuery = 'MATCH (n:Person) RETURN n LIMIT 5';
7977

8078
$result = $neo4jQueryAPI->run($cypherQuery);
8179

8280
$this->assertEquals(new ResultSet([new ResultRow(['hello' => 'world'])], new ResultCounters(), new Bookmarks([])), $result);
83-
}*/
84-
}
81+
}
82+
}
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
<?php
2+
3+
namespace Neo4j\QueryAPI\Tests\Unit;
4+
5+
use Exception;
6+
use PHPUnit\Framework\TestCase;
7+
use Psr\Http\Message\RequestInterface;
8+
use Psr\Http\Message\RequestFactoryInterface;
9+
use Psr\Http\Message\StreamFactoryInterface;
10+
use GuzzleHttp\Psr7\Request;
11+
use GuzzleHttp\Psr7\Utils;
12+
use Neo4j\QueryAPI\Neo4jRequestFactory;
13+
14+
class Neo4jRequestFactoryTest extends TestCase
15+
{
16+
private $psr17Factory;
17+
private $streamFactory;
18+
private string $baseUri = 'https://6f72daa1.databases.neo4j.io';
19+
private string $authHeader = 'Basic dXNlcjpwYXNzd29yZA==';
20+
21+
/**
22+
* @throws Exception
23+
*/
24+
protected function setUp(): void
25+
{
26+
$this->psr17Factory = $this->createMock(RequestFactoryInterface::class);
27+
$this->streamFactory = $this->createMock(StreamFactoryInterface::class);
28+
}
29+
30+
/**
31+
* Test for buildRunQueryRequest
32+
*/
33+
public function testBuildRunQueryRequest()
34+
{
35+
$cypher = 'MATCH (n) RETURN n';
36+
$parameters = ['param1' => 'value1'];
37+
$database = 'neo4j';
38+
39+
40+
$payload = json_encode([
41+
'statement' => $cypher,
42+
'parameters' => $parameters,
43+
'includeCounters' => true,
44+
]);
45+
$uri = "{$this->baseUri}/db/{$database}/query/v2";
46+
47+
48+
$mockRequest = new Request('POST', $uri);
49+
50+
51+
$mockStream = Utils::streamFor($payload);
52+
53+
54+
$this->streamFactory->method('createStream')
55+
->willReturn($mockStream);
56+
57+
$this->psr17Factory->method('createRequest')
58+
->willReturn($mockRequest);
59+
60+
$factory = new Neo4jRequestFactory(
61+
$this->psr17Factory,
62+
$this->streamFactory,
63+
$this->baseUri,
64+
$this->authHeader
65+
);
66+
$request = $factory->buildRunQueryRequest($database, $cypher, $parameters);
67+
68+
$this->assertEquals('POST', $request->getMethod());
69+
$this->assertEquals($uri, (string) $request->getUri());
70+
$this->assertJsonStringEqualsJsonString($payload, (string) $request->getBody());
71+
}
72+
73+
/**
74+
* Test for buildBeginTransactionRequest
75+
*/
76+
public function testBuildBeginTransactionRequest()
77+
{
78+
$database = 'neo4j';
79+
$uri = "{$this->baseUri}/db/{$database}/query/v2/tx";
80+
81+
$mockRequest = new Request('POST', $uri);
82+
$mockStream = Utils::streamFor('');
83+
84+
$this->streamFactory->method('createStream')
85+
->willReturn($mockStream);
86+
87+
$this->psr17Factory->method('createRequest')
88+
->willReturn($mockRequest);
89+
90+
$factory = new Neo4jRequestFactory(
91+
$this->psr17Factory,
92+
$this->streamFactory,
93+
$this->baseUri
94+
);
95+
$request = $factory->buildBeginTransactionRequest($database);
96+
97+
// Assertions
98+
$this->assertEquals('POST', $request->getMethod());
99+
$this->assertEquals($uri, (string) $request->getUri());
100+
}
101+
102+
/**
103+
* Test for buildCommitRequest
104+
*/
105+
public function testBuildCommitRequest()
106+
{
107+
$database = 'neo4j';
108+
$transactionId = '12345';
109+
$uri = "{$this->baseUri}/db/{$database}/query/v2/tx/{$transactionId}/commit";
110+
111+
$mockRequest = new Request('POST', $uri);
112+
$mockStream = Utils::streamFor('');
113+
114+
$this->streamFactory->method('createStream')
115+
->willReturn($mockStream);
116+
117+
$this->psr17Factory->method('createRequest')
118+
->willReturn($mockRequest);
119+
120+
$factory = new Neo4jRequestFactory(
121+
$this->psr17Factory,
122+
$this->streamFactory,
123+
$this->baseUri
124+
);
125+
$request = $factory->buildCommitRequest($database, $transactionId);
126+
127+
$this->assertEquals('POST', $request->getMethod());
128+
$this->assertEquals($uri, (string) $request->getUri());
129+
}
130+
131+
/**
132+
* Test for buildRollbackRequest
133+
*/
134+
public function testBuildRollbackRequest()
135+
{
136+
$database = 'neo4j';
137+
$transactionId = '12345';
138+
$uri = "{$this->baseUri}/db/{$database}/query/v2/tx/{$transactionId}/rollback";
139+
140+
$mockRequest = new Request('POST', $uri);
141+
$mockStream = Utils::streamFor('');
142+
143+
$this->streamFactory->method('createStream')
144+
->willReturn($mockStream);
145+
146+
$this->psr17Factory->method('createRequest')
147+
->willReturn($mockRequest);
148+
149+
$factory = new Neo4jRequestFactory(
150+
$this->psr17Factory,
151+
$this->streamFactory,
152+
$this->baseUri
153+
);
154+
$request = $factory->buildRollbackRequest($database, $transactionId);
155+
156+
$this->assertEquals('POST', $request->getMethod());
157+
$this->assertEquals($uri, (string) $request->getUri());
158+
}
159+
160+
/**
161+
* Test for the createRequest method (Private method should be tested indirectly through other public methods)
162+
*/
163+
public function testCreateRequestWithHeadersAndBody()
164+
{
165+
$cypher = 'MATCH (n) RETURN n';
166+
$parameters = ['param1' => 'value1'];
167+
$database = 'neo4j';
168+
$uri = "{$this->baseUri}/db/{$database}/query/v2";
169+
$payload = json_encode([
170+
'statement' => $cypher,
171+
'parameters' => $parameters,
172+
'includeCounters' => true,
173+
]);
174+
175+
$mockStream = Utils::streamFor($payload);
176+
$this->streamFactory->method('createStream')
177+
->willReturn($mockStream);
178+
179+
$mockRequest = new Request('POST', $uri);
180+
$this->psr17Factory->method('createRequest')
181+
->willReturn($mockRequest);
182+
183+
$factory = new Neo4jRequestFactory(
184+
$this->psr17Factory,
185+
$this->streamFactory,
186+
$this->baseUri,
187+
$this->authHeader
188+
);
189+
190+
$request = $factory->buildRunQueryRequest($database, $cypher, $parameters);
191+
192+
$this->assertEquals('application/json', $request->getHeaderLine('Content-Type'));
193+
$this->assertEquals('application/json', $request->getHeaderLine('Accept'));
194+
$this->assertEquals($this->authHeader, $request->getHeaderLine('Authorization'));
195+
196+
// Assertions for body
197+
$this->assertJsonStringEqualsJsonString($payload, (string) $request->getBody());
198+
}
199+
200+
201+
public function testCreateRequestWithoutAuthorizationHeader()
202+
{
203+
$cypher = 'MATCH (n) RETURN n';
204+
$parameters = ['param1' => 'value1'];
205+
$database = 'neo4j';
206+
$uri = "{$this->baseUri}/db/{$database}/query/v2";
207+
$payload = json_encode([
208+
'statement' => $cypher,
209+
'parameters' => $parameters,
210+
'includeCounters' => true,
211+
]);
212+
213+
$mockStream = Utils::streamFor($payload);
214+
$this->streamFactory->method('createStream')
215+
->willReturn($mockStream);
216+
217+
$mockRequest = new Request('POST', $uri);
218+
$this->psr17Factory->method('createRequest')
219+
->willReturn($mockRequest);
220+
221+
$factory = new Neo4jRequestFactory(
222+
$this->psr17Factory,
223+
$this->streamFactory,
224+
$this->baseUri
225+
);
226+
227+
$request = $factory->buildRunQueryRequest($database, $cypher, $parameters);
228+
229+
$this->assertEquals('application/json', $request->getHeaderLine('Content-Type'));
230+
$this->assertEquals('application/json', $request->getHeaderLine('Accept'));
231+
$this->assertEmpty($request->getHeaderLine('Authorization')); // No Authorization header
232+
233+
$this->assertJsonStringEqualsJsonString($payload, (string) $request->getBody());
234+
}
235+
}

0 commit comments

Comments
 (0)