Completed
Push — master ( c760c9...0378e2 )
by Baldur
02:05
created

TaxRequestTest::testJsonSerialize()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 38
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 38
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 30
nc 1
nop 0
1
<?php
2
3
namespace LAShowroom\TaxJarBundle\Tests\Model\Tax;
4
5
use LAShowroom\TaxJarBundle\Model\Address;
6
use LAShowroom\TaxJarBundle\Model\LineItem;
7
use LAShowroom\TaxJarBundle\Model\Order;
8
use LAShowroom\TaxJarBundle\Model\Tax\TaxRequest;
9
use LAShowroom\TaxJarBundle\Model\TaxCategory;
10
11
class TaxRequestTest extends \PHPUnit_Framework_TestCase
12
{
13
    public function testJsonSerialize()
14
    {
15
        $request = self::getTestRequest();
16
17
        $this->assertEquals([
18
            'from_country' => 'US',
19
            'from_zip' => '92093',
20
            'from_state' => 'CA',
21
            'from_city' => 'La Jolla',
22
            'from_street' => '9500 Gilman Drive',
23
            'to_country' => 'US',
24
            'to_zip' => '90002',
25
            'to_state' => 'CA',
26
            'to_city' => 'Los Angeles',
27
            'to_street' => '1335 E 103rd St',
28
            'amount' => 15,
29
            'shipping' => 1.5,
30
            'line_items' => [
31
                0 => [
32
                    'id' => '1',
33
                    'quantity' => 1,
34
                    'product_tax_code' => '20010',
35
                    'unit_price' => 15,
36
                    'discount' => 0,
37
                ]
38
            ],
39
            'nexus_addresses' => [
40
                [
41
                    'id' => 'Main Location',
42
                    'country' => 'US',
43
                    'zip' => '92093',
44
                    'state' => 'CA',
45
                    'city' => 'La Jolla',
46
                    'street' => '9500 Gilman Drive',
47
                ]
48
            ],
49
        ], $request->toArray());
50
    }
51
52
    public function testSetNexusAddresses()
53
    {
54
        $order = new TaxRequest();
55
56
        $order->setNexusAddresses([
57
            'Main Location' => new Address('9500 Gilman Drive', 'La Jolla', 'CA', '92093', 'US'),
58
            'doge' => new Address('1335 E 103rd St', 'Los Angeles', 'CA', '90002', 'US'),
59
        ]);
60
61
        $this->assertCount(2, $order->getNexusAddresses());
62
        $this->assertArrayHasKey('Main Location', $order->getNexusAddresses());
63
        $this->assertArrayHasKey('doge', $order->getNexusAddresses());
64
    }
65
66
    public function testSetAddresses()
67
    {
68
        $order = new TaxRequest();
69
        $order->setFromAddress($address1 = new Address('9500 Gilman Drive', 'La Jolla', 'CA', '92093', 'US'));
70
        $order->setToAddress($address2 = new Address('1335 E 103rd St', 'Los Angeles', 'CA', '90002', 'US'));
71
72
        $this->assertEquals($address1, $order->getFromAddress());
73
        $this->assertEquals($address2, $order->getToAddress());
74
    }
75
76
    public function testSetLineItems()
77
    {
78
        $order = new TaxRequest();
79
        $order->setLineItems([
80
            $firstLineItem = new LineItem('1', 1, TaxCategory::CLOTHING, 15.00, 0.0),
81
            $secondLineItem = new LineItem('2', 1, TaxCategory::CLOTHING, 16.00, 0.0)
82
        ]);
83
84
        $this->assertCount(2, $order->getLineItems());
85
        $this->assertEquals([$firstLineItem, $secondLineItem], $order->getLineItems());
86
    }
87
88
    public function testCacheKeySameForSameData()
89
    {
90
        $this->assertEquals('tax_request_6e176a6f7410495036bb4980fdef538d', self::getTestRequest()->getCacheKey());
91
        $this->assertEquals('tax_request_6e176a6f7410495036bb4980fdef538d', self::getTestRequest()->getCacheKey());
92
    }
93
94
    public function testCacheKeyChangesAsDataChanged()
95
    {
96
        $order = self::getTestRequest();
97
        $this->assertEquals('tax_request_6e176a6f7410495036bb4980fdef538d', $order->getCacheKey());
98
99
        $order->setAmount(20.00);
100
101
        $this->assertEquals('tax_request_5c42a8050be9a9aec8a42c9e807939ac', $order->getCacheKey());
102
    }
103
//
104
105
106
    /**
107
     * @return TaxRequest
108
     */
109
    public static function getTestRequest()
110
    {
111
        $order = new TaxRequest();
112
        $order->setFromAddress(new Address('9500 Gilman Drive', 'La Jolla', 'CA', '92093', 'US'));
113
        $order->setToAddress(new Address('1335 E 103rd St', 'Los Angeles', 'CA', '90002', 'US'));
114
        $order->addLineItem(new LineItem('1', 1, TaxCategory::CLOTHING, 15.00, 0.0));
115
        $order->setAmount(15.0);
116
        $order->setShipping(1.5);
117
        $order->addNexusAddress('Main Location', new Address('9500 Gilman Drive', 'La Jolla', 'CA', '92093', 'US'));
118
119
        return $order;
120
    }
121
}
122