Completed
Push — master ( 6d4fa7...0e9f14 )
by Valentyn
04:46
created

UsersFixtures::createAdmin()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 0
cts 8
cp 0
rs 9.7998
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 6
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_ID = 1;
15
    const TESTER_EMAIL = '[email protected]';
16
    const TESTER_USERNAME = 'tester_fixture';
17
    const TESTER_PASSWORD = '123456';
18
    const TESTER_API_TOKEN = 'tester_api_token';
19
    const TESTER_EMAIL_CONFIRMATION_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb690';
20
    const TESTER_PASSWORD_RECOVERY_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb691';
21
22
    const MODER_ID = 2;
23
    const MODER_EMAIL = '[email protected]';
24
    const MODER_USERNAME = 'moder_fixture';
25
    const MODER_PASSWORD = '1234567';
26
    const MODER_API_TOKEN = 'moder_api_token';
27
28
    const ADMIN_ID = 3;
29
    const ADMIN_EMAIL = '[email protected]';
30
    const ADMIN_USERNAME = 'admin_fixture';
31
    const ADMIN_PASSWORD = '12345678';
32
    const ADMIN_API_TOKEN = 'admin_api_token';
33
34
    /**
35
     * @param ObjectManager $manager
36
     *
37
     * @throws \Doctrine\DBAL\DBALException
38
     * @throws \Doctrine\ORM\ORMException
39
     */
40
    public function load(ObjectManager $manager): void
41
    {
42
        if ($manager instanceof EntityManager === false) {
43
            throw new \InvalidArgumentException('UsersFixtures $manager should be instance of EntityManager');
44
        }
45
        /* @var $manager EntityManager */
46
47
        // user will get id = 1, moderId = 2 and so on
48
        $manager->getConnection()->exec("ALTER SEQUENCE users_id_seq RESTART WITH 1; UPDATE users SET id=nextval('users_id_seq');");
49
50
        $user = $this->createUser();
51
        $moder = $this->createModer();
52
        $admin = $this->createAdmin();
53
54
        $manager->persist($user);
55
        $manager->persist($moder);
56
        $manager->persist($admin);
57
        $manager->flush();
58
59
        // Tester
60
        $this->createTestApiToken($user, self::TESTER_API_TOKEN, $manager);
61
        $this->createEmailConfirmationToken($user, self::TESTER_EMAIL_CONFIRMATION_TOKEN, $manager);
62
        $this->createPasswordRecoveryToken($user, self::TESTER_PASSWORD_RECOVERY_TOKEN, $manager);
63
        // Moder
64
        $this->createTestApiToken($moder, self::MODER_API_TOKEN, $manager);
65
        // Admin
66
        $this->createTestApiToken($admin, self::ADMIN_API_TOKEN, $manager);
67
    }
68
69
    private function createUser()
70
    {
71
        $user = new User(self::TESTER_EMAIL, self::TESTER_USERNAME, self::TESTER_PASSWORD);
72
        $profile = $user->getProfile();
73
        $profile->setFirstName('First')->setLastName('Last');
74
75
        for ($i = 3; $i-- > 0;) {
76
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
77
        }
78
79
        return $user;
80
    }
81
82
    private function createModer()
83
    {
84
        $user = new User(self::MODER_EMAIL, self::MODER_USERNAME, self::MODER_PASSWORD);
85
        $profile = $user->getProfile();
86
        $profile->setFirstName('First')->setLastName('Last');
87
88
        return $user;
89
    }
90
91
    private function createAdmin()
92
    {
93
        $user = new User(self::ADMIN_EMAIL, self::ADMIN_USERNAME, self::ADMIN_PASSWORD);
94
        $user->getRolesObject()->addRole(UserRoles::ROLE_ADMIN);
95
96
        $profile = $user->getProfile();
97
        $profile->setFirstName('Admin')->setLastName('Admin');
98
99
        for ($i = 3; $i-- > 0;) {
100
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
101
        }
102
103
        return $user;
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 createTestApiToken(User $user, string $token, EntityManager $manager): void
114
    {
115
        $manager->getConnection()->exec("INSERT INTO users_api_tokens (id, user_id, token) VALUES (NEXTVAL('users_api_tokens_id_seq'), {$user->getId()}, '{$token}');");
116
    }
117
118
    /**
119
     * @param User          $user
120
     * @param string        $token
121
     * @param EntityManager $manager
122
     *
123
     * @throws \Doctrine\DBAL\DBALException
124
     */
125
    private function createEmailConfirmationToken(User $user, string $token, EntityManager $manager): void
126
    {
127
        $type = ConfirmationToken::TYPE_CONFIRM_EMAIL;
128
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}');");
129
    }
130
131
    /**
132
     * @param User          $user
133
     * @param string        $token
134
     * @param EntityManager $manager
135
     *
136
     * @throws \Doctrine\DBAL\DBALException
137
     */
138
    private function createPasswordRecoveryToken(User $user, string $token, EntityManager $manager): void
139
    {
140
        $type = ConfirmationToken::TYPE_PASSWORD_RECOVERY;
141
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}');");
142
    }
143
}
144