FeatureTypeActionTest::updateMetaAction()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 28
rs 9.472
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/*************************************************************************************/
3
/*      This file is part of the module FeatureType                                  */
4
/*                                                                                   */
5
/*      For the full copyright and license information, please view the LICENSE.txt  */
6
/*      file that was distributed with this source code.                             */
7
/*************************************************************************************/
8
9
namespace FeatureType\Tests;
10
11
use FeatureType\Action\FeatureTypeAction;
12
use FeatureType\Event\FeatureTypeAvMetaEvent;
13
use FeatureType\Event\FeatureTypeEvent;
14
use FeatureType\Model\FeatureFeatureTypeQuery;
15
use FeatureType\Model\FeatureTypeAvMeta;
16
use FeatureType\Model\FeatureTypeAvMetaQuery;
17
use Thelia\Model\Feature;
18
use Thelia\Model\FeatureAv;
19
use Thelia\Model\FeatureQuery;
20
use Thelia\Model\ModuleQuery;
21
use Thelia\Model\Module;
22
use Thelia\Tests\TestCaseWithURLToolSetup;
23
use FeatureType\Model\FeatureType;
24
use FeatureType\Model\FeatureTypeQuery;
25
26
/**
27
 * Class FeatureTypeActionTest
28
 * @package FeatureType\Tests
29
 * @author Gilles Bourgeat <[email protected]>
30
 */
31
class FeatureTypeActionTest extends TestCaseWithURLToolSetup
32
{
33
    /** @var string */
34
    protected $slugTest = 'test-php-unit';
35
36
    /** @var FeatureTypeAction */
37
    protected $action = null;
38
39
    /** @var FeatureType */
40
    protected $featureType = null;
41
42
    /** @var Feature */
43
    protected $feature = null;
44
45
    /** @var bool */
46
    protected $isActive = false;
47
48
    public function __construct()
49
    {
50
        parent::__construct();
51
52
        /** @var Module $module */
53
        if (null !== $module = ModuleQuery::create()->findOneByCode('FeatureType')) {
54
            if ($module->getActivate()) {
55
                $this->isActive = true;
56
            }
57
        }
58
59
        $this->action = new FeatureTypeAction($this->getContainer());
60
61
        $this->featureType = (new FeatureType())
62
            ->setSlug($this->slugTest)
63
            ->setInputType('text');
64
65
        $this->feature = FeatureQuery::create()->findOne();
66
    }
67
68
    public function testActions()
69
    {
70
        if (!$this->action) {
71
            return;
72
        }
73
74
        // if last test is wrong
75
        FeatureTypeQuery::create()->filterBySlug($this->slugTest)->delete();
76
77
        self::createAction();
78
        self::updateAction();
79
        self::associateAction();
80
        self::createMetaAction();
81
        self::updateMetaAction();
82
        self::dissociateAction();
83
        self::deleteAction();
84
    }
85
86
    protected function createAction()
87
    {
88
        $event = new FeatureTypeEvent($this->featureType);
89
90
        $this->action->create($event);
91
92
        $featureType = $event->getFeatureType();
93
94
        $this->assertNotEquals(null, $featureType->getId());
95
    }
96
97
    protected function updateAction()
98
    {
99
        $this->featureType->setInputType('number');
100
101
        $this->action->update(
102
            new FeatureTypeEvent($this->featureType)
103
        );
104
105
        $featureTypeGetSuccessTest = FeatureTypeQuery::create()
106
            ->findOneById($this->featureType->getId());
107
108
        // test if input type is number after update
109
        $this->assertEquals('number', $featureTypeGetSuccessTest->getInputType());
110
    }
111
112
    protected function associateAction()
113
    {
114
        $this->action->associate(
115
            (new FeatureTypeEvent($this->featureType))->setFeature($this->feature)
116
        );
117
118
        $featureFeatureType = FeatureFeatureTypeQuery::create()
119
            ->filterByFeatureId($this->feature->getId())
120
            ->filterByFeatureTypeId($this->featureType->getId())
121
            ->findOne();
122
123
        $this->assertNotEquals(null, $featureFeatureType);
124
    }
125
126
    protected function createMetaAction()
127
    {
128
        /** @var FeatureAv $featureAv */
129
        $featureAv = $this->feature->getFeatureAvs()->getFirst();
130
131
        $featureFeatureType = FeatureFeatureTypeQuery::create()
132
            ->filterByFeatureId($this->feature->getId())
133
            ->filterByFeatureTypeId($this->featureType->getId())
134
            ->findOne();
135
136
        $featureTypeAvMeta = (new FeatureTypeAvMeta())
137
            ->setFeatureFeatureTypeId($featureFeatureType->getId())
138
            ->setFeatureAvId($featureAv->getId())
139
            ->setValue("");
140
141
        $this->action->metaCreate(
142
            new FeatureTypeAvMetaEvent($featureTypeAvMeta)
143
        );
144
145
        $this->assertNotEquals(null, $featureTypeAvMeta->getId());
146
    }
147
148
    protected function updateMetaAction()
149
    {
150
        /** @var FeatureAv $featureAv */
151
        $featureAv = $this->feature->getFeatureAvs()->getFirst();
152
153
        $featureFeatureType = FeatureFeatureTypeQuery::create()
154
            ->filterByFeatureId($this->feature->getId())
155
            ->filterByFeatureTypeId($this->featureType->getId())
156
            ->findOne();
157
158
        $featureTypeAvMeta = FeatureTypeAvMetaQuery::create()
159
            ->filterByFeatureFeatureTypeId($featureFeatureType->getId())
160
            ->filterByFeatureAvId($featureAv->getId())
161
            ->findOne();
162
163
        $featureTypeAvMeta->setValue('test');
164
165
        $this->action->metaUpdate(
166
            new FeatureTypeAvMetaEvent($featureTypeAvMeta)
167
        );
168
169
        $featureTypeAvMetaTest = FeatureTypeAvMetaQuery::create()
170
            ->filterByFeatureFeatureTypeId($featureFeatureType->getId())
171
            ->filterByFeatureAvId($featureAv->getId())
172
            ->findOne();
173
174
        $this->assertEquals('test', $featureTypeAvMetaTest->getValue());
175
    }
176
177
    protected function dissociateAction()
178
    {
179
        $this->action->dissociate(
180
            (new FeatureTypeEvent($this->featureType))->setFeature($this->feature)
181
        );
182
183
        $featureFeatureType = FeatureFeatureTypeQuery::create()
184
            ->filterByFeatureId($this->feature->getId())
185
            ->filterByFeatureTypeId($this->featureType->getId())
186
            ->findOne();
187
188
        $this->assertEquals(null, $featureFeatureType);
189
    }
190
191
    protected function deleteAction()
192
    {
193
        $this->action->delete(
194
            new FeatureTypeEvent($this->featureType)
195
        );
196
197
        $featureTypeGetSuccessTest = FeatureTypeQuery::create()
198
            ->findOneById($this->featureType->getId());
199
200
        // test if input type is number after update
201
        $this->assertEquals(null, $featureTypeGetSuccessTest);
202
    }
203
}
204