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
|
|
|
|