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
05:11
created

OrderSettingsTest   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 254
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 1
dl 0
loc 254
rs 10
c 0
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A testSuccessfulExport() 0 11 1
A testSuccessfulImport() 0 14 1
A testImportWithForceOption() 0 13 1
A provideValidOrderSettings() 0 18 1
A provideValidOrderSettingDefinitions() 0 18 1
A getMockOrderSetting() 0 23 1
A setMockFieldsService() 0 15 1
A setMockSchematicFields() 0 20 1
A setMockOrderSettingsService() 0 18 1
A getMockFieldLayout() 0 8 1
A setMockDbConnection() 0 15 1
A getMockDbCommand() 0 9 1
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 $settingDefinitions
60
     */
61
    public function testSuccessfulImport(array $settingDefinitions)
62
    {
63
        $this->setMockOrderSettingsService();
64
        $this->setMockDbConnection();
65
        $this->setMockSchematicFields();
66
67
        $schematicOrderSettingsService = new OrderSettings();
68
69
        $import = $schematicOrderSettingsService->import($settingDefinitions);
70
71
        $this->assertInstanceOf(Result::class, $import);
72
        var_dump($import->getErrors());
0 ignored issues
show
Security Debugging Code introduced by
var_dump($import->getErrors()); looks like debug code. Are you sure you do not want to remove it? This might expose sensitive data.
Loading history...
73
        $this->assertFalse($import->hasErrors());
74
    }
75
76
    /**
77
     * @covers ::import
78
     * @dataProvider provideValidOrderSettingDefinitions
79
     *
80
     * @param array $settingDefinitions
81
     */
82
    public function testImportWithForceOption(array $settingDefinitions)
83
    {
84
        $this->setMockOrderSettingsService();
85
        $this->setMockDbConnection();
86
        $this->setMockSchematicFields();
87
88
        $schematicOrderSettingsService = new OrderSettings();
89
90
        $import = $schematicOrderSettingsService->import($settingDefinitions, true);
91
92
        $this->assertInstanceOf(Result::class, $import);
93
        $this->assertFalse($import->hasErrors());
94
    }
95
96
    //==============================================================================================================
97
    //==============================================  PROVIDERS  ===================================================
98
    //==============================================================================================================
99
100
    /**
101
     * @return array
102
     */
103
    public function provideValidOrderSettings()
104
    {
105
        return [
106
            'single setting' => [
107
                'OrderSettings' => [
108
                    'setting1' => $this->getMockOrderSetting(),
109
                ],
110
                'expectedResult' => [
111
                    'order' => [
112
                        'name' => 'Order',
113
                        'fieldLayout' => [
114
                            'fields' => [],
115
                        ],
116
                    ],
117
                ],
118
            ],
119
        ];
120
    }
121
122
    /**
123
     * @return array
124
     */
125
    public function provideValidOrderSettingDefinitions()
126
    {
127
        return [
128
            'emptyArray' => [
129
                'settingDefinitions' => [],
130
            ],
131
            'single setting' => [
132
                'settingDefinitions' => [
133
                    'order' => [
134
                        'name' => 'Order',
135
                        'fieldLayout' => [
136
                            'fields' => [],
137
                        ],
138
                    ],
139
                ],
140
            ],
141
        ];
142
    }
143
144
    //==============================================================================================================
145
    //=================================================  MOCKS  ====================================================
146
    //==============================================================================================================
147
148
    /**
149
     * @return Mock|OrderSettingModel
150
     */
151
    private function getMockOrderSetting()
152
    {
153
        $mockOrderSetting = $this->getMockBuilder(Commerce_OrderSettingsModel::class)
154
            ->disableOriginalConstructor()
155
            ->getMock();
156
157
        $mockOrderSetting->expects($this->any())
158
            ->method('__get')
159
            ->willReturnMap([
160
                ['id', 1],
161
                ['fieldLayoutId', 1],
162
                ['handle', 'order'],
163
                ['name', 'Order'],
164
            ]);
165
166
        $mockOrderSetting->expects($this->any())
167
            ->method('getAllErrors')
168
            ->willReturn([
169
                'ohnoes' => 'horrible error',
170
            ]);
171
172
        return $mockOrderSetting;
173
    }
