GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#4)
by Bob Olde
04:08
created

OrderSettingsTest::setMockFieldsService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 10
nc 1
nop 0
1
<?php
2
3
namespace NerdsAndCompany\Schematic\Commerce\Services;
4
5
use Craft\BaseTest;
6
use Craft\Commerce_OrderSettingsModel;
7
use Craft\Commerce_OrderSettingsService;
8
use Craft\Craft;
9
use Craft\DbCommand;
10
use Craft\DbConnection;
11
use Craft\FieldLayoutModel;
12
use Craft\FieldsService;
13
use NerdsAndCompany\Schematic\Models\Result;
14
use NerdsAndCompany\Schematic\Services\Fields;
15
use PHPUnit_Framework_MockObject_MockObject as Mock;
16
17
/**
18
 * Class OrderSettingsTest.
19
 *
20
 * @author    Nerds & Company
21
 * @copyright Copyright (c) 2015-2017, Nerds & Company
22
 * @license   MIT
23
 *
24
 * @see      http://www.nerds.company
25
 *
26
 * @coversDefaultClass \NerdsAndCompany\Schematic\Commerce\Services\OrderSettings
27
 * @covers ::__construct
28
 * @covers ::<!public>
29
 */
30
class OrderSettingsTest extends BaseTest
31
{
32
    //==============================================================================================================
33
    //=================================================  TESTS  ====================================================
34
    //==============================================================================================================
35
36
    /**
37
     * @covers ::export
38
     * @dataProvider provideValidOrderSettings
39
     *
40
     * @param OrderSettingModel[] $types
41
     * @param array               $expectedResult
42
     */
43
    public function testSuccessfulExport(array $types, array $expectedResult = [])
44
    {
45
        $this->setMockFieldsService();
46
        $this->setMockSchematicFields();
47
48
        $schematicOrderSettingsService = new OrderSettings();
49
50
        $actualResult = $schematicOrderSettingsService->export($types);
51
52
        $this->assertSame($expectedResult, $actualResult);
53
    }
54
55
    /**
56
     * @covers ::import
57
     * @dataProvider provideValidOrderSettingDefinitions
58
     *
59
     * @param array $typeDefinitions
60
     */
61
    public function testSuccessfulImport(array $typeDefinitions)
62
    {
63
        $this->setMockOrderSettingsService();
64
        $this->setMockDbConnection();
65
        $this->setMockSchematicFields();
66
67
        $schematicOrderSettingsService = new OrderSettings();
68
69
        $import = $schematicOrderSettingsService->import($typeDefinitions);
70
71
        $this->assertInstanceOf(Result::class, $import);
72
        $this->assertFalse($import->hasErrors());
73
    }
74
75
    /**
76
     * @covers ::import
77
     * @dataProvider provideValidOrderSettingDefinitions
78
     *
79
     * @param array $typeDefinitions
80
     */
81
    public function testImportWithForceOption(array $typeDefinitions)
82
    {
83
        $this->setMockOrderSettingsService();
84
        $this->setMockDbConnection();
85
        $this->setMockSchematicFields();
86
87
        $schematicOrderSettingsService = new OrderSettings();
88
89
        $import = $schematicOrderSettingsService->import($typeDefinitions, true);
90
91
        $this->assertInstanceOf(Result::class, $import);
92
        $this->assertFalse($import->hasErrors());
93
    }
94
95
    //==============================================================================================================
96
    //==============================================  PROVIDERS  ===================================================
97
    //==============================================================================================================
98
99
    /**
100
     * @return array
101
     */
102
    public function provideValidOrderSettings()
103
    {
104
        return [
105
            'single setting' => [
106
                'OrderSettings' => [
107
                    'setting1' => $this->getMockOrderSetting(),
108
                ],
109
                'expectedResult' => [
110
                    'order' => [
111
                        'name' => 'Order',
112
                        'fieldLayout' => [
113
                            'fields' => [],
114
                        ],
115
                    ],
116
                ],
117
            ],
118
        ];
119
    }
120
121
    /**
122
     * @return array
123
     */
124
    public function provideValidOrderSettingDefinitions()
125
    {
126
        return [
127
            'emptyArray' => [
128
                'settingDefinitions' => [],
129
            ],
130
            'single setting' => [
131
                'settingDefinitions' => [
132
                    'order' => [
133
                        'name' => 'Order',
134
                        'fieldLayout' => [
135
                            'fields' => [],
136
                        ],
137
                    ],
138
                ],
139
            ],
140
        ];
141
    }
142
143
    //==============================================================================================================
144
    //=================================================  MOCKS  ====================================================
145
    //==============================================================================================================
146
147
    /**
148
     * @return Mock|OrderSettingModel
149
     */
150
    private function getMockOrderSetting()
151
    {
152
        $mockOrderSetting = $this->getMockBuilder(Commerce_OrderSettingsModel::class)
153
            ->disableOriginalConstructor()
154
            ->getMock();
155
156
        $mockOrderSetting->expects($this->any())
157
            ->method('__get')
158
            ->willReturnMap([
159
                ['id', 1],
160
                ['fieldLayoutId', 1],
161
                ['handle', 'order'],
162
                ['name', 'Order'],
163
            ]);
164
165
        $mockOrderSetting->expects($this->any())
166
            ->method('getAllErrors')
167
            ->willReturn([
168
                'ohnoes' => 'horrible error',
169
            ]);
170
171
        return $mockOrderSetting;
172
    }
173
174
    /**
175
     * @return Mock|CraftFieldsService
176
     */
177
    private function setMockFieldsService()
178
    {
179
        $mockFieldsService = $this->getMockBuilder(FieldsService::class)
180
            ->disableOriginalConstructor()
181
            ->getMock();
182
183
        $mockFieldsService->expects($this->any())
184
            ->method('getLayoutById')
185
            ->with($this->isType('integer'))
186
            ->willReturn($this->getMockFieldLayout());
187
188
        $this->setComponent(Craft::app(), 'fields', $mockFieldsService);
189
190
        return $mockFieldsService;
191
    }
192
193
    /**
194
     * @return Mock|fields
195
     */
196
    private function setMockSchematicFields()
197
    {
198
        $mockSchematicFields = $this->getMockBuilder(Fields::class)
199
            ->disableOriginalConstructor()
200
            ->getMock();
201
202
        $mockSchematicFields->expects($this->any())
203
            ->method('getFieldLayoutDefinition')
204
            ->with($this->isInstanceOf(FieldLayoutModel::class))
205
            ->willReturn(['fields' => []]);
206
207
        $mockSchematicFields->expects($this->any())
208
            ->method('getFieldLayout')
209
            ->with($this->isType('array'))
210
            ->willReturn($this->getMockFieldLayout());
211
212
        $this->setComponent(Craft::app(), 'schematic_fields', $mockSchematicFields);
213
214
        return $mockSchematicFields;
215
    }
216
217
    /**
218
     * @return Mock|CategoriesService
219
     */
220
    private function setMockOrderSettingsService()
221
    {
222
        $mockOrderSettingsService = $this->getMockBuilder(Commerce_OrderSettingsService::class)
223
            ->disableOriginalConstructor()
224
            ->setMethods(['getOrderSettingByHandle', 'saveOrderSetting'])
225
            ->getMock();
226
227
        $mockOrderSetting = $this->getMockOrderSetting();
228
229
        $mockOrderSettingsService->expects($this->any())
230
            ->method('getOrderSettingByHandle')
231
            ->with('order')
232
            ->willReturn($mockOrderSetting);
233
234
        $this->setComponent(Craft::app(), 'commerce_orderSettings', $mockOrderSettingsService);
235
236
        return $mockOrderSettingsService;
237
    }
238
239
    /**
240
     * @return Mock|FieldLayoutModel
241
     */
242
    private function getMockFieldLayout()
243
    {
244
        $mockFieldLayout = $this->getMockBuilder(FieldLayoutModel::class)
245
            ->disableOriginalConstructor()
246
            ->getMock();
247
248
        return $mockFieldLayout;
249
    }
250
251
    /**
252
     * @return Mock|DbConnection
253
     */
254
    private function setMockDbConnection()
255
    {
256
        $mockDbConnection = $this->getMockBuilder(DbConnection::class)
257
            ->disableOriginalConstructor()
258
            ->setMethods(['createCommand'])
259
            ->getMock();
260
        $mockDbConnection->autoConnect = false; // Do not auto connect
261
262
        $mockDbCommand = $this->getMockDbCommand();
263
        $mockDbConnection->expects($this->any())->method('createCommand')->willReturn($mockDbCommand);
264
265
        Craft::app()->setComponent('db', $mockDbConnection);
266
267
        return $mockDbConnection;
268
    }
269
270
    /**
271
     * @return Mock|DbCommand
272
     */
273
    private function getMockDbCommand()
274
    {
275
        $mockDbCommand = $this->getMockBuilder(DbCommand::class)
276
            ->disableOriginalConstructor()
277
            ->setMethods(['insertOrUpdate'])
278
            ->getMock();
279
280
        return $mockDbCommand;
281
    }
282
}
283