Blame view

framework/tests/api/XMLDataFormatterTest.php 2.71 KB
385d70ca   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
  <?php
  class XMLDataFormatterTest extends SapphireTest {
  	protected $arguments, $contents, $tagName;
  
  	protected static $fixture_file = 'XMLDataFormatterTest.yml';
  
  	public function setUp() {
  		ShortcodeParser::get_active()->register('test_shortcode', array($this, 'shortcodeSaver'));
  
  		parent::setUp();
  	}
  
  	public function tearDown() {
  		ShortcodeParser::get_active()->unregister('test_shortcode');
  
  		parent::tearDown();
  	}
  
  	protected $extraDataObjects = array(
  		'XMLDataFormatterTest_DataObject'
  	);
  
  	public function testConvertDataObjectWithoutHeader() {
  		$formatter = new XMLDataFormatter();
  		$obj = $this->objFromFixture('XMLDataFormatterTest_DataObject', 'test-do');
  		$xml = new SimpleXMLElement('<?xml version="1.0"?>' . $formatter->convertDataObjectWithoutHeader($obj));
  		$this->assertEquals(
  			Director::absoluteBaseURL() . sprintf('api/v1/XMLDataFormatterTest_DataObject/%d.xml', $obj->ID),
  			(string) $xml['href']
  		);
  		$this->assertEquals('Test DataObject', (string) $xml->Name);
  		$this->assertEquals('Test Company', (string) $xml->Company);
  		$this->assertEquals($obj->ID, (int) $xml->ID);
  		$this->assertEquals(
  			'<Content><![CDATA[<a href="http://mysite.com">mysite.com</a> is a link in this HTML content.]]>'
  				. '</Content>',
  			$xml->Content->asXML()
  		);
  		$this->assertEquals(
  			'<a href="http://mysite.com">mysite.com</a> is a link in this HTML content.',
  			(string)$xml->Content
  		);
  	}
  
  	public function testShortcodesInDataObject() {
  		$formatter = new XMLDataFormatter();
  
  		$page = new XMLDataFormatterTest_DataObject();
  		$page->Content = 'This is some test content [test_shortcode]test[/test_shortcode]';
  
  		$xml = new SimpleXMLElement('<?xml version="1.0"?>' . $formatter->convertDataObjectWithoutHeader($page));
  		$this->assertEquals('This is some test content test', (string)$xml->Content);
  
  		$page->Content = '[test_shortcode,id=-1]';
  		$xml = new SimpleXMLElement('<?xml version="1.0"?>' . $formatter->convertDataObjectWithoutHeader($page));
  		$this->assertEmpty('', (string)$xml->Content);
  
  		$page->Content = '[bad_code,id=1]';
  
  		$xml = new SimpleXMLElement('<?xml version="1.0"?>' . $formatter->convertDataObjectWithoutHeader($page));
  		$this->assertContains('[bad_code,id=1]', (string)$xml->Content);
  	}
  
  	/**
  	 * Stores the result of a shortcode parse in object properties for easy testing access.
  	 */
  	public function shortcodeSaver($arguments, $content = null, $parser, $tagName = null) {
  		$this->arguments = $arguments;
  		$this->contents  = $content;
  		$this->tagName   = $tagName;
  		
  		return $content;
  	}
  
  }
  class XMLDataFormatterTest_DataObject extends DataObject implements TestOnly {
  
  	private static $db = array(
  		'Name' => 'Varchar(50)',
  		'Company' => 'Varchar(50)',
  		'Content' => 'HTMLText'
  	);
  
  }