public function getTokenMustReturnANewTokenWithCurrentConfiguration()
{
$signature = $this->createMock(Signature::class);
$this->encoder->expects($this->exactly(2))->method('jsonEncode')->withConsecutive([['typ' => 'JWT', 'alg' => 'none']], [['test' => $this->defaultClaim]])->willReturnOnConsecutiveCalls('1', '2');
$this->encoder->expects($this->exactly(3))->method('base64UrlEncode')->withConsecutive(['1'], ['2'], [$signature])->willReturnOnConsecutiveCalls('1', '2', '3');
$builder = $this->createBuilder()->with('test', 123);
$builderSign = new \ReflectionProperty($builder, 'signature');
$builderSign->setAccessible(true);
$builderSign->setValue($builder, $signature);
$token = $builder->getToken();
$tokenSign = new \ReflectionProperty($token, 'signature');
$tokenSign->setAccessible(true);
self::assertAttributeEquals(['1', '2', '3'], 'payload', $token);
self::assertAttributeEquals($token->getHeaders(), 'headers', $builder);
self::assertAttributeEquals($token->getClaims(), 'claims', $builder);
self::assertAttributeSame($tokenSign->getValue($token), 'signature', $builder);
}