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
Push — master ( a15255...979e92 )
by Bob Olde
10s
created

OrderSettingsTest   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 251
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

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

12 Methods

Rating   Name   Duplication   Size   Complexity  
A testSuccessfulExport() 0 11 1
A testSuccessfulImport() 0 13 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 16 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
        $this->assertFalse($import->hasErrors());
73
    }
74
75
    /**
76
     * @covers ::import
77
     * @dataProvider provideValidOrderSettingDefinitions
78
     *
79
     * @param array $settingDefinitions
80
     */
81
    public function testImportWithForceOption(array $settingDefinitions)
82
    {
83
        $this->setMockOrderSettingsService();
84
        $this->setMockDbConnection();
85
        $this->setMockSchematicFields();
86
87
        $schematicOrderSettingsService = new OrderSettings();
88
89
        $import = $schematicOrderSettingsService->import($settingDefinitions, 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
        $mockOrderSettingsService->expects($this->any())
228
            ->method('getOrderSettingByHandle')
229
            ->with('order')
230
            ->willReturn(null);
231
232
        $this->setComponent(Craft::app(), 'commerce_orderSettings', $mockOrderSettingsService);
233
234
        return $mockOrderSettingsService;
235
    }
236
237
    /**
238
     * @return Mock|FieldLayoutModel
239
     */
240
    private function getMockFieldLayout()
241
    {
242
        $mockFieldLayout = $this->getMockBuilder(FieldLayoutModel::class)
243
            ->disableOriginalConstructor()
244
            ->getMock();
245
246
        return $mockFieldLayout;
247
    }
248
249
    /**
250
     * @return Mock|DbConnection
251
     */
252
    private function setMockDbConnection()
253
    {
254
        $mockDbConnection = $this->getMockBuilder(DbConnection::class)
255
            ->disableOriginalConstructor()
256
            ->setMethods(['createCommand'])
257
            ->getMock();
258
        $mockDbConnection->autoConnect = false; // Do not auto connect
259
260
        $mockDbCommand = $this->getMockDbCommand();
261
        $mockDbConnection->expects($this->any())->method('createCommand')->willReturn($mockDbCommand);
262
263
        Craft::app()->setComponent('db', $mockDbConnection);
264
265
        return $mockDbConnection;
266
    }
267
268
    /**
269
     * @return Mock|DbCommand
270
     */
271
    private function getMockDbCommand()
272
    {
273
        $mockDbCommand = $this->getMockBuilder(DbCommand::class)
274
            ->disableOriginalConstructor()
275
            ->setMethods(['insertOrUpdate'])
276
            ->getMock();
277
278
        return $mockDbCommand;
279
    }
280
}
281