Completed
Push — master ( 8343ec...f446cd )
by Valentyn
12:07
created

UsersFixtures   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 7
dl 0
loc 107
ccs 0
cts 34
cp 0
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 21 2
A createUser() 0 12 2
A createAdmin() 0 14 2
A createTestApiToken() 0 4 1
A createEmailConfirmationToken() 0 5 1
A createPasswordRecoveryToken() 0 5 1
1
<?php
2
3
namespace App\Users\DataFixtures;
4
5
use App\Users\Entity\ConfirmationToken;
6
use App\Users\Entity\User;
7
use App\Users\Entity\UserRoles;
8
use Doctrine\Bundle\FixturesBundle\Fixture;
9
use Doctrine\Common\Persistence\ObjectManager;
10
use Doctrine\ORM\EntityManager;
11
12
class UsersFixtures extends Fixture
13
{
14
    const TESTER_EMAIL = '[email protected]';
15
    const TESTER_USERNAME = 'tester_fixture';
16
    const TESTER_PASSWORD = '123456';
17
    const TESTER_API_TOKEN = 'tester_api_token';
18
    const TESTER_EMAIL_CONFIRMATION_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb690';
19
    const TESTER_PASSWORD_RECOVERY_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb691';
20
21
    const ADMIN_EMAIL = '[email protected]';
22
    const ADMIN_USERNAME = 'admin_fixture';
23
    const ADMIN_PASSWORD = '12345678';
24
    const ADMIN_API_TOKEN = 'admin_api_token';
25
26
    /**
27
     * @param ObjectManager $manager
28
     *
29
     * @throws \Doctrine\DBAL\DBALException
30
     */
31
    public function load(ObjectManager $manager): void
32
    {
33
        $user = $this->createUser();
34
        $admin = $this->createAdmin();
35
36
        $manager->persist($user);
37
        $manager->persist($admin);
38
        $manager->flush();
39
40
        if ($manager instanceof EntityManager === false) {
41
            throw new \InvalidArgumentException('UsersFixtures $manager should be instance of EntityManager');
42
        }
43
44
        /* @var $manager EntityManager */
45
        // Tester
46
        $this->createTestApiToken($user, self::TESTER_API_TOKEN, $manager);
47
        $this->createEmailConfirmationToken($user, self::TESTER_EMAIL_CONFIRMATION_TOKEN, $manager);
48
        $this->createPasswordRecoveryToken($user, self::TESTER_PASSWORD_RECOVERY_TOKEN, $manager);
49
        // Admin
50
        $this->createTestApiToken($admin, self::ADMIN_API_TOKEN, $manager);
51
    }
52
53
    private function createUser()
54
    {
55
        $user = new User(self::TESTER_EMAIL, self::TESTER_USERNAME, self::TESTER_PASSWORD);
56
        $profile = $user->getProfile();
57
        $profile->setFirstName('First')->setLastName('Last');
58
59
        for ($i = 3; $i-- > 0;) {
60
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
61
        }
62
63
        return $user;
64
    }
65
66
    private function createAdmin()
67
    {
68
        $user = new User(self::ADMIN_EMAIL, self::ADMIN_USERNAME, self::ADMIN_PASSWORD);
69
        $user->getRolesObject()->addRole(UserRoles::ROLE_ADMIN);
70
71
        $profile = $user->getProfile();
72
        $profile->setFirstName('Admin')->setLastName('Admin');
73
74
        for ($i = 3; $i-- > 0;) {
75
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
76
        }
77
78
        return $user;
79
    }
80
81
    /**
82
     * @param User          $user
83
     * @param string        $token
84
     * @param EntityManager $manager
85
     *
86
     * @throws \Doctrine\DBAL\DBALException
87
     */
88
    private function createTestApiToken(User $user, string $token, EntityManager $manager): void
89
    {
90
        $manager->getConnection()->exec("INSERT INTO users_api_tokens (id, user_id, token) VALUES (NEXTVAL('users_api_tokens_id_seq'), {$user->getId()}, '{$token}');");
91
    }
92
93
    /**
94
     * @param User          $user
95
     * @param string        $token
96
     * @param EntityManager $manager
97
     *
98
     * @throws \Doctrine\DBAL\DBALException
99
     */
100
    private function createEmailConfirmationToken(User $user, string $token, EntityManager $manager): void
101
    {
102
        $type = ConfirmationToken::TYPE_CONFIRM_EMAIL;
103
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}');");
104
    }
105
106
    /**
107
     * @param User          $user
108
     * @param string        $token
109
     * @param EntityManager $manager
110
     *
111
     * @throws \Doctrine\DBAL\DBALException
112
     */
113
    private function createPasswordRecoveryToken(User $user, string $token, EntityManager $manager): void
114
    {
115
        $type = ConfirmationToken::TYPE_PASSWORD_RECOVERY;
116
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}');");
117
    }
118
}
119