forked from integr8rs/DoctrineEncryptBundle
/
SecretTest.php
77 lines (63 loc) · 2.44 KB
/
SecretTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace App\Tests;
use DoctrineEncryptBundle\Service\Encrypt;
use App\Entity;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class SecretTest extends KernelTestCase
{
protected function setUp(): void
{
parent::setUp();
self::bootKernel([]);
}
private function testSecretsAreEncryptedInDatabase(string $className)
{
/** @var EntityManagerInterface $entityManager */
$entityManager = self::$container->get('doctrine.orm.entity_manager');
// Make sure we do not store testdata
$entityManager->beginTransaction();
$name = 'test123';
$secretString = 'i am a secret string';
// Create entity to test with
$newSecretObject = (new $className)
->setName($name)
->setSecret($secretString);
$entityManager->persist($newSecretObject);
$entityManager->flush();
// Fetch the actual data
$secretRepository = $entityManager->getRepository($className);
$qb = $secretRepository->createQueryBuilder('s');
$qb->select('s')
->addSelect('(s.secret) as rawSecret')
->where('s.name = :name')
->setParameter('name',$name)
->orderBy('s.name','ASC');
$result = $qb->getQuery()->getSingleResult();
$actualSecretObject = $result[0];
$actualRawSecret = $result['rawSecret'];
self::assertInstanceOf($className,$actualSecretObject);
self::assertEquals($newSecretObject->getSecret(), $actualSecretObject->getSecret());
self::assertEquals($newSecretObject->getName(), $actualSecretObject->getName());
// Make sure it is encrypted
self::assertNotEquals($newSecretObject->getSecret(),$actualRawSecret);
self::assertStringEndsWith(Encrypt::ENCRYPTION_MARKER,$actualRawSecret);
}
/**
* @covers Entity\Annotation\Secret::getSecret
* @covers Entity\Annotation\Secret::getName
*/
public function testAnnotationSecretsAreEncryptedInDatabase(): void
{
$this->testSecretsAreEncryptedInDatabase(Entity\Annotation\Secret::class);
}
/**
* @covers Entity\Attribute\Secret::getSecret
* @covers Entity\Attribute\Secret::getName
* @requires PHP 8.0
*/
public function testAttributeSecretsAreEncryptedInDatabase(): void
{
$this->testSecretsAreEncryptedInDatabase(Entity\Attribute\Secret::class);
}
}