From 119d724a9f97043a4670ae95dc9ab54c7f227f7b Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Mon, 3 Mar 2025 18:18:40 +0530 Subject: [PATCH 1/7] cleaned up scattered config files and structure --- .env | 4 - .env.example | 4 + .gitignore | 4 +- .php-cs-fixer.php | 18 - clover.xml | 529 -------------------- cobertura.xml | 1169 ------------------------------------------- coverage.php | Bin 589467 -> 0 bytes crap4j.xml | 906 --------------------------------- docker-compose.yml | 5 +- phpunit.xml.bak | 22 - phpunitCoverage.xml | 25 +- 11 files changed, 17 insertions(+), 2669 deletions(-) delete mode 100644 .env create mode 100644 .env.example delete mode 100644 .php-cs-fixer.php delete mode 100644 clover.xml delete mode 100644 cobertura.xml delete mode 100644 coverage.php delete mode 100644 crap4j.xml delete mode 100644 phpunit.xml.bak diff --git a/.env b/.env deleted file mode 100644 index bb59562c..00000000 --- a/.env +++ /dev/null @@ -1,4 +0,0 @@ -# Database Configuration -NEO4J_ADDRESS=***REMOVED***/ -NEO4J_USERNAME=neo4j -NEO4J_PASSWORD=O***REMOVED*** diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..b8463456 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +# Database Configuration +NEO4J_ADDRESS=add your address here +NEO4J_USERNAME=add your username here +NEO4J_PASSWORD=add your password here diff --git a/.gitignore b/.gitignore index 6dd2a04a..896c23c1 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,6 @@ test coverage xml-coverage -composer.lock \ No newline at end of file +composer.lock + +.env \ No newline at end of file diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php deleted file mode 100644 index 28bf20e3..00000000 --- a/.php-cs-fixer.php +++ /dev/null @@ -1,18 +0,0 @@ -setRiskyAllowed(true) // Allow risky fixers - ->setRules([ - '@PSR12' => true, - 'strict_param' => true, // This is a risky rule - ]) - ->setFinder( - Finder::create() - ->in(__DIR__) - ->exclude([ - 'vendor', - ]) - ); diff --git a/clover.xml b/clover.xml deleted file mode 100644 index 815f7b0f..00000000 --- a/clover.xml +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cobertura.xml b/cobertura.xml deleted file mode 100644 index 7b3d6d47..00000000 --- a/cobertura.xml +++ /dev/null @@ -1,1169 +0,0 @@ - - - - - /home/pratiksha/dev/Neo4j-Client/src - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage.php b/coverage.php deleted file mode 100644 index 051fb1c0bb2c8ebb497ef48a877a99d45629f950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589467 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

