Completed
Push — master ( b8ee44...86e435 )
by Jim
02:27
created

ArrTest::testExists()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: lenovo
5
 * Date: 6/13/2018
6
 * Time: 11:38 PM
7
 */
8
9
namespace TimSDK\Tests\Support;
10
11
use stdClass;
12
use TimSDK\Support\Arr;
13
use TimSDK\Support\Collection;
14
use TimSDK\Tests\TestCase;
15
16
class ArrTest extends TestCase
17
{
18
    public function testAccessible()
19
    {
20
        $this->assertTrue(Arr::accessible([]));
21
        $this->assertTrue(Arr::accessible([1, 2]));
22
        $this->assertTrue(Arr::accessible(['a' => 1, 'b' => 2]));
23
        $this->assertTrue(Arr::accessible(new Collection));
24
25
        $this->assertFalse(Arr::accessible(null));
26
        $this->assertFalse(Arr::accessible('abc'));
27
        $this->assertFalse(Arr::accessible(new stdClass));
28
        $this->assertFalse(Arr::accessible((object) ['a' => 1, 'b' => 2]));
29
    }
30
31
    public function testExists()
32
    {
33
        $this->assertTrue(Arr::exists([1], 0));
34
        $this->assertTrue(Arr::exists([null], 0));
35
        $this->assertTrue(Arr::exists(['a' => 1], 'a'));
36
        $this->assertTrue(Arr::exists(['a' => null], 'a'));
37
        $this->assertTrue(Arr::exists(new Collection(['a' => null]), 'a'));
38
39
        $this->assertFalse(Arr::exists([1], 1));
40
        $this->assertFalse(Arr::exists([null], 1));
41
        $this->assertFalse(Arr::exists(['a' => 1], 0));
42
        $this->assertFalse(Arr::exists(new Collection(['a' => null]), 'b'));
43
    }
44
45
    public function testForget()
46
    {
47
        $array = ['products' => ['desk' => ['price' => 100]]];
48
        Arr::forget($array, null);
49
        $this->assertEquals(['products' => ['desk' => ['price' => 100]]], $array);
50
51
        $array = ['products' => ['desk' => ['price' => 100]]];
52
        Arr::forget($array, []);
53
        $this->assertEquals(['products' => ['desk' => ['price' => 100]]], $array);
54
55
        $array = ['products' => ['desk' => ['price' => 100]]];
56
        Arr::forget($array, 'products.desk');
57
        $this->assertEquals(['products' => []], $array);
58
59
        $array = ['products' => ['desk' => ['price' => 100]]];
60
        Arr::forget($array, 'products.desk.price');
61
        $this->assertEquals(['products' => ['desk' => []]], $array);
62
63
        $array = ['products' => ['desk' => ['price' => 100]]];
64
        Arr::forget($array, 'products.final.price');
65
        $this->assertEquals(['products' => ['desk' => ['price' => 100]]], $array);
66
67
        $array = ['shop' => ['cart' => [150 => 0]]];
68
        Arr::forget($array, 'shop.final.cart');
69
        $this->assertEquals(['shop' => ['cart' => [150 => 0]]], $array);
70
71
        $array = ['products' => ['desk' => ['price' => ['original' => 50, 'taxes' => 60]]]];
72
        Arr::forget($array, 'products.desk.price.taxes');
73
        $this->assertEquals(['products' => ['desk' => ['price' => ['original' => 50]]]], $array);
74
75
        $array = ['products' => ['desk' => ['price' => ['original' => 50, 'taxes' => 60]]]];
76
        Arr::forget($array, 'products.desk.final.taxes');
77
        $this->assertEquals(['products' => ['desk' => ['price' => ['original' => 50, 'taxes' => 60]]]], $array);
78
    }
79
80
    public function testSet()
81
    {
82
        $array = ['products' => ['desk' => ['price' => 100]]];
83
        Arr::set($array, 'products.desk.price', 200);
84
        $this->assertEquals(['products' => ['desk' => ['price' => 200]]], $array);
85
    }
86
87
    public function testGet()
88
    {
89
        $array = ['products' => ['desk' => ['price' => 100]]];
90
        $value = Arr::get($array, 'products.desk');
91
        $this->assertEquals(['price' => 100], $value);
92
        $this->assertEquals('test', Arr::get($array, 'foo.bar', function () {
93
            return 'test';
94
        }));
95
    }
96
97
    public function testHas()
98
    {
99
        $array = ['products' => ['desk' => ['price' => 100]]];
100
101
        $this->assertTrue(Arr::has($array, 'products.desk'));
102
        $this->assertTrue(Arr::has($array, 'products.desk.price'));
103
        $this->assertFalse(Arr::has($array, 'products.foo'));
104
        $this->assertFalse(Arr::has($array, 'products.desk.foo'));
105
    }
106
107
    public function testOnly()
108
    {
109
        $array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
110
111
        $array = Arr::only($array, ['name', 'price']);
112
        $this->assertEquals(['name' => 'Desk', 'price' => 100], $array);
113
114
        $array = Arr::only($array, 'name,price');
115
        $this->assertEquals(['name' => 'Desk', 'price' => 100], $array);
116
    }
117
}
118