Quantcast
Channel: Active questions tagged symfony4 - Stack Overflow
Viewing all articles
Browse latest Browse all 3925

Symfony PHPUnit - Inject dependency

$
0
0

I want to test this TokenProvider

<?phpdeclare(strict_types=1);namespace App\Services\Provider;use App\Repository\UserRepository;use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;use Symfony\Component\Security\Core\Exception\BadCredentialsException;/** * Class TokenProvider * @package App\Services\Provider */class TokenProvider{    /** @var JWTEncoderInterface */    private $JWTEncoder;    /** @var UserPasswordEncoderInterface */    private $passwordEncoder;    /** @var UserRepository */    private $userRepository;    /**     * TokenProvider constructor.     *     * @param JWTEncoderInterface          $JWTEncoder     * @param UserPasswordEncoderInterface $passwordEncoder     * @param UserRepository               $userRepository     */    public function __construct(JWTEncoderInterface $JWTEncoder, UserPasswordEncoderInterface $passwordEncoder, UserRepository $userRepository)    {        $this->JWTEncoder = $JWTEncoder;        $this->passwordEncoder = $passwordEncoder;        $this->userRepository = $userRepository;    }    /**     * @param string $email     * @param string $password     *     * @return string     * @throws \Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTEncodeFailureException     */    public function getToken(string $email, string $password): string    {        $user = $this->userRepository->findOneBy(['email' => $email,        ]);        if (!$user) {            throw new NotFoundHttpException('User Not Found');        }        $isValid = $this->passwordEncoder->isPasswordValid($user, $password);        if (!$isValid) {            throw new BadCredentialsException();        }        return $this->JWTEncoder->encode(['email' => $user->getEmail(),'exp' => time() + 3600 // 1 hour expiration        ]);    }}

Here is my test. It's not finish yet.

I want to inject JWTEncoderInterface $encoder and UserPasswordEncoder $passwordEncoder in my testGetToken().

class TokenProviderTest extends TestCase{    /**     * @throws \Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTEncodeFailureException     */    public function testGetToken()    {        $this->markTestSkipped();        $JWTEncoder = //TODO;        $passwordEncoder = //TODO;        $tokenProvider = new TokenProvider(            $JWTEncoder,            $passwordEncoder,            new class extends UserRepository{                public function findOneBy(array $criteria, array $orderBy = null)                {                    return (new User())                        ->setEmail('kevin@leroi.com')                        ->setPassword('password')                    ;                }            }        );        $token = $tokenProvider->getToken('kevin@leroi.com', 'password');        $this->assertEquals(true, $token);    }}

What is the good way to do that in a TestCase?

I don't want to mock those two services because I want to check if my token is valid with LexikJWTAuthenticationBundle


Viewing all articles
Browse latest Browse all 3925

Trending Articles