client = static::createClient(); $this->em = static::getContainer()->get(EntityManagerInterface::class); } /** * Persist a user with the given roles. Mobile is randomised per test to * avoid unique-constraint clashes across cases without a full DB reset. */ protected function createUser(array $roles = ['ROLE_USER'], ?string $mobile = null): User { $mobile ??= '0912' . str_pad((string) random_int(0, 9_999_999), 7, '0', STR_PAD_LEFT); $user = new User($mobile); $user->setRoles($roles); $user->setStatus(1); $this->em->persist($user); $this->em->flush(); return $user; } protected function jwtFor(User $user): string { return static::getContainer() ->get(JWTTokenManagerInterface::class) ->create($user); } /** * Issue an authenticated JSON request and return the decoded response body. */ protected function authJson(string $method, string $uri, User $user, array $body = []): array { $this->client->request( $method, $uri, server: [ 'HTTP_AUTHORIZATION' => 'Bearer ' . $this->jwtFor($user), 'CONTENT_TYPE' => 'application/json', ], content: $body ? json_encode($body) : null, ); return json_decode($this->client->getResponse()->getContent(), true) ?? []; } protected function responseCode(): int { return $this->client->getResponse()->getStatusCode(); } }