Codeception / module-doctrine

Next gen Doctrine module for Codeception
MIT License
2 stars 1 forks source link

seeInRepository does not work with values from multiple relations #7

Open wazum opened 1 year ago

wazum commented 1 year ago

Example: a one-to-many relation (uni-directional, so implemented as many-to-many with join table):

    #[ManyToMany(targetEntity: Ordination::class, cascade: ['all'], orphanRemoval: true)]
    private Collection|ArrayCollection $ordinations;

Just for this example I save a Doctor entity with two Ordination relations with haveInRepository in my test. But then there's no possibility to check for values of both ordinations

        $this->tester->seeInRepository(Doctor::class, [
            'name.firstName' => 'Mauris',
            'ordinations' => [
                [
                    'externalReferenceId' => '3'
                ]
            ]
        ]);

This leads to

 [Doctrine\ORM\Query\QueryException] [Syntax Error] line 0, col 140: Error: Expected Doctrine\ORM\Query\Lexer::T_IDENTIFIER, got '0'

because of the nested structure. What works is a check for a single relation:

        $this->tester->seeInRepository(Doctor::class, [
            'name.firstName' => 'Mauris',
            'ordinations' => [
                'externalReferenceId' => '3'
            ]
        ]);

(so as a workaround, I could call the seeInRepository multiple times with a different relation's values …)

The problem is in the method \Codeception\Module\Doctrine2::_buildAssociationQuery but I'm not really sure how to fix this for a PR. Anyone with more knowledge on this?

I guess this issue is somehow related to Codeception/module-doctrine#16