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