0LHpvmega@#0ycr)sKMIZM#l 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 - - - 2025-03-03 08:46:42 - - Method Crap Stats - 81 - 0 - 0 - 154.05 - 0 - - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BasicAuthentication - __construct - __construct(?string $username, ?string $password) - __construct(?string $username, ?string $password) - 3 - 3 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BasicAuthentication - authenticate - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BasicAuthentication - getHeader - getHeader(): string - getHeader(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BasicAuthentication - getType - getType(): string - getType(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BearerAuthentication - __construct - __construct(string $token) - __construct(string $token) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BearerAuthentication - authenticate - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BearerAuthentication - getHeader - getHeader(): string - getHeader(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\BearerAuthentication - getType - getType(): string - getType(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\NoAuth - getHeader - getHeader(): string - getHeader(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\NoAuth - getType - getType(): string - getType(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Authentication - Neo4j\QueryAPI\Authentication\NoAuth - authenticate - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - authenticate(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Configuration - __construct - __construct(string $baseUri, string $database, bool $includeCounters, Neo4j\QueryAPI\Objects\Bookmarks $bookmarks, Neo4j\QueryAPI\Enums\AccessMode $accessMode) - __construct(string $baseUri, string $database, bool $includeCounters, Neo4j\QueryAPI\Objects\Bookmarks $bookmarks, Neo4j\QueryAPI\Enums\AccessMode $accessMode) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - __construct - __construct(array $errorDetails, int $statusCode, ?Throwable $previous) - __construct(array $errorDetails, int $statusCode, ?Throwable $previous) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - fromNeo4jResponse - fromNeo4jResponse(array $response, ?Throwable $exception): self - fromNeo4jResponse(array $response, ?Throwable $exception): self - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - getErrorCode - getErrorCode(): string - getErrorCode(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - getType - getType(): ?string - getType(): ?string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - getSubType - getSubType(): ?string - getSubType(): ?string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Exception - Neo4j\QueryAPI\Exception\Neo4jException - getName - getName(): ?string - getName(): ?string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - __construct - __construct(Psr\Http\Client\ClientInterface $client, Neo4j\QueryAPI\ResponseParser $responseParser, Neo4j\QueryAPI\Neo4jRequestFactory $requestFactory, Neo4j\QueryAPI\Configuration $config) - __construct(Psr\Http\Client\ClientInterface $client, Neo4j\QueryAPI\ResponseParser $responseParser, Neo4j\QueryAPI\Neo4jRequestFactory $requestFactory, Neo4j\QueryAPI\Configuration $config) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - login - login(string $address, ?Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth, ?Neo4j\QueryAPI\Configuration $config): self - login(string $address, ?Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth, ?Neo4j\QueryAPI\Configuration $config): self - 5 - 5 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - create - create(Neo4j\QueryAPI\Configuration $configuration, Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth): self - create(Neo4j\QueryAPI\Configuration $configuration, Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth): self - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - getConfig - getConfig(): Neo4j\QueryAPI\Configuration - getConfig(): Neo4j\QueryAPI\Configuration - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - run - run(string $cypher, array $parameters): Neo4j\QueryAPI\Results\ResultSet - run(string $cypher, array $parameters): Neo4j\QueryAPI\Results\ResultSet - 2.26 - 2 - 60 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - beginTransaction - beginTransaction(): Neo4j\QueryAPI\Transaction - beginTransaction(): Neo4j\QueryAPI\Transaction - 2.01 - 2 - 86.67 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jQueryAPI - handleRequestException - handleRequestException(Psr\Http\Client\RequestExceptionInterface $e): void - handleRequestException(Psr\Http\Client\RequestExceptionInterface $e): void - 12 - 3 - 0 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - __construct - __construct(Psr\Http\Message\RequestFactoryInterface $psr17Factory, Psr\Http\Message\StreamFactoryInterface $streamFactory, Neo4j\QueryAPI\Configuration $configuration, Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth) - __construct(Psr\Http\Message\RequestFactoryInterface $psr17Factory, Psr\Http\Message\StreamFactoryInterface $streamFactory, Neo4j\QueryAPI\Configuration $configuration, Neo4j\QueryAPI\Authentication\AuthenticateInterface $auth) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - buildRunQueryRequest - buildRunQueryRequest(string $cypher, array $parameters): Psr\Http\Message\RequestInterface - buildRunQueryRequest(string $cypher, array $parameters): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - buildBeginTransactionRequest - buildBeginTransactionRequest(): Psr\Http\Message\RequestInterface - buildBeginTransactionRequest(): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - buildCommitRequest - buildCommitRequest(string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - buildCommitRequest(string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - buildRollbackRequest - buildRollbackRequest(string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - buildRollbackRequest(string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - buildTransactionRunRequest - buildTransactionRunRequest(string $query, array $parameters, string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - buildTransactionRunRequest(string $query, array $parameters, string $transactionId, string $clusterAffinity): Psr\Http\Message\RequestInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Neo4jRequestFactory - createRequest - createRequest(string $uri, ?string $cypher, ?array $parameters): Psr\Http\Message\RequestInterface - createRequest(string $uri, ?string $cypher, ?array $parameters): Psr\Http\Message\RequestInterface - 8 - 8 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - map - map(array $data): mixed - map(array $data): mixed - 6.02 - 6 - 92.31 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - parsePoint - parsePoint(string $value): Neo4j\QueryAPI\Objects\Point - parsePoint(string $value): Neo4j\QueryAPI\Objects\Point - 3 - 3 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - mapNode - mapNode(array $nodeData): Neo4j\QueryAPI\Objects\Node - mapNode(array $nodeData): Neo4j\QueryAPI\Objects\Node - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - mapRelationship - mapRelationship(array $relationshipData): Neo4j\QueryAPI\Objects\Relationship - mapRelationship(array $relationshipData): Neo4j\QueryAPI\Objects\Relationship - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - parseWKT - parseWKT(string $wkt): Neo4j\QueryAPI\Objects\Point - parseWKT(string $wkt): Neo4j\QueryAPI\Objects\Point - 3 - 3 - 92.86 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - mapPath - mapPath(array $pathData): Neo4j\QueryAPI\Objects\Path - mapPath(array $pathData): Neo4j\QueryAPI\Objects\Path - 4 - 4 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\OGM - mapProperties - mapProperties(array $properties): array - mapProperties(array $properties): array - 7.29 - 7 - 81.82 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Authentication - basic - basic(string $username, string $password): Neo4j\QueryAPI\Authentication\AuthenticateInterface - basic(string $username, string $password): Neo4j\QueryAPI\Authentication\AuthenticateInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Authentication - fromEnvironment - fromEnvironment(): Neo4j\QueryAPI\Authentication\AuthenticateInterface - fromEnvironment(): Neo4j\QueryAPI\Authentication\AuthenticateInterface - 3 - 3 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Authentication - bearer - bearer(string $token): Neo4j\QueryAPI\Authentication\AuthenticateInterface - bearer(string $token): Neo4j\QueryAPI\Authentication\AuthenticateInterface - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Authentication - noAuth - noAuth(): Neo4j\QueryAPI\Authentication\NoAuth - noAuth(): Neo4j\QueryAPI\Authentication\NoAuth - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Bookmarks - __construct - __construct(array $bookmarks) - __construct(array $bookmarks) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Bookmarks - addBookmarks - addBookmarks(?Neo4j\QueryAPI\Objects\Bookmarks $newBookmarks): void - addBookmarks(?Neo4j\QueryAPI\Objects\Bookmarks $newBookmarks): void - 2 - 2 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Bookmarks - count - count(): int - count(): int - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Bookmarks - jsonSerialize - jsonSerialize(): array - jsonSerialize(): array - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Node - __construct - __construct(array $labels, array $properties) - __construct(array $labels, array $properties) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Node - toArray - toArray(): array - toArray(): array - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Path - __construct - __construct(array $nodes, array $relationships) - __construct(array $nodes, array $relationships) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Point - __construct - __construct(float $x, float $y, float|null $z, int $srid) - __construct(float $x, float $y, float|null $z, int $srid) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Point - __toString - __toString(): string - __toString(): string - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\ProfiledQueryPlan - __construct - __construct(Neo4j\QueryAPI\Objects\ProfiledQueryPlanArguments $arguments, int $dbHits, int $records, bool $hasPageCacheStats, int $pageCacheHits, int $pageCacheMisses, float $pageCacheHitRatio, int $time, string $operatorType, array $children, array $identifiers) - __construct(Neo4j\QueryAPI\Objects\ProfiledQueryPlanArguments $arguments, int $dbHits, int $records, bool $hasPageCacheStats, int $pageCacheHits, int $pageCacheMisses, float $pageCacheHitRatio, int $time, string $operatorType, array $children, array $identifiers) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\ProfiledQueryPlanArguments - __construct - __construct(?int $globalMemory, ?string $plannerImpl, ?int $memory, ?string $stringRepresentation, ?string $runtime, ?int $time, ?int $pageCacheMisses, ?int $pageCacheHits, ?string $runtimeImpl, ?int $version, ?int $dbHits, ?int $batchSize, ?string $details, ?string $plannerVersion, ?string $pipelineInfo, null|string|float $runtimeVersion, ?int $id, ?float $estimatedRows, ?string $planner, ?int $rows) - __construct(?int $globalMemory, ?string $plannerImpl, ?int $memory, ?string $stringRepresentation, ?string $runtime, ?int $time, ?int $pageCacheMisses, ?int $pageCacheHits, ?string $runtimeImpl, ?int $version, ?int $dbHits, ?int $batchSize, ?string $details, ?string $plannerVersion, ?string $pipelineInfo, null|string|float $runtimeVersion, ?int $id, ?float $estimatedRows, ?string $planner, ?int $rows) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\Relationship - __construct - __construct(string $type, array $properties) - __construct(string $type, array $properties) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Objects - Neo4j\QueryAPI\Objects\ResultCounters - __construct - __construct(bool $containsUpdates, int $nodesCreated, int $nodesDeleted, int $propertiesSet, int $relationshipsCreated, int $relationshipsDeleted, int $labelsAdded, int $labelsRemoved, int $indexesAdded, int $indexesRemoved, int $constraintsAdded, int $constraintsRemoved, bool $containsSystemUpdates, int $systemUpdates) - __construct(bool $containsUpdates, int $nodesCreated, int $nodesDeleted, int $propertiesSet, int $relationshipsCreated, int $relationshipsDeleted, int $labelsAdded, int $labelsRemoved, int $indexesAdded, int $indexesRemoved, int $constraintsAdded, int $constraintsRemoved, bool $containsSystemUpdates, int $systemUpdates) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - __construct - __construct(Neo4j\QueryAPI\OGM $ogm) - __construct(Neo4j\QueryAPI\OGM $ogm) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - parseRunQueryResponse - parseRunQueryResponse(Psr\Http\Message\ResponseInterface $response): Neo4j\QueryAPI\Results\ResultSet - parseRunQueryResponse(Psr\Http\Message\ResponseInterface $response): Neo4j\QueryAPI\Results\ResultSet - 2 - 2 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - validateAndDecodeResponse - validateAndDecodeResponse(Psr\Http\Message\ResponseInterface $response): array - validateAndDecodeResponse(Psr\Http\Message\ResponseInterface $response): array - 3 - 3 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - mapRows - mapRows(array $fields, array $values): array - mapRows(array $fields, array $values): array - 2 - 2 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - formatOGMOutput - formatOGMOutput(mixed $value): mixed - formatOGMOutput(mixed $value): mixed - 4 - 4 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - buildCounters - buildCounters(array $countersData): Neo4j\QueryAPI\Objects\ResultCounters - buildCounters(array $countersData): Neo4j\QueryAPI\Objects\ResultCounters - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - buildBookmarks - buildBookmarks(array $bookmarksData): Neo4j\QueryAPI\Objects\Bookmarks - buildBookmarks(array $bookmarksData): Neo4j\QueryAPI\Objects\Bookmarks - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - getAccessMode - getAccessMode(string $accessModeData): Neo4j\QueryAPI\Enums\AccessMode - getAccessMode(string $accessModeData): Neo4j\QueryAPI\Enums\AccessMode - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\ResponseParser - buildProfiledQueryPlan - buildProfiledQueryPlan(mixed $queryPlanData): ?Neo4j\QueryAPI\Objects\ProfiledQueryPlan - buildProfiledQueryPlan(mixed $queryPlanData): ?Neo4j\QueryAPI\Objects\ProfiledQueryPlan - 5 - 5 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - __construct - __construct(array $data) - __construct(array $data) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - offsetGet - offsetGet(mixed $offset): mixed - offsetGet(mixed $offset): mixed - 2 - 2 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - offsetExists - offsetExists($offset): bool - offsetExists($offset): bool - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - offsetSet - offsetSet($offset, $value): void - offsetSet($offset, $value): void - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - offsetUnset - offsetUnset($offset): void - offsetUnset($offset): void - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - get - get(string $row): mixed - get(string $row): mixed - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - count - count(): int - count(): int - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultRow - getIterator - getIterator(): Traversable - getIterator(): Traversable - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultSet - __construct - __construct(array $rows, Neo4j\QueryAPI\Objects\Bookmarks $bookmarks, Neo4j\QueryAPI\Enums\AccessMode $accessMode, ?Neo4j\QueryAPI\Objects\ResultCounters $counters, ?Neo4j\QueryAPI\Objects\ProfiledQueryPlan $profiledQueryPlan) - __construct(array $rows, Neo4j\QueryAPI\Objects\Bookmarks $bookmarks, Neo4j\QueryAPI\Enums\AccessMode $accessMode, ?Neo4j\QueryAPI\Objects\ResultCounters $counters, ?Neo4j\QueryAPI\Objects\ProfiledQueryPlan $profiledQueryPlan) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultSet - getIterator - getIterator(): Traversable - getIterator(): Traversable - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI\Results - Neo4j\QueryAPI\Results\ResultSet - count - count(): int - count(): int - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Transaction - __construct - __construct(Psr\Http\Client\ClientInterface $client, Neo4j\QueryAPI\ResponseParser $responseParser, Neo4j\QueryAPI\Neo4jRequestFactory $requestFactory, string $clusterAffinity, string $transactionId) - __construct(Psr\Http\Client\ClientInterface $client, Neo4j\QueryAPI\ResponseParser $responseParser, Neo4j\QueryAPI\Neo4jRequestFactory $requestFactory, string $clusterAffinity, string $transactionId) - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Transaction - run - run(string $query, array $parameters): Neo4j\QueryAPI\Results\ResultSet - run(string $query, array $parameters): Neo4j\QueryAPI\Results\ResultSet - 3.47 - 3 - 62.5 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Transaction - commit - commit(): void - commit(): void - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Transaction - rollback - rollback(): void - rollback(): void - 1 - 1 - 100 - 0 - - - Neo4j\QueryAPI - Neo4j\QueryAPI\Transaction - handleRequestException - handleRequestException(Psr\Http\Client\RequestExceptionInterface $e): void - handleRequestException(Psr\Http\Client\RequestExceptionInterface $e): void - 12 - 3 - 0 - 0 - - - diff --git a/docker-compose.yml b/docker-compose.yml index e8668607..a83361f1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,8 +8,9 @@ services: volumes: - .:/var/www environment: - - FAIL_ON_DEPRECATION=1 - - FAIL_ON_PHPUNIT_DEPRECATION=1 + - NEO4J_ADDRESS=${NEO4J_ADDRESS-http://localhost:7474} + - NEO4J_USERNAME=${NEO4J_USERNAME-neo4j} + - NEO4J_PASSWORD=${NEO4J_PASSWORD-} networks: - mynetwork diff --git a/phpunit.xml.bak b/phpunit.xml.bak deleted file mode 100644 index 1f448a77..00000000 --- a/phpunit.xml.bak +++ /dev/null @@ -1,22 +0,0 @@ - - - - - ./tests - - - - - - src - - - - - - - - - - - \ No newline at end of file diff --git a/phpunitCoverage.xml b/phpunitCoverage.xml index 51d7ad7b..0ad90bde 100644 --- a/phpunitCoverage.xml +++ b/phpunitCoverage.xml @@ -7,14 +7,6 @@ tests - - - - - - - - src @@ -26,16 +18,13 @@ src - - - - - - - - - - + + + + + + + From 1ab6a4eee56fc3563a93ebae7dc3234ef2b796fd Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 3 Apr 2025 17:55:36 +0530 Subject: [PATCH 2/7] added the integration tests for OGM data objects --- .gitignore | 3 +- phpUnit.xml | 14 ++ src/OGM.php | 69 +++++++++- src/Objects/Temporal/Date.php | 35 +++++ src/Objects/Temporal/DateTime.php | 23 ++++ src/Objects/Temporal/DateTimeZoneId.php | 23 ++++ src/Objects/Temporal/Duration.php | 23 ++++ src/Objects/Temporal/LocalDateTime.php | 24 ++++ src/Objects/Temporal/LocalTime.php | 23 ++++ src/Objects/Temporal/Time.php | 23 ++++ src/Results/ResultRow.php | 2 +- src/Results/ResultSet.php | 43 ++++++- .../Integration/DataTypesIntegrationTest.php | 28 ---- .../Neo4jQueryAPIIntegrationTest.php | 121 +++++++++++++++++- tests/Unit/Temporal/OGMTemporalTest.php | 35 +++++ 15 files changed, 446 insertions(+), 43 deletions(-) create mode 100644 phpUnit.xml create mode 100644 src/Objects/Temporal/Date.php create mode 100644 src/Objects/Temporal/DateTime.php create mode 100644 src/Objects/Temporal/DateTimeZoneId.php create mode 100644 src/Objects/Temporal/Duration.php create mode 100644 src/Objects/Temporal/LocalDateTime.php create mode 100644 src/Objects/Temporal/LocalTime.php create mode 100644 src/Objects/Temporal/Time.php create mode 100644 tests/Unit/Temporal/OGMTemporalTest.php diff --git a/.gitignore b/.gitignore index 896c23c1..399f42ef 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ coverage xml-coverage composer.lock -.env \ No newline at end of file +.env +.phpunit.result.cache \ No newline at end of file diff --git a/phpUnit.xml b/phpUnit.xml new file mode 100644 index 00000000..fc18e761 --- /dev/null +++ b/phpUnit.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + ./tests + + + diff --git a/src/OGM.php b/src/OGM.php index a471e16d..3d0cc788 100644 --- a/src/OGM.php +++ b/src/OGM.php @@ -2,11 +2,19 @@ namespace Neo4j\QueryAPI; +use DateTimeZone; use Neo4j\QueryAPI\Objects\Point; use Neo4j\QueryAPI\Objects\Node; use Neo4j\QueryAPI\Objects\Relationship; use Neo4j\QueryAPI\Objects\Path; use InvalidArgumentException; +use Neo4j\QueryAPI\Objects\Temporal\Date; +use Neo4j\QueryAPI\Objects\Temporal\DateTime; +use Neo4j\QueryAPI\Objects\Temporal\DateTimeZoneId; +use Neo4j\QueryAPI\Objects\Temporal\Duration; +use Neo4j\QueryAPI\Objects\Temporal\LocalDateTime; +use Neo4j\QueryAPI\Objects\Temporal\LocalTime; +use Neo4j\QueryAPI\Objects\Temporal\Time; final class OGM { @@ -21,7 +29,7 @@ public function map(array $data): mixed } return match ($data['$type']) { - 'Integer', 'Float', 'String', 'Boolean', 'Duration', 'OffsetDateTime' => $data['_value'], + 'Integer', 'Float', 'Boolean' => $data['_value'], 'Array', 'List' => is_array($data['_value']) ? array_map([$this, 'map'], $data['_value']) : [], 'Null' => null, 'Node' => $this->mapNode($data['_value']), @@ -29,6 +37,16 @@ public function map(array $data): mixed 'Point' => $this->parsePoint($data['_value']), 'Relationship' => $this->mapRelationship($data['_value']), 'Path' => $this->mapPath($data['_value']), + 'Date' => $this->mapDate($data['_value']), + 'OffsetDateTime' => $this->mapDateTime($data['_value']), + 'Time' => $this->mapTime($data['_value']), + 'LocalTime' => $this->mapLocalTime($data['_value']), + 'LocalDateTime'=> $this->mapLocalDateTime($data['_value']), + 'Duration'=>$this->mapDuration($data['_value']), + + 'String' => $this->isValidTimeZone($data['_value']) + ? new DateTimeZoneId($data['_value']) // Convert timezone strings to `DateTimeZoneId` + : $data['_value'], default => throw new InvalidArgumentException('Unknown type: ' . json_encode($data, JSON_THROW_ON_ERROR)), }; } @@ -37,10 +55,10 @@ public function map(array $data): mixed private function parsePoint(string $value): Point { if (preg_match('/SRID=(\d+);POINT(?: Z)? \(([-\d.]+) ([-\d.]+)(?: ([-\d.]+))?\)/', $value, $matches)) { - $srid = (int) $matches[1]; - $x = (float) $matches[2]; - $y = (float) $matches[3]; - $z = isset($matches[4]) ? (float) $matches[4] : null; + $srid = (int)$matches[1]; + $x = (float)$matches[2]; + $y = (float)$matches[3]; + $z = isset($matches[4]) ? (float)$matches[4] : null; return new Point($x, $y, $z, $srid); } @@ -129,5 +147,46 @@ private function mapProperties(array $properties): array return $mappedProperties; } + private function mapDate(string $value) + { + $totalDaysSinceEpoch = (new \DateTime($value))->diff(new \DateTime('@0'))->days; + + return new Date($totalDaysSinceEpoch); + } + + private function mapDateTime(string $value) + { + return new DateTime($value); + } + + private function mapDateTimeZoneId(string $value) + { + return new DateTimeZoneId($value); + } + + private function isValidTimeZone(string $value): bool + { + return in_array($value, timezone_identifiers_list(), true); + } + private function mapTime(mixed $_value) + { + return new Time($_value); + + } + + private function mapLocalTime(mixed $_value) + { + return new LocalTime($_value); + } + + private function mapLocalDateTime(mixed $_value) + { + return new LocalDateTime($_value); + } + + private function mapDuration(mixed $_value) + { + return new Duration($_value); + } } diff --git a/src/Objects/Temporal/Date.php b/src/Objects/Temporal/Date.php new file mode 100644 index 00000000..dc263016 --- /dev/null +++ b/src/Objects/Temporal/Date.php @@ -0,0 +1,35 @@ +days = $days; + } + + /** + * Returns the number of days since the Unix epoch. + */ + public function getDays(): int + { + return $this->days; + } + + /** + * Converts the stored date into a DateTimeImmutable. + */ + public function toDateTimeImmutable(): \DateTimeImmutable + { + $dt = new \DateTimeImmutable('@0'); + return $dt->modify(sprintf('+%d days', $this->days)); + } + + public function __toString(): string + { + return sprintf("Date(%d days since epoch)", $this->days); + } +} diff --git a/src/Objects/Temporal/DateTime.php b/src/Objects/Temporal/DateTime.php new file mode 100644 index 00000000..5e04c057 --- /dev/null +++ b/src/Objects/Temporal/DateTime.php @@ -0,0 +1,23 @@ +dateTime = new \DateTimeImmutable($dateTime); + } + + public function getDateTime(): \DateTimeImmutable + { + return $this->dateTime; + } + + public function __toString(): string + { + return $this->dateTime->format('c'); + } +} diff --git a/src/Objects/Temporal/DateTimeZoneId.php b/src/Objects/Temporal/DateTimeZoneId.php new file mode 100644 index 00000000..5559b4e7 --- /dev/null +++ b/src/Objects/Temporal/DateTimeZoneId.php @@ -0,0 +1,23 @@ +zoneId = $zoneId; + } + + public function getZoneId(): string + { + return $this->zoneId; + } + + public function __toString(): string + { + return $this->zoneId; + } +} diff --git a/src/Objects/Temporal/Duration.php b/src/Objects/Temporal/Duration.php new file mode 100644 index 00000000..e1f729e1 --- /dev/null +++ b/src/Objects/Temporal/Duration.php @@ -0,0 +1,23 @@ +duration = $duration; + } + + public function getDuration(): string + { + return $this->duration; + } + + public function __toString(): string + { + return $this->duration; + } +} diff --git a/src/Objects/Temporal/LocalDateTime.php b/src/Objects/Temporal/LocalDateTime.php new file mode 100644 index 00000000..37272209 --- /dev/null +++ b/src/Objects/Temporal/LocalDateTime.php @@ -0,0 +1,24 @@ +localDateTime = new \DateTimeImmutable($localDateTime); + } + + public function getLocalDateTime(): \DateTimeImmutable + { + return $this->localDateTime; + } + + public function __toString(): string + { + // Adjust the format as necessary (without timezone info) + return $this->localDateTime->format('Y-m-d\TH:i:s'); + } +} diff --git a/src/Objects/Temporal/LocalTime.php b/src/Objects/Temporal/LocalTime.php new file mode 100644 index 00000000..0da41474 --- /dev/null +++ b/src/Objects/Temporal/LocalTime.php @@ -0,0 +1,23 @@ +localTime = $localTime; + } + + public function getLocalTime(): string + { + return $this->localTime; + } + + public function __toString(): string + { + return $this->localTime; + } +} diff --git a/src/Objects/Temporal/Time.php b/src/Objects/Temporal/Time.php new file mode 100644 index 00000000..dd41b23c --- /dev/null +++ b/src/Objects/Temporal/Time.php @@ -0,0 +1,23 @@ +time = $time; + } + + public function getTime(): string + { + return $this->time; + } + + public function __toString(): string + { + return $this->time; + } +} diff --git a/src/Results/ResultRow.php b/src/Results/ResultRow.php index 9e2fa67c..5d50fee9 100644 --- a/src/Results/ResultRow.php +++ b/src/Results/ResultRow.php @@ -18,7 +18,7 @@ final class ResultRow implements ArrayAccess, Countable, IteratorAggregate { /** @var array */ - private array $data; + public array $data; public function __construct(array $data) { diff --git a/src/Results/ResultSet.php b/src/Results/ResultSet.php index 9a373e0f..6353422d 100644 --- a/src/Results/ResultSet.php +++ b/src/Results/ResultSet.php @@ -2,6 +2,7 @@ namespace Neo4j\QueryAPI\Results; +use ArrayAccess; use ArrayIterator; use Countable; use IteratorAggregate; @@ -9,24 +10,26 @@ use Neo4j\QueryAPI\Objects\Bookmarks; use Neo4j\QueryAPI\Objects\ProfiledQueryPlan; use Neo4j\QueryAPI\Objects\ResultCounters; +use OutOfBoundsException; use Traversable; /** * @template TValue * @implements IteratorAggregate */ -final class ResultSet implements IteratorAggregate, Countable +final class ResultSet implements IteratorAggregate, Countable, ArrayAccess { /** * @param list $rows */ public function __construct( - public readonly array $rows, - public readonly Bookmarks $bookmarks, - public readonly AccessMode $accessMode, - public readonly ?ResultCounters $counters = null, + public readonly array $rows, + public readonly Bookmarks $bookmarks, + public readonly AccessMode $accessMode, + public readonly ?ResultCounters $counters = null, public readonly ?ProfiledQueryPlan $profiledQueryPlan = null - ) { + ) + { } /** @@ -45,4 +48,32 @@ public function count(): int return count($this->rows); } + public function get(int $index): ResultRow + { + if (!isset($this->rows[$index])) { + throw new OutOfBoundsException('Index ' . $index . ' does not exist'); + } + return $this->rows[$index]; + + } + + public function offsetExists(mixed $offset): bool + { + return isset($this->rows[$offset]); + } + + public function offsetGet(mixed $offset): mixed + { + return $this->rows[$offset] ?? throw new \OutOfBoundsException("Index $offset is out of bounds."); + } + + public function offsetSet(mixed $offset, mixed $value): void + { + throw new \LogicException("ResultSet is immutable. You cannot modify elements."); + } + + public function offsetUnset(mixed $offset): void + { + throw new \LogicException("ResultSet is immutable. You cannot remove elements."); + } } diff --git a/tests/Integration/DataTypesIntegrationTest.php b/tests/Integration/DataTypesIntegrationTest.php index 81c82972..2bc9ccf2 100644 --- a/tests/Integration/DataTypesIntegrationTest.php +++ b/tests/Integration/DataTypesIntegrationTest.php @@ -238,34 +238,6 @@ public function testWithArray(): void } - public function testWithDate(): void - { - $expected = new ResultSet( - [ - new ResultRow(['n.date' => '2024-12-11T11:00:00Z']) - ], - new Bookmarks([]), - AccessMode::WRITE, - new ResultCounters( - containsUpdates: true, - nodesCreated: 1, - propertiesSet: 1, - labelsAdded: 1 - ), - null - ); - - $results = $this->api->run( - 'CREATE (n:Person {date: datetime($date)}) RETURN n.date', - ['date' => "2024-12-11T11:00:00Z"] - ); - - $this->assertEquals($expected->counters, $results->counters); - $this->assertEquals(iterator_to_array($expected), iterator_to_array($results)); - $bookmarks = $results->bookmarks; - $this->assertCount(1, $bookmarks); - } - public function testWithDuration(): void { $expected = new ResultSet( diff --git a/tests/Integration/Neo4jQueryAPIIntegrationTest.php b/tests/Integration/Neo4jQueryAPIIntegrationTest.php index 490d6570..1cf7bab6 100644 --- a/tests/Integration/Neo4jQueryAPIIntegrationTest.php +++ b/tests/Integration/Neo4jQueryAPIIntegrationTest.php @@ -2,22 +2,31 @@ namespace Neo4j\QueryAPI\Tests\Integration; +use DateTimeZone; use Neo4j\QueryAPI\Exception\Neo4jException; use Neo4j\QueryAPI\Neo4jQueryAPI; use Neo4j\QueryAPI\Objects\Authentication; use Neo4j\QueryAPI\Objects\Node; use Neo4j\QueryAPI\Objects\Bookmarks; use Neo4j\QueryAPI\Objects\ResultCounters; +use Neo4j\QueryAPI\Objects\Temporal\Date; +use Neo4j\QueryAPI\Objects\Temporal\DateTime; +use Neo4j\QueryAPI\Objects\Temporal\DateTimeZoneId; +use Neo4j\QueryAPI\Objects\Temporal\Duration; +use Neo4j\QueryAPI\Objects\Temporal\LocalDateTime; +use Neo4j\QueryAPI\Objects\Temporal\LocalTime; +use Neo4j\QueryAPI\Objects\Temporal\Time; use Neo4j\QueryAPI\Results\ResultRow; use Neo4j\QueryAPI\Results\ResultSet; use PHPUnit\Framework\TestCase; use Neo4j\QueryAPI\Enums\AccessMode; +use Throwable; final class Neo4jQueryAPIIntegrationTest extends TestCase { private Neo4jQueryAPI $api; - #[\Override] + #[Override] public function setUp(): void { parent::setUp(); @@ -66,6 +75,7 @@ private function initializeApi(): Neo4jQueryAPI } return Neo4jQueryAPI::login($address, Authentication::fromEnvironment()); } + public function testCounters(): void { $result = $this->api->run('CREATE (x:Node {hello: "world"})'); @@ -94,11 +104,118 @@ public function testInvalidQueryException(): void $this->api->run('CREATE (:Person {createdAt: $invalidParam})', [ 'date' => new \DateTime('2000-01-01 00:00:00') ]); - } catch (\Throwable $e) { + } catch (Throwable $e) { $this->assertInstanceOf(Neo4jException::class, $e); $this->assertEquals('Neo.ClientError.Statement.ParameterMissing', $e->getErrorCode()); $this->assertEquals('Expected parameter(s): invalidParam', $e->getMessage()); } } + public function testTemporalDate(): void + { + $results = $this->api->run('RETURN date() AS date'); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('date', $results->rows[0]->data); + + $date = $results->rows[0]->data['date']; + $this->assertInstanceOf(Date::class, $date); + + $expectedDays = (new \DateTime("1970-01-01"))->diff(new \DateTime())->format('%r%a'); + $this->assertEquals((int)$expectedDays, $date->days); + } + + public function testTemporalDateTime(): void + { + $results = $this->api->run('RETURN DateTime() AS datetime'); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('datetime', $results->rows[0]->data); + $datetime = $results->rows[0]->data['datetime']; + $this->assertInstanceOf(DateTime::class, $datetime); + + $this->assertEquals(date_create()->format('Y-m-d'), $datetime->getDateTime()->format('Y-m-d')); + } + + public function testTemporalDateTimeZoneId(): void + { + $results = $this->api->run("RETURN 'America/New_York' AS timezone"); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('timezone', $results->rows[0]->data); + $this->assertInstanceOf(DateTimeZoneId::class, $results->rows[0]->data['timezone']); + + $zoneId = $results->rows[0]->data['timezone']->getZoneId(); + $this->assertEquals('America/New_York', $zoneId); + } + + + public function testTemporalTime(): void + { + $results = $this->api->run('RETURN time() AS time'); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('time', $results->rows[0]->data); + $time = $results->rows[0]->data['time']; + $this->assertInstanceOf(Time::class, $time); + + $neo4jTime = $time->getTime(); + $expectedTime = (new \DateTime())->format('H:i'); + $this->assertStringStartsWith($expectedTime, $neo4jTime); + } + + public function testTemporalLocalTime(): void + { + $results = $this->api->run('RETURN localtime() AS localtime'); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('localtime', $results->rows[0]->data); + $localTime = $results->rows[0]->data['localtime']; + $this->assertInstanceOf(LocalTime::class, $localTime); + $neo4jLocalTime = $localTime->getLocalTime(); + + $expectedLocalTime = (new \DateTime())->format('H:i'); + + $this->assertStringStartsWith($expectedLocalTime, $neo4jLocalTime); + } + + public function testTemporalLocalDateTime(): void + { + $results = $this->api->run('RETURN localdatetime() AS localdatetime'); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('localdatetime', $results->rows[0]->data); + $localDateTime = $results->rows[0]->data['localdatetime']; + + $this->assertInstanceOf(LocalDateTime::class, $localDateTime); + + $neo4jLocalDateTime = $localDateTime->getLocalDateTime(); + + $expectedDate = date_create()->format('Y-m-d'); + + $this->assertEquals($expectedDate, $neo4jLocalDateTime->format('Y-m-d')); + } + + public function testTemporalDuration(): void + { + $results = $this->api->run("RETURN duration({years: 1, months: 2, days: 10, hours: 5, minutes: 30, seconds: 15}) AS duration"); + + $this->assertNotEmpty($results->rows); + $this->assertInstanceOf(ResultRow::class, $results->rows[0]); + $this->assertArrayHasKey('duration', $results->rows[0]->data); + $duration = $results->rows[0]->data['duration']; + $this->assertInstanceOf(Duration::class, $duration); + $neo4jDuration = $duration->getDuration(); + + $expectedPattern = '/P1Y2M10DT5H30M15S/'; + + $this->assertMatchesRegularExpression($expectedPattern, $neo4jDuration); + } + } diff --git a/tests/Unit/Temporal/OGMTemporalTest.php b/tests/Unit/Temporal/OGMTemporalTest.php new file mode 100644 index 00000000..acd2853a --- /dev/null +++ b/tests/Unit/Temporal/OGMTemporalTest.php @@ -0,0 +1,35 @@ +ogm = new OGM(); + } + + public function testConvertDate(): void + { + $data = [ + '$type' => 'Date', + '_value' => '2023-03-20' + ]; + + $result = $this->ogm->map($data); + + $this->assertInstanceOf(Date::class, $result, "The result should be an instance of Date"); + + $dateTime = new \DateTimeImmutable('2023-03-20'); + $expectedDays = (int) floor($dateTime->getTimestamp() / 86400); + + $this->assertEquals($expectedDays, $result->getDays(), "The calculated days should match the expected value."); + } +} From 76bbb04b8049add8d1d2bd767f82ef2329c30ba8 Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 10 Apr 2025 11:46:09 +0530 Subject: [PATCH 3/7] fixed psalm errros and info issues --- src/OGM.php | 22 +++++++++---------- src/Objects/Temporal/Date.php | 2 +- src/Results/ResultSet.php | 8 +++++-- .../Neo4jQueryAPIIntegrationTest.php | 16 +++++++++++--- tests/Unit/Temporal/OGMTemporalTest.php | 3 ++- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/OGM.php b/src/OGM.php index 3d0cc788..b8071f13 100644 --- a/src/OGM.php +++ b/src/OGM.php @@ -41,8 +41,8 @@ public function map(array $data): mixed 'OffsetDateTime' => $this->mapDateTime($data['_value']), 'Time' => $this->mapTime($data['_value']), 'LocalTime' => $this->mapLocalTime($data['_value']), - 'LocalDateTime'=> $this->mapLocalDateTime($data['_value']), - 'Duration'=>$this->mapDuration($data['_value']), + 'LocalDateTime' => $this->mapLocalDateTime($data['_value']), + 'Duration' => $this->mapDuration($data['_value']), 'String' => $this->isValidTimeZone($data['_value']) ? new DateTimeZoneId($data['_value']) // Convert timezone strings to `DateTimeZoneId` @@ -147,19 +147,19 @@ private function mapProperties(array $properties): array return $mappedProperties; } - private function mapDate(string $value) + private function mapDate(string $value): Date { $totalDaysSinceEpoch = (new \DateTime($value))->diff(new \DateTime('@0'))->days; return new Date($totalDaysSinceEpoch); } - private function mapDateTime(string $value) + private function mapDateTime(string $value): DateTime { return new DateTime($value); } - private function mapDateTimeZoneId(string $value) + private function mapDateTimeZoneId(string $value): DateTimeZoneId { return new DateTimeZoneId($value); } @@ -169,24 +169,24 @@ private function isValidTimeZone(string $value): bool return in_array($value, timezone_identifiers_list(), true); } - private function mapTime(mixed $_value) + private function mapTime(mixed $_value): Time { return new Time($_value); } - private function mapLocalTime(mixed $_value) + private function mapLocalTime(mixed $_value): LocalTime { return new LocalTime($_value); } - private function mapLocalDateTime(mixed $_value) + private function mapLocalDateTime(mixed $_value): LocalDateTime { - return new LocalDateTime($_value); + return new LocalDateTime($_value); } - private function mapDuration(mixed $_value) + private function mapDuration(mixed $_value): Duration { - return new Duration($_value); + return new Duration($_value); } } diff --git a/src/Objects/Temporal/Date.php b/src/Objects/Temporal/Date.php index dc263016..7e9bf2a7 100644 --- a/src/Objects/Temporal/Date.php +++ b/src/Objects/Temporal/Date.php @@ -4,7 +4,7 @@ final class Date { - public int $days; + public int $days; public function __construct(int $days) { diff --git a/src/Results/ResultSet.php b/src/Results/ResultSet.php index 6353422d..07ad7a0f 100644 --- a/src/Results/ResultSet.php +++ b/src/Results/ResultSet.php @@ -15,6 +15,7 @@ /** * @template TValue + * @implements ArrayAccess * @implements IteratorAggregate */ final class ResultSet implements IteratorAggregate, Countable, ArrayAccess @@ -28,8 +29,7 @@ public function __construct( public readonly AccessMode $accessMode, public readonly ?ResultCounters $counters = null, public readonly ?ProfiledQueryPlan $profiledQueryPlan = null - ) - { + ) { } /** @@ -56,21 +56,25 @@ public function get(int $index): ResultRow return $this->rows[$index]; } + #[\Override] public function offsetExists(mixed $offset): bool { return isset($this->rows[$offset]); } + #[\Override] public function offsetGet(mixed $offset): mixed { return $this->rows[$offset] ?? throw new \OutOfBoundsException("Index $offset is out of bounds."); } + #[\Override] public function offsetSet(mixed $offset, mixed $value): void { throw new \LogicException("ResultSet is immutable. You cannot modify elements."); } + #[\Override] public function offsetUnset(mixed $offset): void { diff --git a/tests/Integration/Neo4jQueryAPIIntegrationTest.php b/tests/Integration/Neo4jQueryAPIIntegrationTest.php index 1cf7bab6..3dc9cf3f 100644 --- a/tests/Integration/Neo4jQueryAPIIntegrationTest.php +++ b/tests/Integration/Neo4jQueryAPIIntegrationTest.php @@ -25,8 +25,8 @@ final class Neo4jQueryAPIIntegrationTest extends TestCase { private Neo4jQueryAPI $api; + #[\Override] - #[Override] public function setUp(): void { parent::setUp(); @@ -136,9 +136,12 @@ public function testTemporalDateTime(): void $datetime = $results->rows[0]->data['datetime']; $this->assertInstanceOf(DateTime::class, $datetime); - $this->assertEquals(date_create()->format('Y-m-d'), $datetime->getDateTime()->format('Y-m-d')); + $now = date_create(); + $this->assertNotFalse($now); + $this->assertEquals($now->format('Y-m-d'), $datetime->getDateTime()->format('Y-m-d')); } + public function testTemporalDateTimeZoneId(): void { $results = $this->api->run("RETURN 'America/New_York' AS timezone"); @@ -165,6 +168,8 @@ public function testTemporalTime(): void $neo4jTime = $time->getTime(); $expectedTime = (new \DateTime())->format('H:i'); + $this->assertNotEmpty($expectedTime); + $this->assertStringStartsWith($expectedTime, $neo4jTime); } @@ -180,6 +185,7 @@ public function testTemporalLocalTime(): void $neo4jLocalTime = $localTime->getLocalTime(); $expectedLocalTime = (new \DateTime())->format('H:i'); + $this->assertNotEmpty($expectedLocalTime); $this->assertStringStartsWith($expectedLocalTime, $neo4jLocalTime); } @@ -197,7 +203,11 @@ public function testTemporalLocalDateTime(): void $neo4jLocalDateTime = $localDateTime->getLocalDateTime(); - $expectedDate = date_create()->format('Y-m-d'); + $expectedDateTime = date_create(); + $this->assertNotFalse($expectedDateTime); // 💡 Ensure it's not false + + $expectedDate = $expectedDateTime->format('Y-m-d'); + $this->assertNotEmpty($expectedDate); $this->assertEquals($expectedDate, $neo4jLocalDateTime->format('Y-m-d')); } diff --git a/tests/Unit/Temporal/OGMTemporalTest.php b/tests/Unit/Temporal/OGMTemporalTest.php index acd2853a..77a43eee 100644 --- a/tests/Unit/Temporal/OGMTemporalTest.php +++ b/tests/Unit/Temporal/OGMTemporalTest.php @@ -6,9 +6,10 @@ use Neo4j\QueryAPI\OGM; use Neo4j\QueryAPI\Objects\Temporal\Date; -class OGMTemporalTest extends TestCase +final class OGMTemporalTest extends TestCase { private OGM $ogm; + #[\Override] protected function setUp(): void { From 3a85573dc450773c6d4da78b6c14ec0dff87df62 Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 10 Apr 2025 12:15:55 +0530 Subject: [PATCH 4/7] fixed psalm issues --- src/Configuration.php | 2 +- src/Neo4jRequestFactory.php | 2 +- src/OGM.php | 2 +- src/ResponseParser.php | 2 +- src/Results/ResultSet.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Configuration.php b/src/Configuration.php index c88f87ef..2faa24c8 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -6,7 +6,7 @@ use Neo4j\QueryAPI\Objects\Bookmarks; use Neo4j\QueryAPI\Enums\AccessMode; -class Configuration +final class Configuration { /** * Constructor for Configuration class. diff --git a/src/Neo4jRequestFactory.php b/src/Neo4jRequestFactory.php index 05f6612a..600427db 100644 --- a/src/Neo4jRequestFactory.php +++ b/src/Neo4jRequestFactory.php @@ -8,7 +8,7 @@ use Psr\Http\Message\RequestInterface; use Psr\Http\Message\StreamFactoryInterface; - class Neo4jRequestFactory +final class Neo4jRequestFactory { public function __construct( private RequestFactoryInterface $psr17Factory, diff --git a/src/OGM.php b/src/OGM.php index 13985337..b8071f13 100644 --- a/src/OGM.php +++ b/src/OGM.php @@ -16,7 +16,7 @@ use Neo4j\QueryAPI\Objects\Temporal\LocalTime; use Neo4j\QueryAPI\Objects\Temporal\Time; -class OGM +final class OGM { /** * @param array $data diff --git a/src/ResponseParser.php b/src/ResponseParser.php index 75f480a0..a018ab50 100644 --- a/src/ResponseParser.php +++ b/src/ResponseParser.php @@ -13,7 +13,7 @@ use RuntimeException; use Neo4j\QueryAPI\Objects\ProfiledQueryPlan; - class ResponseParser +final class ResponseParser { public function __construct(private readonly OGM $ogm) { diff --git a/src/Results/ResultSet.php b/src/Results/ResultSet.php index 9eb419d4..07ad7a0f 100644 --- a/src/Results/ResultSet.php +++ b/src/Results/ResultSet.php @@ -18,7 +18,7 @@ * @implements ArrayAccess * @implements IteratorAggregate */ - class ResultSet implements IteratorAggregate, Countable, ArrayAccess +final class ResultSet implements IteratorAggregate, Countable, ArrayAccess { /** * @param list $rows From 6bc78f953f66cf158d1e1171a8825ab2d24a79d2 Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 10 Apr 2025 12:22:42 +0530 Subject: [PATCH 5/7] fixed psalm issues --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1f1dbb70..9e6b32c0 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,3 @@ composer.lock .env .phpunit.result.cache - -.env \ No newline at end of file From 6df032e2250807d49b6e327e2d805c03ab4fd87f Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 24 Apr 2025 12:51:58 +0530 Subject: [PATCH 6/7] Cleaned up code --- src/ResponseParser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResponseParser.php b/src/ResponseParser.php index a018ab50..75f480a0 100644 --- a/src/ResponseParser.php +++ b/src/ResponseParser.php @@ -13,7 +13,7 @@ use RuntimeException; use Neo4j\QueryAPI\Objects\ProfiledQueryPlan; -final class ResponseParser + class ResponseParser { public function __construct(private readonly OGM $ogm) { From e4637711faf4adf4eb4daeb4b914080729058d52 Mon Sep 17 00:00:00 2001 From: pratikshazalte69 Date: Thu, 24 Apr 2025 13:01:17 +0530 Subject: [PATCH 7/7] fixed cs-fixer and psalm --- composer.json | 2 +- src/ResponseParser.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 8382c509..36e11d3d 100644 --- a/composer.json +++ b/composer.json @@ -58,4 +58,4 @@ "phpunit-with-coverage" : "XDEBUG_MODE=coverage php -d memory_limit=-1 vendor/bin/phpunit --configuration=phpunitCoverage.xml --testsuite=All --coverage-filter=src tests" } -} +} \ No newline at end of file diff --git a/src/ResponseParser.php b/src/ResponseParser.php index 75f480a0..a018ab50 100644 --- a/src/ResponseParser.php +++ b/src/ResponseParser.php @@ -13,7 +13,7 @@ use RuntimeException; use Neo4j\QueryAPI\Objects\ProfiledQueryPlan; - class ResponseParser +final class ResponseParser { public function __construct(private readonly OGM $ogm) {