Blame view

framework/tests/forms/TreeDropdownFieldTest.php 3.6 KB
0084d336   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  <?php
  /**
   * @package framework
   * @subpackage tests
   */
  class TreeDropdownFieldTest extends SapphireTest {
  
  	protected static $fixture_file = 'TreeDropdownFieldTest.yml';
  
  	public function testTreeSearch(){
  
  		$field = new TreeDropdownField('TestTree', 'Test tree', 'Folder');
  
  		// case insensitive search against keyword 'sub' for folders
  		$request = new SS_HTTPRequest('GET','url',array('search'=>'sub'));
  		$tree = $field->tree($request);
  		
  		$folder1 = $this->objFromFixture('Folder','folder1');
  		$folder1Subfolder1 = $this->objFromFixture('Folder','folder1-subfolder1');
  
  		$parser = new CSSContentParser($tree);
  		$cssPath = 'ul.tree li#selector-TestTree-'.$folder1->ID.' li#selector-TestTree-'.$folder1Subfolder1->ID.' a span.item';
  		$firstResult = $parser->getBySelector($cssPath);
  		$this->assertEquals(
  			(string)$firstResult[0], 
  			$folder1Subfolder1->Name, 
  			$folder1Subfolder1->Name.' is found, nested under '.$folder1->Name
  		);
  
  		$subfolder = $this->objFromFixture('Folder','subfolder');
  		$cssPath = 'ul.tree li#selector-TestTree-'.$subfolder->ID.' a span.item';
  		$secondResult = $parser->getBySelector($cssPath);
  		$this->assertEquals(
  			(string)$secondResult[0], 
  			$subfolder->Name, 
  			$subfolder->Name.' is found at root level'
  		);
  
  		// other folders which don't contain the keyword 'sub' are not returned in search results
  		$folder2 = $this->objFromFixture('Folder','folder2');
  		$cssPath = 'ul.tree li#selector-TestTree-'.$folder2->ID.' a span.item';
  		$noResult = $parser->getBySelector($cssPath);
  		$this->assertEquals(
  			$noResult, 
  			array(), 
  			$folder2.' is not found'
  		);
  
  		$field = new TreeDropdownField('TestTree', 'Test tree', 'File');
  
  		// case insensitive search against keyword 'sub' for files
  		$request = new SS_HTTPRequest('GET','url',array('search'=>'sub'));
  		$tree = $field->tree($request);
  
  		$parser = new CSSContentParser($tree);
  
  		// Even if we used File as the source object, folders are still returned because Folder is a File
  		$cssPath = 'ul.tree li#selector-TestTree-'.$folder1->ID.' li#selector-TestTree-'.$folder1Subfolder1->ID.' a span.item';
  		$firstResult = $parser->getBySelector($cssPath);
  		$this->assertEquals(
  			(string)$firstResult[0], 
  			$folder1Subfolder1->Name, 
  			$folder1Subfolder1->Name.' is found, nested under '.$folder1->Name
  		);
  
  		// Looking for two files with 'sub' in their name, both under the same folder
  		$file1 = $this->objFromFixture('File','subfolderfile1');
  		$file2 = $this->objFromFixture('File','subfolderfile2');
  		$cssPath = 'ul.tree li#selector-TestTree-'.$subfolder->ID.' li#selector-TestTree-'.$file1->ID.' a';
  		$firstResult = $parser->getBySelector($cssPath);
  		$this->assertGreaterThan(
  			0, 
  			count($firstResult), 
  			$file1->Name.' with ID '.$file1->ID.' is in search results'
  		);
  		$this->assertEquals(
  			(string)$firstResult[0], 
  			$file1->Name, 
  			$file1->Name.' is found nested under '.$subfolder->Name
  		);
  
  		$cssPath = 'ul.tree li#selector-TestTree-'.$subfolder->ID.' li#selector-TestTree-'.$file2->ID.' a';
  		$secondResult = $parser->getBySelector($cssPath);
  		$this->assertGreaterThan(
  			0,
  			count($secondResult), 
  			$file2->Name.' with ID '.$file2->ID.' is in search results'
  		);
  		$this->assertEquals(
  			(string)$secondResult[0], 
  			$file2->Name, 
  			$file2->Name.' is found nested under '.$subfolder->Name
  		);
  
  		// other files which don't include 'sub' are not returned in search results
  		$file3 = $this->objFromFixture('File','asdf');
  		$cssPath = 'ul.tree li#selector-TestTree-'.$file3->ID;
  		$noResult = $parser->getBySelector($cssPath);
  		$this->assertEquals(
  			$noResult, 
  			array(), 
  			$file3->Name.' is not found'
  		);
  	}
  
  }