CreateOrReplaceOrderTest::getOrder()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 62
Code Lines 47

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 62
rs 9.1563
c 0
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Tests\Bpost\HttpRequestBuilder;
4
5
use Bpost\BpostApiClient\Bpost\HttpRequestBuilder\CreateOrReplaceOrder;
6
use Bpost\BpostApiClient\Bpost\Order;
7
use Bpost\BpostApiClient\Bpost\Order\Address;
8
use Bpost\BpostApiClient\Bpost\Order\Box;
9
use Bpost\BpostApiClient\Bpost\Order\Box\AtBpost;
10
use Bpost\BpostApiClient\Bpost\Order\Box\Option\CashOnDelivery;
11
use Bpost\BpostApiClient\Bpost\Order\Box\Option\Messaging;
12
use Bpost\BpostApiClient\Bpost\Order\Box\Option\SaturdayDelivery;
13
use Bpost\BpostApiClient\Bpost\Order\Line;
14
use Bpost\BpostApiClient\Bpost\Order\PugoAddress;
15
use Bpost\BpostApiClient\Bpost\Order\Sender;
16
use PHPUnit_Framework_TestCase;
0 ignored issues
show
Bug introduced by
The type PHPUnit_Framework_TestCase was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
17
18
class CreateOrReplaceOrderTest extends PHPUnit_Framework_TestCase
19
{
20
    /**
21
     * @param array  $input
22
     * @param string $url
23
     * @param string $xml
24
     * @param string $method
25
     * @param bool   $isExpectXml
26
     * @param array  $headers
27
     *
28
     * @return void
29
     *
30
     * @dataProvider dataResults
31
     */
32
    public function testResults(array $input, $url, $xml, $headers, $method, $isExpectXml)
33
    {
34
        $builder = new CreateOrReplaceOrder($input[0], $input[1]);
35
36
        $this->assertSame($url, $builder->getUrl());
37
        $this->assertSame($method, $builder->getMethod());
38
        $this->assertSame($xml, $builder->getXml());
39
        $this->assertSame($isExpectXml, $builder->isExpectXml());
40
        $this->assertSame($headers, $builder->getHeaders());
41
    }
42
43
    public function dataResults()
44
    {
45
        $accountId = '123456789';
46
47
        return array(
48
            array(
49
                'input' => array($this->getOrder(), $accountId),
50
                'url' => '/orders',
51
                'xml' => $this->getOrderXml(),
52
                'headers' => array('Content-type: application/vnd.bpost.shm-order-v3.3+XML'),
53
                'method' => 'POST',
54
                'isExpectXml' => false,
55
            ),
56
        );
57
    }
58
59
    /**
60
     * @return Order
61
     */
62
    private function getOrder()
63
    {
64
        $order = new Order('ref_1');
65
66
        $order->setCostCenter('Cost Center');
67
68
        $order->setLines(array(new Line('Product 1', 1)));
69
        $order->addLine(new Line('Product 1', 5));
70
71
        $senderAddress = new Address();
72
        $senderAddress->setStreetName('MUNT');
73
        $senderAddress->setNumber(1);
74
        $senderAddress->setBox(1);
75
        $senderAddress->setPostalCode(1000);
76
        $senderAddress->setLocality('Brussel');
77
        $senderAddress->setCountryCode('BE');
78
        $senderAddress->setBox(1);
79
80
        $pugoAddress = new PugoAddress();
81
        $pugoAddress->setStreetName('Turnhoutsebaan');
82
        $pugoAddress->setNumber(468);
83
        $pugoAddress->setBox('A');
84
        $pugoAddress->setPostalCode(2110);
85
        $pugoAddress->setLocality('Wijnegem');
86
        $pugoAddress->setCountryCode('BE');
87
88
        $sender = new Sender();
89
        $sender->setName('SENDER NAME');
90
        $sender->setCompany('SENDER COMPANY');
91
        $sender->setAddress($senderAddress);
92
        $sender->setEmailAddress('[email protected]');
93
        $sender->setPhoneNumber('022011111');
94
95
        $atBpost = new AtBpost();
96
97
        $atBpost->setOptions(array(
98
            new Messaging('infoDistributed', 'EN', null, '0476123456'),
99
            new Messaging('keepMeInformed', 'EN', null, '0032475123456'),
100
        ));
101
        $atBpost->addOption(new SaturdayDelivery());
102
        $atBpost->addOption(new CashOnDelivery(1251, 'BE19210023508812', 'GEBABEBB'));
103
104
        $atBpost->setWeight(2000);
105
106
        $atBpost->setPugoId(207500);
107
        $atBpost->setPugoName('WIJNEGEM');
108
        $atBpost->setPugoAddress($pugoAddress);
109
        $atBpost->setReceiverName('RECEIVER NAME');
110
        $atBpost->setReceiverCompany('RECEIVER COMPANY');
111
        $atBpost->setRequestedDeliveryDate('2020-10-22');
112
113
        $box = new Box();
114
        $box->setSender($sender);
115
        $box->setNationalBox($atBpost);
116
        $box->setRemark('bpack@bpost VAS 038 - COD+SAT+iD');
117
        $box->setAdditionalCustomerReference('Reference that can be used for cross-referencing');
118
119
        $order->setBoxes(array());
120
        $this->assertCount(0, $order->getBoxes());
121
        $order->addBox($box);
122
123
        return $order;
124
    }
125
126
    private function getOrderXml()
127
    {
128
        return <<< XML
129
<?xml version="1.0" encoding="utf-8"?>
130
<tns:order xmlns="http://schema.post.be/shm/deepintegration/v3/national" xmlns:common="http://schema.post.be/shm/deepintegration/v3/common" xmlns:tns="http://schema.post.be/shm/deepintegration/v3/" xmlns:international="http://schema.post.be/shm/deepintegration/v3/international" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.post.be/shm/deepintegration/v3/">
131
  <tns:accountId>123456789</tns:accountId>
132
  <tns:reference>ref_1</tns:reference>
133
  <tns:costCenter>Cost Center</tns:costCenter>
134
  <tns:orderLine>
135
    <tns:text>Product 1</tns:text>
136
    <tns:nbOfItems>1</tns:nbOfItems>
137
  </tns:orderLine>
138
  <tns:orderLine>
139
    <tns:text>Product 1</tns:text>
140
    <tns:nbOfItems>5</tns:nbOfItems>
141
  </tns:orderLine>
142
  <tns:box>
143
    <tns:sender>
144
      <common:name>SENDER NAME</common:name>
145
      <common:company>SENDER COMPANY</common:company>
146
      <common:address>
147
        <common:streetName>MUNT</common:streetName>
148
        <common:number>1</common:number>
149
        <common:box>1</common:box>
150
        <common:postalCode>1000</common:postalCode>
151
        <common:locality>Brussel</common:locality>
152
        <common:countryCode>BE</common:countryCode>
153
      </common:address>
154
      <common:emailAddress>[email protected]</common:emailAddress>
155
      <common:phoneNumber>022011111</common:phoneNumber>
156
    </tns:sender>
157
    <tns:nationalBox>
158
      <atBpost>
159
        <product>bpack@bpost</product>
160
        <options>
161
          <common:infoDistributed language="EN">
162
            <common:mobilePhone>0476123456</common:mobilePhone>
163
          </common:infoDistributed>
164
          <common:keepMeInformed language="EN">
165
            <common:mobilePhone>0032475123456</common:mobilePhone>
166
          </common:keepMeInformed>
167
          <common:saturdayDelivery/>
168
          <common:cod>
169
            <common:codAmount>1251</common:codAmount>
170
            <common:iban>BE19210023508812</common:iban>
171
            <common:bic>GEBABEBB</common:bic>
172
          </common:cod>
173
        </options>
174
        <weight>2000</weight>
175
        <pugoId>207500</pugoId>
176
        <pugoName>WIJNEGEM</pugoName>
177
        <pugoAddress>
178
          <common:streetName>Turnhoutsebaan</common:streetName>
179
          <common:number>468</common:number>
180
          <common:box>A</common:box>
181
          <common:postalCode>2110</common:postalCode>
182
          <common:locality>Wijnegem</common:locality>
183
          <common:countryCode>BE</common:countryCode>
184
        </pugoAddress>
185
        <receiverName>RECEIVER NAME</receiverName>
186
        <receiverCompany>RECEIVER COMPANY</receiverCompany>
187
        <requestedDeliveryDate>2020-10-22</requestedDeliveryDate>
188
      </atBpost>
189
    </tns:nationalBox>
190
    <tns:remark>bpack@bpost VAS 038 - COD+SAT+iD</tns:remark>
191
    <tns:additionalCustomerReference>Reference that can be used for cross-referencing</tns:additionalCustomerReference>
192
  </tns:box>
193
</tns:order>
194
195
XML;
196
    }
197
}
198