TaxonomyTermTest   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 30
dl 0
loc 68
rs 10
c 0
b 0
f 0
wmc 6

6 Methods

Rating   Name   Duplication   Size   Complexity  
A testTypeIsWrittenToChildren() 0 13 1
A testHierarchy() 0 11 1
A testSorting() 0 8 1
A testTypeIsInheritedByChildren() 0 5 1
A testRecursiveDeleteFromTopLevel() 0 8 1
A testGetTaxonomy() 0 8 1
1
<?php
2
3
namespace SilverStripe\Taxonomy\Tests;
4
5
use SilverStripe\Dev\SapphireTest;
6
use SilverStripe\Taxonomy\TaxonomyTerm;
7
use SilverStripe\Taxonomy\TaxonomyType;
8
9
class TaxonomyTermTest extends SapphireTest
10
{
11
    protected static $fixture_file = 'TaxonomyTermTest.yml';
12
13
    public function testGetTaxonomy()
14
    {
15
        // Top level
16
        $this->assertEquals($this->objFromFixture(TaxonomyTerm::class, 'plant')->getTaxonomy()->Name, 'Plant');
17
        // Second level
18
        $this->assertEquals($this->objFromFixture(TaxonomyTerm::class, 'vegetable')->getTaxonomy()->Name, 'Plant');
19
        // Third level
20
        $this->assertEquals($this->objFromFixture(TaxonomyTerm::class, 'carrot')->getTaxonomy()->Name, 'Plant');
21
    }
22
23
    public function testRecursiveDeleteFromTopLevel()
24
    {
25
        $this->objFromFixture(TaxonomyTerm::class, 'plant')->delete();
26
27
        $this->assertEquals(
28
            TaxonomyTerm::get()->filter(array('Name' => 'Carrot'))->Count(),
29
            0,
30
            "Removing top level term removes all children"
31
        );
32
    }
33
34
    public function testHierarchy()
35
    {
36
        $plant = $this->objFromFixture(TaxonomyTerm::class, 'plant');
37
        $vegetable = $this->objFromFixture(TaxonomyTerm::class, 'vegetable');
38
        $carrot = $this->objFromFixture(TaxonomyTerm::class, 'carrot');
39
40
        $this->assertEquals(2, $plant->Children()->Count());
41
        $this->assertEquals($plant->ID, $vegetable->Parent()->ID);
42
        $this->assertEquals(1, $vegetable->Children()->Count());
43
        $this->assertEquals($vegetable->ID, $carrot->Parent()->ID);
44
        $this->assertEquals(0, $carrot->Children()->Count());
45
    }
46
47
    public function testSorting()
48
    {
49
        $plant = $this->objFromFixture(TaxonomyTerm::class, 'plant');
50
        $vegetable = $this->objFromFixture(TaxonomyTerm::class, 'vegetable');
51
        $fruit = $this->objFromFixture(TaxonomyTerm::class, 'fruit');
52
53
        $this->assertEquals($fruit->ID, $plant->Children()->first()->ID);
54
        $this->assertEquals($vegetable->ID, $plant->Children()->last()->ID);
55
    }
56
57
    public function testTypeIsInheritedByChildren()
58
    {
59
        $this->assertSame('Beverage', $this->objFromFixture(TaxonomyTerm::class, 'fizzy')->getTaxonomyType());
60
61
        $this->assertSame('Beverage', $this->objFromFixture(TaxonomyTerm::class, 'lemonade')->getTaxonomyType());
62
    }
63
64
    public function testTypeIsWrittenToChildren()
65
    {
66
        $plant = $this->objFromFixture(TaxonomyTerm::class, 'plant');
67
        $beverageType = $this->objFromFixture(TaxonomyType::class, 'beverage');
68
69
        $plant->TypeID = $beverageType->ID;
70
        $plant->write();
71
72
        // Direct child
73
        $this->assertSame('Beverage', $this->objFromFixture(TaxonomyTerm::class, 'vegetable')->Type()->Name);
74
75
        // Grand child
76
        $this->assertSame('Beverage', $this->objFromFixture(TaxonomyTerm::class, 'carrot')->Type()->Name);
77
    }
78
}
79