Files
pinecore/.docker/php/Dockerfile
pronchev 6dd41c7b47 Add PHPUnit tests and fix ORM hydration bugs
Set up PHPUnit 11 inside docker-compose (PHP 8.2 CLI image with ext-mongodb)
and use red tests to drive three fixes in the ORM layer:

- MongoHydrator::dehydrate now recurses through EntityMap so #[Field(name)]
  on embedded value objects is honoured symmetrically with hydrate.
  dehydrateEmbedded was reading raw property names via ReflectionClass,
  which silently broke round-trip when an embedded property had a renamed
  field. See ADR-001.
- MongoHydrator::hydrate now resolves missing keys as: constructor default,
  then nullable null, then LogicException with the field/class. Previously
  every missing key became null, leaking as a TypeError from the entity
  constructor for non-nullable typed properties.
- AbstractMongoRepository::persist detects new entities via the new
  EntityMetadata::isNewId helper, which treats both '' and null as "new"
  (was strict === '', so #[Id] ?string $id = null left null in the upsert
  filter and could collide with other null-id documents).

EntityMap also makes #[Collection] optional for non-MongoEntity classes so
embedded value objects can declare #[Field]/#[Embedded] without owning a
Mongo collection.

Tests: 20 cases covering simple/embedded/embedded-list round-trip, BSON
inputs, missing-field semantics, EntityMap building rules, isNewId.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 01:43:35 +03:00

12 lines
293 B
Docker

FROM php:8.2-cli-alpine
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS openssl-dev \
&& pecl install mongodb \
&& docker-php-ext-enable mongodb \
&& apk del .build-deps \
&& rm -rf /tmp/pear
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app