UsersFixtures::createAdmin()   A
last analyzed

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\Countries\DataFixtures\CountriesFixtures;
6
use App\Users\Entity\ConfirmationToken;
7
use App\Users\Entity\User;
8
use App\Users\Entity\UserRoles;
9
use Doctrine\Bundle\FixturesBundle\Fixture;
10
use Doctrine\Common\Persistence\ObjectManager;
11
use Doctrine\ORM\EntityManager;
12
13
class UsersFixtures extends Fixture
14
{
15
    const TESTER_ID = 1;
16
    const TESTER_EMAIL = '[email protected]';
17
    const TESTER_USERNAME = 'tester_fixture';
18
    const TESTER_PASSWORD = '123456';
19
    const TESTER_API_TOKEN = 'tester_api_token';
20
    const TESTER_EMAIL_CONFIRMATION_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb690';
21
    const TESTER_PASSWORD_RECOVERY_TOKEN = '11kYJ3ut7aOISPQN0RSqceYDasNnb691';
22
    const TESTER_COUNTRY_CODE = CountriesFixtures::COUNTRY_POL_CODE;
23
24
    const MODER_ID = 2;
25
    const MODER_EMAIL = '[email protected]';
26
    const MODER_USERNAME = 'moder_fixture';
27
    const MODER_PASSWORD = '1234567';
28
    const MODER_API_TOKEN = 'moder_api_token';
29
30
    const ADMIN_ID = 3;
31
    const ADMIN_EMAIL = '[email protected]';
32
    const ADMIN_USERNAME = 'admin_fixture';
33
    const ADMIN_PASSWORD = '12345678';
34
    const ADMIN_API_TOKEN = 'admin_api_token';
35
36
    // MovieTester should be used in tests where user should already have some movies in library/wishlist etc.
37
    const MOVIE_TESTER_ID = 4;
38
    const MOVIE_TESTER_EMAIL = '[email protected]';
39
    const MOVIE_TESTER_USERNAME = 'movie_tester';
40
    const MOVIE_TESTER_PASSWORD = '123456';
41
    const MOVIE_TESTER_API_TOKEN = 'movie_tester_api_token';
42
    const MOVIE_TESTER_COUNTRY_CODE = CountriesFixtures::COUNTRY_UKR_CODE;
43
44
    /**
45
     * @param ObjectManager $manager
46
     *
47
     * @throws \Doctrine\DBAL\DBALException
48
     * @throws \Doctrine\ORM\ORMException
49
     */
50
    public function load(ObjectManager $manager): void
51
    {
52
        if ($manager instanceof EntityManager === false) {
53
            throw new \InvalidArgumentException('UsersFixtures $manager should be instance of EntityManager');
54
        }
55
        /* @var $manager EntityManager */
56
57
        // user will get id = 1, moderId = 2 and so on
58
        $manager->getConnection()->exec("ALTER SEQUENCE users_id_seq RESTART WITH 1; UPDATE users SET id=nextval('users_id_seq');");
59
60
        $user = $this->createUser();
61
        $moder = $this->createModer();
62
        $admin = $this->createAdmin();
63
        $movieTester = $this->createMovieTester();
64
65
        $manager->persist($user);
66
        $manager->persist($moder);
67
        $manager->persist($admin);
68
        $manager->persist($movieTester);
69
        $manager->flush();
70
71
        // Tester
72
        $this->createTestApiToken($user, self::TESTER_API_TOKEN, $manager);
73
        $this->createEmailConfirmationToken($user, self::TESTER_EMAIL_CONFIRMATION_TOKEN, $manager);
74
        $this->createPasswordRecoveryToken($user, self::TESTER_PASSWORD_RECOVERY_TOKEN, $manager);
75
        // Moder
76
        $this->createTestApiToken($moder, self::MODER_API_TOKEN, $manager);
77
        // Admin
78
        $this->createTestApiToken($admin, self::ADMIN_API_TOKEN, $manager);
79
        // Movie Tester
80
        $this->createTestApiToken($moder, self::MOVIE_TESTER_API_TOKEN, $manager);
81
    }
82
83
    private function createUser()
84
    {
85
        $user = new User(self::TESTER_EMAIL, self::TESTER_USERNAME, self::TESTER_PASSWORD);
86
        $profile = $user->getProfile();
87
        $profile->setFirstName('First')->setLastName('Last');
88
        $profile->setCountryCode(self::TESTER_COUNTRY_CODE);
89
90
        for ($i = 3; $i-- > 0;) {
91
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
92
        }
93
94
        return $user;
95
    }
96
97
    private function createModer()
98
    {
99
        $user = new User(self::MODER_EMAIL, self::MODER_USERNAME, self::MODER_PASSWORD);
100
        $user->getRolesObject()->addRole(UserRoles::ROLE_MODERATOR);
101
        $profile = $user->getProfile();
102
        $profile->setFirstName('First')->setLastName('Last');
103
104
        return $user;
105
    }
106
107
    private function createAdmin()
108
    {
109
        $user = new User(self::ADMIN_EMAIL, self::ADMIN_USERNAME, self::ADMIN_PASSWORD);
110
        $user->getRolesObject()->addRole(UserRoles::ROLE_ADMIN);
111
112
        $profile = $user->getProfile();
113
        $profile->setFirstName('Admin')->setLastName('Admin');
114
115
        for ($i = 3; $i-- > 0;) {
116
            $profile->addContacts("TestProvider #{$i}", "https://test.com/{$i}/info");
117
        }
118
119
        return $user;
120
    }
121
122
    private function createMovieTester()
123
    {
124
        $user = new User(self::MOVIE_TESTER_EMAIL, self::MOVIE_TESTER_USERNAME, self::MOVIE_TESTER_PASSWORD);
125
        $profile = $user->getProfile();
126
        $profile->setFirstName('First')->setLastName('Last');
127
        $profile->setCountryCode(self::MOVIE_TESTER_COUNTRY_CODE);
128
129
        return $user;
130
    }
131
132
    /**
133
     * @param User          $user
134
     * @param string        $token
135
     * @param EntityManager $manager
136
     *
137
     * @throws \Doctrine\DBAL\DBALException
138
     */
139
    private function createTestApiToken(User $user, string $token, EntityManager $manager): void
140
    {
141
        $manager->getConnection()->exec("INSERT INTO users_api_tokens (id, user_id, token) VALUES (NEXTVAL('users_api_tokens_id_seq'), {$user->getId()}, '{$token}');");
142
    }
143
144
    /**
145
     * @param User          $user
146
     * @param string        $token
147
     * @param EntityManager $manager
148
     *
149
     * @throws \Doctrine\DBAL\DBALException
150
     */
151
    private function createEmailConfirmationToken(User $user, string $token, EntityManager $manager): void
152
    {
153
        $type = ConfirmationToken::TYPE_CONFIRM_EMAIL;
154
        $expires_at = (new \DateTime('+1 day'))->format('Y-m-d');
155
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type, expires_at) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}', '{$expires_at}');");
156
    }
157
158
    /**
159
     * @param User          $user
160
     * @param string        $token
161
     * @param EntityManager $manager
162
     *
163
     * @throws \Doctrine\DBAL\DBALException
164
     */
165
    private function createPasswordRecoveryToken(User $user, string $token, EntityManager $manager): void
166
    {
167
        $type = ConfirmationToken::TYPE_PASSWORD_RECOVERY;
168
        $expires_at = (new \DateTime('+1 day'))->format('Y-m-d');
169
        $manager->getConnection()->exec("INSERT INTO users_confirmation_tokens (id, user_id, token, type, expires_at) VALUES (NEXTVAL('users_confirmation_tokens_id_seq'), {$user->getId()}, '{$token}', '{$type}', '{$expires_at}');");
170
    }
171
}
172