Failed Conditions
Pull Request — experimental/sf (#31)
by Kentaro
06:59
created

EA04OrderCest   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 410
Duplicated Lines 17.07 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 70
loc 410
rs 10
c 0
b 0
f 0
wmc 20
lcom 1
cbo 5

16 Methods

Rating   Name   Duplication   Size   Complexity  
A _before() 0 6 1
A _after() 0 3 1
A order_受注検索() 0 17 1
A order_受注CSVダウンロード() 17 17 1
A order_受注情報のCSV出力項目変更設定() 18 18 1
A order_配送CSVダウンロード() 17 17 1
A order_配送情報のCSV出力項目変更設定() 18 18 1
B order_受注編集() 0 63 1
A order_受注削除() 0 31 1
A order_受注メール通知() 0 13 1
A order_一括メール通知() 0 12 1
A order_受注登録() 0 30 1
A order_pdfページをエクスポートする() 0 22 1
A order_出力pdfダウンロード() 0 31 1
A order_ー括受注のステータス変更() 0 45 3
A order_個別出荷済みステータス変更() 0 49 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
use Codeception\Util\Fixtures;
4
use Eccube\Entity\Master\OrderStatus;
5
use Page\Admin\CsvSettingsPage;
6
use Page\Admin\OrderEditPage;
7
use Page\Admin\OrderManagePage;
8
9
/**
10
 * @group admin
11
 * @group admin01
12
 * @group order
13
 * @group ea4
14
 */
15
class EA04OrderCest
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
16
{
17
    public function _before(\AcceptanceTester $I)
18
    {
19
        // すべてのテストケース実施前にログインしておく
20
        // ログイン後は管理アプリのトップページに遷移している
21
        $I->loginAsAdmin();
22
    }
23
24
    public function _after(\AcceptanceTester $I)
0 ignored issues
show
Unused Code introduced by
The parameter $I is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
25
    {
26
    }
27
28
    public function order_受注検索(\AcceptanceTester $I)
29
    {
30
        $I->wantTo('EA0401-UC01-T01(& UC01-T02, UC01-T03) 受注検索');
31
32
        $findOrders = Fixtures::get('findOrders'); // Closure
33
        $TargetOrders = array_filter($findOrders(), function ($Order) {
34
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
35
        });
36
        OrderManagePage::go($I)->検索();
37
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
38
39
        OrderManagePage::go($I)->検索('[email protected]');
40
        $I->see('検索結果:0件が該当しました', OrderManagePage::$検索結果_メッセージ);
41
42
        OrderManagePage::go($I)->詳細検索_電話番号('あああ');
43
        $I->see('検索条件に誤りがあります。', OrderManagePage::$検索結果_エラーメッセージ);
44
    }
45
46 View Code Duplication
    public function order_受注CSVダウンロード(\AcceptanceTester $I)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
47
    {
48
        $I->wantTo('EA0401-UC02-T01 受注CSVダウンロード');
49
50
        $findOrders = Fixtures::get('findOrders'); // Closure
51
        $TargetOrders = array_filter($findOrders(), function ($Order) {
52
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
53
        });
54
        $OrderListPage = OrderManagePage::go($I)->検索();
55
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
56
57
        $OrderListPage->受注CSVダウンロード実行();
58
        // make sure wait to download file completely
59
        $I->wait(10);
60
        $OrderCSV = $I->getLastDownloadFile('/^order_\d{14}\.csv$/');
61
        $I->assertGreaterOrEquals(count($TargetOrders), count(file($OrderCSV)), '検索結果以上の行数があるはず');
62
    }
63
64 View Code Duplication
    public function order_受注情報のCSV出力項目変更設定(\AcceptanceTester $I)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
65
    {
66
        $I->wantTo('EA0401-UC02-T02 受注情報のCSV出力項目変更設定');
67
68
        $findOrders = Fixtures::get('findOrders'); // Closure
69
        $TargetOrders = array_filter($findOrders(), function ($Order) {
70
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
71
        });
72
        $OrderListPage = OrderManagePage::go($I)->検索();
73
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
74
75
        /* 項目設定 */
76
        $OrderListPage->受注CSV出力項目設定();
77
78
        CsvSettingsPage::at($I);
79
        $value = $I->grabValueFrom(CsvSettingsPage::$CSVタイプ);
80
        $I->assertEquals(3, $value);
81
    }
82
83 View Code Duplication
    public function order_配送CSVダウンロード(\AcceptanceTester $I)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
84
    {
85
        $I->wantTo('EA0401-UC02-T01 配送CSVダウンロード');
86
87
        $findOrders = Fixtures::get('findOrders'); // Closure
88
        $TargetOrders = array_filter($findOrders(), function ($Order) {
89
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
90
        });
91
        $OrderListPage = OrderManagePage::go($I)->検索();
92
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
93
94
        $OrderListPage->配送CSVダウンロード実行();
95
        // make sure wait to download file completely
96
        $I->wait(10);
97
        $OrderCSV = $I->getLastDownloadFile('/^shipping_\d{14}\.csv$/');
98
        $I->assertGreaterOrEquals(count($TargetOrders), count(file($OrderCSV)), '検索結果以上の行数があるはず');
99
    }
100
101 View Code Duplication
    public function order_配送情報のCSV出力項目変更設定(\AcceptanceTester $I)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
102
    {
103
        $I->wantTo('EA0401-UC02-T02 配送情報のCSV出力項目変更設定');
104
105
        $findOrders = Fixtures::get('findOrders'); // Closure
106
        $TargetOrders = array_filter($findOrders(), function ($Order) {
107
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
108
        });
109
        $OrderListPage = OrderManagePage::go($I)->検索();
110
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
111
112
        /* 項目設定 */
113
        $OrderListPage->配送CSV出力項目設定();
114
115
        CsvSettingsPage::at($I);
116
        $value = $I->grabValueFrom(CsvSettingsPage::$CSVタイプ);
117
        $I->assertEquals(4, $value);
118
    }
119
120
    public function order_受注編集(\AcceptanceTester $I)
121
    {
122
        $I->wantTo('EA0401-UC05-T01(& UC05-T02/UC05-T03/UC06-T01) 受注編集');
123
124
        // 新規受付ステータスの受注を作る
125
        $createCustomer = Fixtures::get('createCustomer');
126
        $createOrders = Fixtures::get('createOrders');
127
        $newOrders = $createOrders($createCustomer(), 1, array(), OrderStatus::NEW);
128
129
        $OrderListPage = OrderManagePage::go($I)->検索($newOrders[0]->getOrderNo());
130
131
        $I->see('検索結果:1件が該当しました', OrderManagePage::$検索結果_メッセージ);
132
133
        /* 編集 */
134
        $OrderListPage->一覧_編集(1);
135
136
        $OrderRegisterPage = OrderEditPage::at($I)
137
            ->注文者パネルを開く()
138
            ->入力_姓('')
139
            ->受注情報登録();
140
141
        /* 異常系 */
142
        $I->see('入力されていません。', OrderEditPage::$姓_エラーメッセージ);
143
144
        /* 正常系 */
145
        $OrderRegisterPage
146
            ->入力_姓('aaa')
147
            ->入力_セイ('アアア')
148
            ->入力_メイ('アアア')
149
            ->入力_郵便番号('060-0000')
150
            ->入力_都道府県(['1' => '北海道'])
151
            ->入力_市区町村名('bbb')
152
            ->入力_番地_ビル名('bbb')
153
            ->入力_電話番号('111-111-111')
154
            ->入力_番地_ビル名('address 2')
155
            ->入力_支払方法(['4' => '郵便振替'])
156
            ->受注情報登録();
157
158
        $I->see('受注情報を保存しました。', OrderEditPage::$登録完了メッセージ);
159
160
        /* ステータス変更 */
161
        $OrderRegisterPage
162
            // 新規受付から遷移可能なステータスをセットする.
163
            ->入力_受注ステータス(['3' => '入金済み'])
164
            ->受注情報登録();
165
166
        $I->see('受注情報を保存しました。', OrderEditPage::$登録完了メッセージ);
167
168
        /* 明細の削除 */
169
        $itemName = $OrderRegisterPage->明細の項目名を取得(1);
170
        $OrderRegisterPage->明細を削除(1)
171
            ->acceptDeleteModal(1);
172
        $I->wait(2);
173
174
        // before submit
175
        $I->dontSee($itemName, "#table-form-field");
176
177
        // after submit
178
        $OrderRegisterPage->受注情報登録();
179
        $I->dontSee($itemName, "#table-form-field");
180
181
        $I->see('受注情報を保存しました。', OrderEditPage::$登録完了メッセージ);
182
    }
183
184
    public function order_受注削除(\AcceptanceTester $I)
185
    {
186
        $I->wantTo('EA0401-UC08-T01(& UC08-T02) 受注削除');
187
188
        $findOrders = Fixtures::get('findOrders'); // Closure
189
        $TargetOrders = array_filter($findOrders(), function ($Order) {
190
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
191
        });
192
193
        $OrderListPage = OrderManagePage::go($I)->検索();
194
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
195
196
        // 削除
197
        $OrderNumForDel = $OrderListPage->一覧_注文番号(1);
198
        $OrderListPage
199
            ->一覧_選択(1)
200
            ->一覧_削除()
201
            ->Accept_削除();
202
203
        $I->see('受注情報を削除しました', ['css' => '#page_admin_order > div > div.c-contentsArea > div.alert.alert-success.alert-dismissible.fade.show.m-3 > span']);
204
        $I->assertNotEquals($OrderNumForDel, $OrderListPage->一覧_注文番号(1));
205
206
        // 削除キャンセル
207
        $OrderNumForDontDel = $OrderListPage->一覧_注文番号(1);
208
        $OrderListPage
209
            ->一覧_選択(1)
210
            ->一覧_削除()
211
            ->Cancel_削除();
212
213
        $I->assertEquals($OrderNumForDontDel, $OrderListPage->一覧_注文番号(1));
214
    }
215
216
    public function order_受注メール通知(\AcceptanceTester $I)
217
    {
218
        $I->wantTo('EA0402-UC01-T01 受注メール通知');
219
220
        $I->resetEmails();
221
222
        OrderManagePage::go($I)
223
            ->一覧_メール通知(1);
224
225
        $I->seeEmailCount(2);
226
227
        $I->seeInLastEmailSubjectTo('[email protected]', '[EC-CUBE SHOP] 商品出荷のお知らせ');
228
    }
229
230
    public function order_一括メール通知(\AcceptanceTester $I)
231
    {
232
        $I->wantTo('EA0402-UC02-T01(& UC02-T02) 一括メール通知');
233
234
        $I->resetEmails();
235
236
        OrderManagePage::go($I)
237
            ->一覧_全選択()
238
            ->一括メール送信();
239
240
        $I->seeEmailCount(20);
241
    }
242
243
    public function order_受注登録(\AcceptanceTester $I)
244
    {
245
        $I->wantTo('EA0405-UC01-T01(& UC01-T02) 受注登録');
246
247
        $OrderRegisterPage = OrderEditPage::go($I)->受注情報登録();
248
249
        /* 異常系 */
250
        $I->dontSee('受注情報を保存しました。', OrderEditPage::$登録完了メッセージ);
251
252
        /* 正常系 */
253
        $OrderRegisterPage
254
            ->入力_支払方法(['4' => '郵便振替'])
255
            ->入力_姓('order1')
256
            ->入力_名('order1')
257
            ->入力_セイ('アアア')
258
            ->入力_メイ('アアア')
259
            ->入力_郵便番号('060-0000')
260
            ->入力_都道府県(['1' => '北海道'])
261
            ->入力_市区町村名('bbb')
262
            ->入力_番地_ビル名('bbb')
263
            ->入力_Eメール('[email protected]')
264
            ->入力_電話番号('111-111-111')
265
            ->注文者情報をコピー()
266
            ->入力_配送業者([1 => 'サンプル業者'])
267
            ->商品検索('パーコレーター')
268
            ->商品検索結果_選択(1)
269
            ->受注情報登録();
270
271
        $I->see('受注情報を保存しました。', OrderEditPage::$登録完了メッセージ);
272
    }
273
274
    public function order_pdfページをエクスポートする(\AcceptanceTester $I)
275
    {
276
        $I->wantTo('EA0401-UC02-T01 pdfページをエクスポートする');
277
278
        $findOrders = Fixtures::get('findOrders'); // Closure
279
        $TargetOrders = array_filter($findOrders(), function ($Order) {
280
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
281
        });
282
        $OrderListPage = OrderManagePage::go($I)->検索();
283
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
284
285
        $OrderListPage->すべてチェック();
286
        $OrderListPage->要素をクリック('#form_bulk #bulkExportPdf');
287
288
        // 別ウィンドウ
289
        $I->switchToWindow('newwin');
290
291
        // Check redirect to form pdf information
292
        $I->see('受注管理帳票出力', OrderManagePage::$タイトル要素);
293
294
        $I->closeTab();
295
    }
296
297
    public function order_出力pdfダウンロード(\AcceptanceTester $I)
298
    {
299
        $I->wantTo('EA0401-UC02-T01 出力pdfダウンロード');
300
301
        $findOrders = Fixtures::get('findOrders'); // Closure
302
        $TargetOrders = array_filter($findOrders(), function ($Order) {
303
            return $Order->getOrderStatus()->getId() != OrderStatus::PROCESSING;
304
        });
305
        $OrderListPage = OrderManagePage::go($I)->検索();
306
        $I->see('検索結果:'.count($TargetOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
307
308
        $OrderListPage->すべてチェック();
309
        $OrderListPage->要素をクリック('#form_bulk #bulkExportPdf');
310
311
        // 別ウィンドウ
312
        $I->switchToWindow('newwin');
313
314
        $I->see('受注管理帳票出力', OrderManagePage::$タイトル要素);
315
316
        $OrderListPage->PDFフォームを入力(['id' => 'order_pdf_note1'], 'Test note first');
317
        $OrderListPage->PDFフォームを入力(['id' => 'order_pdf_note2'], 'Test note second');
318
        $OrderListPage->PDFフォームを入力(['id' => 'order_pdf_note3'], 'Test note third');
319
        $OrderListPage->要素をクリック('#order_pdf_default');
320
        $OrderListPage->要素をクリック('#order_pdf_form .c-conversionArea .justify-content-end button.btn-ec-conversion');
321
        // make sure wait to download file completely
322
        $I->wait(5);
323
        $filename = $I->getLastDownloadFile('/^nouhinsyo\.pdf$/');
324
        $I->assertTrue(file_exists($filename));
325
326
        $I->closeTab();
327
    }
328
329
    public function order_ー括受注のステータス変更(\AcceptanceTester $I)
330
    {
331
        $I->wantTo('EA0405-UC06-T01_ー括受注のステータス変更');
332
333
        // 新規受付ステータスをキャンセルに変更する
334
        $entityManager = Fixtures::get('entityManager');
335
        $findOrders = Fixtures::get('findOrders');
336
        $NewOrders = array_filter($findOrders(), function ($Order) {
337
            return $Order->getOrderStatus()->getId() == OrderStatus::NEW;
338
        });
339
        $CancelStatus = $entityManager->getRepository('Eccube\Entity\Master\OrderStatus')->find(OrderStatus::CANCEL);
340
        foreach ($NewOrders as $newOrder) {
341
            $newOrder->setOrderStatus($CancelStatus);
342
        }
343
        $entityManager->flush();
344
345
        // 新規受付ステータスの受注を作る
346
        $createCustomer = Fixtures::get('createCustomer');
347
        $createOrders = Fixtures::get('createOrders');
348
        $newOrders = $createOrders($createCustomer(), 2, array());
349
        $Status = $entityManager->getRepository('Eccube\Entity\Master\OrderStatus')->find(OrderStatus::NEW);
350
        foreach ($newOrders as $newOrder) {
351
            $newOrder->setOrderStatus($Status);
352
        }
353
        $entityManager->flush();
354
355
        $NewOrders = array_filter($findOrders(), function ($Order) {
356
            return $Order->getOrderStatus()->getId() == OrderStatus::NEW;
357
        });
358
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::NEW);
359
        $I->see('検索結果:'.count($NewOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
360
361
        $DeliveredOrders = array_filter($findOrders(), function ($Order) {
362
            return $Order->getOrderStatus()->getId() == OrderStatus::DELIVERED;
363
        });
364
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::DELIVERED);
365
        $I->see('検索結果:'.count($DeliveredOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
366
367
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::NEW)
368
            ->一覧_全選択()
369
            ->受注ステータス変更('発送済み');
0 ignored issues
show
Documentation introduced by
'発送済み' is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
370
371
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::DELIVERED);
372
        $I->see('検索結果:'.(count($DeliveredOrders) + count($NewOrders)).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
373
    }
374
375
    public function order_個別出荷済みステータス変更(\AcceptanceTester $I)
376
    {
377
        $I->wantTo('EA0405-UC06-T02_個別出荷済みステータス変更');
378
379
        $I->resetEmails();
380
381
        // 新規受付ステータスをキャンセルに変更する
382
        $entityManager = Fixtures::get('entityManager');
383
        $findOrders = Fixtures::get('findOrders');
384
        $NewOrders = array_filter($findOrders(), function ($Order) {
385
            return $Order->getOrderStatus()->getId() == OrderStatus::NEW;
386
        });
387
        $CancelStatus = $entityManager->getRepository('Eccube\Entity\Master\OrderStatus')->find(OrderStatus::CANCEL);
388
        foreach ($NewOrders as $newOrder) {
389
            $newOrder->setOrderStatus($CancelStatus);
390
        }
391
        $entityManager->flush();
392
393
        // 新規受付ステータスの受注を作る
394
        $createCustomer = Fixtures::get('createCustomer');
395
        $createOrders = Fixtures::get('createOrders');
396
        $newOrders = $createOrders($createCustomer(), 2, array());
397
        $Status = $entityManager->getRepository('Eccube\Entity\Master\OrderStatus')->find(OrderStatus::NEW);
398
        foreach ($newOrders as $newOrder) {
399
            $newOrder->setOrderStatus($Status);
400
        }
401
        $entityManager->flush();
402
403
        $DeliveredOrders = array_filter($findOrders(), function ($Order) {
404
            return $Order->getOrderStatus()->getId() == OrderStatus::DELIVERED;
405
        });
406
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::DELIVERED);
407
        $I->see('検索結果:'.count($DeliveredOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
408
409
        $NewOrders = array_filter($findOrders(), function ($Order) {
410
            return $Order->getOrderStatus()->getId() == OrderStatus::NEW;
411
        });
412
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::NEW);
413
        $I->see('検索結果:'.count($NewOrders).'件が該当しました', OrderManagePage::$検索結果_メッセージ);
414
415
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::NEW)
416
            ->出荷済にする(1);
417
418
        $I->seeEmailCount(2);
419
        $I->seeInLastEmailSubjectTo('[email protected]', '[EC-CUBE SHOP] 商品出荷のお知らせ');
420
421
        OrderManagePage::go($I)->受注ステータス検索(OrderStatus::NEW);
422
        $I->see('検索結果:1件が該当しました', OrderManagePage::$検索結果_メッセージ);
423
    }
424
}
425
426
427
428
429
430
431
432
433