zenstruck / foundry

A model factory library for creating expressive, auto-completable, on-demand dev/test fixtures with Symfony and Doctrine.
https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html
MIT License
643 stars 70 forks source link

Problem with dama and reset database #534

Open nikophil opened 10 months ago

nikophil commented 10 months ago

there is a subtle bug with ResetDatabase and dama, and maybe zestruck\messenger-test.

Given this scenario: 1- test 1 (without reset trait) : because of the middleware, doctrine connection is initialized, and StaticDriver as well 2- test 2 (with reset trait) : all other connections are "killed" because of https://github.com/zenstruck/foundry/blob/1.x/src/Test/ORMDatabaseResetter.php#L110-L118 3- dama tries to open a transaction, but the connection does not exist anymore

and if i comment out the lines where we kill the other connections : 1- test 1 (without reset trait) : because of the middleware, doctrine connection is initialized, and StaticDriver as well 2- test 2 (with reset trait) : I have the following error :

RuntimeException: Error running "doctrine:database:drop": Could not drop database "opa-dev_test" for connection named default
An exception occurred while executing a query: SQLSTATE[55006]: Object in use: 7 ERROR:  database "opa-dev_test" is being accessed by other users

it sounds like the proper solution would be to run the reset database logic before the first test, not before the first test with the reset database trait

Maybe we could add a helper to use in bootstrap.php:

// tests/boostrap.php

DatabaseResetter::reset(); // by default uses KERNEL_CLASS env variable to instantiate the kernel

DatabaseResetter::reset(new MyKernel()); // pass your own kernel if doing something out of the ordinary