AutoTreeTraitTestCase   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 1
dl 0
loc 123
rs 10
c 0
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A getModelClass() 0 4 1
A testGetParents() 0 16 1
A testGetParent() 0 7 1
A testGetRoot() 0 6 1
A testGetDescendants() 0 17 1
A testGetChildren() 0 10 1
A testGetLeaves() 0 10 1
A testGetPrev() 0 6 1
A testGetNext() 0 6 1
A testIsRoot() 0 8 1
A testIsChildOf() 0 10 1
A testIsLeaf() 0 6 1
1
<?php
2
/**
3
 * @link https://github.com/paulzi/yii2-auto-tree
4
 * @copyright Copyright (c) 2015 PaulZi <[email protected]>
5
 * @license MIT (https://github.com/paulzi/yii2-auto-tree/blob/master/LICENSE)
6
 */
7
8
namespace paulzi\autotree\tests;
9
10
use Yii;
11
12
/**
13
 * @author PaulZi <[email protected]>
14
 */
15
class AutoTreeTraitTestCase extends BaseTestCase
16
{
17
    /**
18
     * @return \yii\db\BaseActiveRecord
19
     */
20
    public function getModelClass()
21
    {
22
        return null;
23
    }
24
    
25
    public function testGetParents()
26
    {
27
        $modelClass = $this->getModelClass();
28
        
29
        $data = [1, 4, 9];
30
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(21)->parents));
31
32
        $data = [];
33
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(1)->parents));
34
35
        $data = [2, 7];
36
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(17)->getParents(2)->all()));
37
38
        $data = [26, 30];
39
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(38)->parents));
40
    }
41
42
    public function testGetParent()
43
    {
44
        $modelClass = $this->getModelClass();
45
        $this->assertEquals(5, $modelClass::findOne(12)->parent->id);
46
        $this->assertEquals(26, $modelClass::findOne(29)->getParent()->one()->getAttribute('id'));
47
        $this->assertEquals(null, $modelClass::findOne(1)->parent);
48
    }
49
50
    public function testGetRoot()
51
    {
52
        $modelClass = $this->getModelClass();
53
        $this->assertEquals(26, $modelClass::findOne(28)->root->id);
54
        $this->assertEquals(26, $modelClass::findOne(26)->getRoot()->one()->getAttribute('id'));
55
    }
56
57
    public function testGetDescendants()
58
    {
59
        $modelClass = $this->getModelClass();
60
61
        $data  = [8, 9, 10, 20, 21, 22, 23, 24, 25];
62
        $data2 = array_map(function ($value) { return $value->id; }, $modelClass::findOne(4)->descendants);
63
        sort($data2);
64
        $this->assertEquals($data, $data2);
65
66
        $data  = [2, 5, 6, 7];
67
        $data2 = array_map(function ($value) { return $value->id; }, $modelClass::findOne(2)->getDescendants(1, true)->all());
68
        sort($data2);
69
        $this->assertEquals($data, $data2);
70
71
        $data = [];
72
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(8)->descendants));
73
    }
74
75
    public function testGetChildren()
76
    {
77
        $modelClass = $this->getModelClass();
78
79
        $data = [8, 9, 10];
80
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(4)->children));
81
82
        $data = [];
83
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(28)->getChildren()->all()));
84
    }
85
86
    public function testGetLeaves()
87
    {
88
        $modelClass = $this->getModelClass();
89
90
        $data = [8, 20, 21, 22, 23, 24, 25];
91
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(4)->leaves));
92
93
        $data = [3, 8];
94
        $this->assertEquals($data, array_map(function ($value) { return $value->id; }, $modelClass::findOne(1)->getLeaves(2)->all()));
95
    }
96
97
    public function testGetPrev()
98
    {
99
        $modelClass = $this->getModelClass();
100
        $this->assertEquals(11, $modelClass::findOne(12)->prev->id);
101
        $this->assertEquals(null, $modelClass::findOne(20)->getPrev()->one());
102
    }
103
104
    public function testGetNext()
105
    {
106
        $modelClass = $this->getModelClass();
107
        $this->assertEquals(13, $modelClass::findOne(12)->next->id);
108
        $this->assertEquals(null, $modelClass::findOne(19)->getNext()->one());
109
    }
110
111
    public function testIsRoot()
112
    {
113
        $modelClass = $this->getModelClass();
114
        $this->assertTrue($modelClass::findOne(1)->isRoot());
115
        $this->assertTrue($modelClass::findOne(26)->isRoot());
116
        $this->assertFalse($modelClass::findOne(3)->isRoot());
117
        $this->assertFalse($modelClass::findOne(37)->isRoot());
118
    }
119
120
    public function testIsChildOf()
121
    {
122
        $modelClass = $this->getModelClass();
123
        $this->assertTrue($modelClass::findOne(10)->isChildOf($modelClass::findOne(1)));
124
        $this->assertTrue($modelClass::findOne(9)->isChildOf($modelClass::findOne(4)));
125
        $this->assertFalse($modelClass::findOne(12)->isChildOf($modelClass::findOne(15)));
126
        $this->assertFalse($modelClass::findOne(21)->isChildOf($modelClass::findOne(22)));
127
        $this->assertFalse($modelClass::findOne(8)->isChildOf($modelClass::findOne(8)));
128
        $this->assertFalse($modelClass::findOne(6)->isChildOf($modelClass::findOne(27)));
129
    }
130
131
    public function testIsLeaf()
132
    {
133
        $modelClass = $this->getModelClass();
134
        $this->assertTrue($modelClass::findOne(3)->isLeaf());
135
        $this->assertFalse($modelClass::findOne(4)->isLeaf());
136
    }
137
}