Completed
Push — master ( c9eeb2...84d5f3 )
by Baldur
03:47 queued 01:58
created

OrderTest::testTransactionData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

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