174
175
    /**
176
     * @return Mock|CraftFieldsService
177
     */
178
    private function setMockFieldsService()
179
    {
180
        $mockFieldsService = $this->getMockBuilder(FieldsService::class)
181
            ->disableOriginalConstructor()
182
            ->getMock();
183
184
        $mockFieldsService->expects($this->any())
185
            ->method('getLayoutById')
186
            ->with($this->isType('integer'))
187
            ->willReturn($this->getMockFieldLayout());
188
189
        $this->setComponent(Craft::app(), 'fields', $mockFieldsService);
190
191
        return $mockFieldsService;
192
    }
193
194
    /**
195
     * @return Mock|fields
196
     */
197
    private function setMockSchematicFields()
198
    {
199
        $mockSchematicFields = $this->getMockBuilder(Fields::class)
200
            ->disableOriginalConstructor()
201
            ->getMock();
202
203
        $mockSchematicFields->expects($this->any())
204
            ->method('getFieldLayoutDefinition')
205
            ->with($this->isInstanceOf(FieldLayoutModel::class))
206
            ->willReturn(['fields' => []]);
207
208
        $mockSchematicFields->expects($this->any())
209
            ->method('getFieldLayout')
210
            ->with($this->isType('array'))
211
            ->willReturn($this->getMockFieldLayout());
212
213
        $this->setComponent(Craft::app(), 'schematic_fields', $mockSchematicFields);
214
215
        return $mockSchematicFields;
216
    }
217
218
    /**
219
     * @return Mock|CategoriesService
220
     */
221
    private function setMockOrderSettingsService()
222
    {
223
        $mockOrderSettingsService = $this->getMockBuilder(Commerce_OrderSettingsService::class)
224
            ->disableOriginalConstructor()
225
            ->setMethods(['getOrderSettingByHandle', 'saveOrderSetting'])
226
            ->getMock();
227
228
        $mockOrderSetting = $this->getMockOrderSetting();
229
230
        $mockOrderSettingsService->expects($this->any())
231
            ->method('getOrderSettingByHandle')
232
            ->with('order')
233
            ->willReturn($mockOrderSetting);
234
235
        $this->setComponent(Craft::app(), 'commerce_orderSettings', $mockOrderSettingsService);
236
237
        return $mockOrderSettingsService;
238
    }
239
240
    /**
241
     * @return Mock|FieldLayoutModel
242
     */
243
    private function getMockFieldLayout()
244
    {
245
        $mockFieldLayout = $this->getMockBuilder(FieldLayoutModel::class)
246
            ->disableOriginalConstructor()
247
            ->getMock();
248
249
        return $mockFieldLayout;
250
    }
251
252
    /**
253
     * @return Mock|DbConnection
254
     */
255
    private function setMockDbConnection()
256
    {
257
        $mockDbConnection = $this->getMockBuilder(DbConnection::class)
258
            ->disableOriginalConstructor()
259
            ->setMethods(['createCommand'])
260
            ->getMock();
261
        $mockDbConnection->autoConnect = false; // Do not auto connect
262
263
        $mockDbCommand = $this->getMockDbCommand();
264
        $mockDbConnection->expects($this->any())->method('createCommand')->willReturn($mockDbCommand);
265
266
        Craft::app()->setComponent('db', $mockDbConnection);
267
268
        return $mockDbConnection;
269
    }
270
271
    /**
272
     * @return Mock|DbCommand
273
     */
274
    private function getMockDbCommand()
275
    {
276
        $mockDbCommand = $this->getMockBuilder(DbCommand::class)
277
            ->disableOriginalConstructor()
278
            ->setMethods(['insertOrUpdate'])
279
            ->getMock();
280
281
        return $mockDbCommand;
282
    }
283
}
284