Issues (3641)

Zed/Locale/_support/Helper/LocaleDataHelper.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerTest\Zed\Locale\Helper;
9
10
use Codeception\Module;
11
use Generated\Shared\DataBuilder\LocaleBuilder;
12
use Generated\Shared\Transfer\LocaleTransfer;
13
use Orm\Zed\Locale\Persistence\SpyLocaleStoreQuery;
14
use Orm\Zed\Store\Persistence\SpyStoreQuery;
15
use ReflectionClass;
16
use Spryker\Zed\Locale\Business\Cache\LocaleCache;
17
use Spryker\Zed\Locale\Business\LocaleFacadeInterface;
18
use SprykerTest\Shared\Testify\Helper\LocatorHelperTrait;
19
20
class LocaleDataHelper extends Module
21
{
22
    use LocatorHelperTrait;
23
24
    /**
25
     * @var int
26
     */
27
    public const LOCALE_NAME_LENGTH_LIMIT = 5;
28
29
    /**
30
     * @param array $seedData
31
     *
32
     * @return \Generated\Shared\Transfer\LocaleTransfer
33
     */
34
    public function haveLocale(array $seedData = []): LocaleTransfer
35
    {
36
        $localeTransfer = $this->generateLocaleTransfer($seedData);
37
38
        if ($this->getLocaleFacade()->hasLocale($localeTransfer->getLocaleName())) {
0 ignored issues
show
The method getLocaleName() does not exist on Spryker\Shared\Kernel\Transfer\AbstractTransfer. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

38
        if ($this->getLocaleFacade()->hasLocale($localeTransfer->/** @scrutinizer ignore-call */ getLocaleName())) {

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
39
            $this->resetLocaleCacheClass();
40
41
            return $this->getLocaleFacade()->getLocale($localeTransfer->getLocaleName());
42
        }
43
44
        return $this->getLocaleFacade()->createLocale($localeTransfer->getLocaleName());
45
    }
46
47
    /**
48
     * @param int $idStore
49
     * @param int $idLocale
50
     *
51
     * @return int
52
     */
53
    public function haveLocaleStore(int $idStore, int $idLocale): int
54
    {
55
        $localeStoreEntity = $this->createLocaleStorePropelQuery()
56
            ->filterByFkStore($idStore)
57
            ->filterByFkLocale($idLocale)
58
            ->findOneOrCreate();
59
60
        $localeStoreEntity->save();
61
62
        return $localeStoreEntity->getIdLocaleStore();
63
    }
64
65
    /**
66
     * @param int $idStore
67
     * @param int $idLocale
68
     *
69
     * @return bool
70
     */
71
    public function localeStoreExists(int $idStore, int $idLocale): bool
72
    {
73
        return $this->createLocaleStorePropelQuery()
74
            ->filterByFkStore($idStore)
75
            ->filterByFkLocale($idLocale)
76
            ->exists();
77
    }
78
79
    /**
80
     * @param int $idStore
81
     *
82
     * @return void
83
     */
84
    public function deleteLocaleStore(int $idStore): void
85
    {
86
        $this->createLocaleStorePropelQuery()
87
            ->filterByFkStore($idStore)
88
            ->delete();
89
    }
90
91
    /**
92
     * @param int $idStore
93
     *
94
     * @return int
95
     */
96
    public function getDefaultLocaleByIdStore(int $idStore): int
97
    {
98
        return $this->createStorePropelQuery()
99
            ->findPk($idStore)
100
            ->getFkLocale();
101
    }
102
103
    /**
104
     * @return void
105
     */
106
    public function ensureStoreLocaleDatabaseTableIsEmpty(): void
107
    {
108
        $localeStoreQuery = $this->createLocaleStorePropelQuery();
109
        $localeStoreQuery->deleteAll();
110
    }
111
112
    /**
113
     * @param int $idLocale
114
     *
115
     * @return int
116
     */
117
    public function countLocaleStoreRelations(int $idLocale): int
118
    {
119
        return $this->createLocaleStorePropelQuery()
120
            ->filterByFkLocale($idLocale)
121
            ->count();
122
    }
123
124
    /**
125
     * @param string $storeName
126
     *
127
     * @return int
128
     */
129
    public function getDefaultLocaleIdByStoreName(string $storeName): int
130
    {
131
        return $this->createStorePropelQuery()
132
            ->findOneByName($storeName)
133
            ->getFkLocale();
134
    }
135
136
    /**
137
     * @return \Orm\Zed\Store\Persistence\SpyStoreQuery
138
     */
139
    protected function createStorePropelQuery(): SpyStoreQuery
140
    {
141
        return SpyStoreQuery::create();
142
    }
143
144
    /**
145
     * @return \Orm\Zed\Locale\Persistence\SpyLocaleStoreQuery
146
     */
147
    protected function createLocaleStorePropelQuery(): SpyLocaleStoreQuery
148
    {
149
        return SpyLocaleStoreQuery::create();
150
    }
151
152
    /**
153
     * @return \Spryker\Zed\Locale\Business\LocaleFacadeInterface
154
     */
155
    protected function getLocaleFacade(): LocaleFacadeInterface
156
    {
157
        return $this->getLocator()->locale()->facade();
158
    }
159
160
    /**
161
     * @param array $seedData
162
     *
163
     * @return \Generated\Shared\Transfer\LocaleTransfer|\Spryker\Shared\Kernel\Transfer\AbstractTransfer
164
     */
165
    protected function generateLocaleTransfer(array $seedData = [])
166
    {
167
        $localeTransfer = (new LocaleBuilder($seedData))->build();
168
169
        if (strlen($localeTransfer->getLocaleName()) > static::LOCALE_NAME_LENGTH_LIMIT) {
170
            return $this->generateLocaleTransfer($seedData);
171
        }
172
173
        return $localeTransfer;
174
    }
175
176
    /**
177
     * @return void
178
     */
179
    protected function resetLocaleCacheClass(): void
180
    {
181
        $class = new ReflectionClass(LocaleCache::class);
182
        $localeCache = $class->getProperty('localeCache');
183
        $localeCache->setAccessible(true);
184
        $localeCache->setValue([]);
185
186
        $localeCacheById = $class->getProperty('localeCacheById');
187
        $localeCacheById->setAccessible(true);
188
        $localeCacheById->setValue([]);
189
    }
190
}
191