33namespace Beelab \TestBundle \Test ;
44
55use Doctrine \Common \DataFixtures \AbstractFixture ;
6- use Doctrine \Common \DataFixtures \DependentFixtureInterface ;
76use Doctrine \Common \DataFixtures \Executor \ORMExecutor ;
87use Doctrine \Common \DataFixtures \Purger \ORMPurger ;
98use Doctrine \ORM \EntityManagerInterface ;
1413use Symfony \Component \BrowserKit \Cookie ;
1514use Symfony \Component \Console \Command \Command ;
1615use Symfony \Component \Console \Tester \CommandTester ;
16+ use Symfony \Component \DependencyInjection \ContainerInterface ;
1717use Symfony \Component \DomCrawler \Crawler ;
1818use Symfony \Component \DomCrawler \Field \ChoiceFormField ;
1919use Symfony \Component \DomCrawler \Form ;
2020use Symfony \Component \HttpFoundation \File \UploadedFile ;
21+ use Symfony \Component \HttpFoundation \Session \SessionInterface ;
2122use Symfony \Component \Process \Process ;
2223use Symfony \Component \Security \Core \Authentication \Token \UsernamePasswordToken ;
2324use Symfony \Component \Security \Core \Exception \AuthenticationServiceException ;
@@ -26,14 +27,17 @@ abstract class WebTestCase extends SymfonyWebTestCase
2627{
2728 protected static ?EntityManagerInterface $ em = null ;
2829
29- protected static ? KernelBrowser $ client = null ;
30+ protected static KernelBrowser $ client ;
3031
3132 private ?AbstractFixture $ fixture = null ;
3233
3334 protected static ?string $ authUser = null ;
3435
3536 protected static ?string $ authPw = null ;
3637
38+ /** @var ContainerInterface */
39+ protected static $ container = null ;
40+
3741 protected function setUp (): void
3842 {
3943 $ environment = $ _SERVER ['APP_ENV ' ] ?? 'test ' ;
@@ -102,15 +106,15 @@ protected static function saveOutput(bool $delete = true): void
102106 */
103107 protected static function login (
string $ username =
'[email protected] ' , ?
string $ firewall =
null , ?
string $ service =
null ):
void 104108 {
105- $ service = $ service ?? static ::$ container ->getParameter ('beelab_test.user_service ' );
109+ $ service ??= static ::$ container ->getParameter ('beelab_test.user_service ' );
106110 $ object = static ::$ container ->get ($ service );
107111 $ user = \is_callable ([$ object , 'loadUserByIdentifier ' ]) ? $ object ->loadUserByIdentifier ($ username ) : $ object ->loadUserByUsername ($ username );
108112 if (null === $ user ) {
109113 throw new \InvalidArgumentException (\sprintf ('Username %s not found. ' , $ username ));
110114 }
111- $ firewall = $ firewall ?? static ::$ container ->getParameter ('beelab_test.firewall ' );
112- $ token = new UsernamePasswordToken ($ user , null , $ firewall , $ user ->getRoles ());
113- $ session = static :: $ container -> get ( ' session ' );
115+ $ firewall ??= static ::$ container ->getParameter ('beelab_test.firewall ' );
116+ $ token = new UsernamePasswordToken ($ user , $ firewall , $ user ->getRoles ());
117+ $ session = self :: getSession ( );
114118 $ session ->set ('_security_ ' .$ firewall , \serialize ($ token ));
115119 $ session ->save ();
116120 $ cookie = new Cookie ($ session ->getName (), $ session ->getId ());
@@ -270,17 +274,12 @@ protected static function commandTest(
270274
271275 /**
272276 * Get an entity by its fixtures reference name.
273- *
274- * @return mixed
275277 */
276- protected function getReference (string $ name )
278+ protected function getReference (string $ name ): object
277279 {
278280 if (null === $ this ->fixture ) {
279281 throw new \RuntimeException ('Load some fixtures before. ' );
280282 }
281- if (!$ this ->fixture instanceof DependentFixtureInterface) {
282- throw new \RuntimeException ('Fixture is not dependent. ' );
283- }
284283 if (!$ this ->fixture ->hasReference ($ name )) {
285284 throw new \InvalidArgumentException (\sprintf ('Reference "%s" not found. ' , $ name ));
286285 }
@@ -318,8 +317,7 @@ protected static function postForm(string $name, array $values, array $files = [
318317
319318 protected static function setSessionException (string $ msg = 'error... ' ): void
320319 {
321- /** @var \Symfony\Component\HttpFoundation\Session\SessionInterface $session */
322- $ session = self ::$ container ->get ('session ' );
320+ $ session = self ::getSession ();
323321 $ session ->set ('_security.last_error ' , new AuthenticationServiceException ($ msg ));
324322 $ session ->save ();
325323 $ cookie = new Cookie ($ session ->getName (), $ session ->getId ());
@@ -402,4 +400,15 @@ private function loadFixtureClass(Loader $loader, string $className): void
402400 $ loader ->addFixture ($ fixture );
403401 $ this ->fixture = $ fixture ;
404402 }
403+
404+ private static function getSession (): SessionInterface
405+ {
406+ if (static ::$ container ->has ('session.factory ' )) {
407+ return static ::$ container ->get ('session.factory ' )->createSession ();
408+ }
409+ if (static ::$ container ->has ('session ' )) {
410+ return static ::$ container ->get ('session ' );
411+ }
412+ throw new \UnexpectedValueException ('Cannot get session from container. ' );
413+ }
405414}
0 commit comments