Merge pull request #13517 from alifrumin/contribsearchsoftcredit
[civicrm-core.git] / tests / phpunit / CRM / Extension / InfoTest.php
1 <?php
2
3 /**
4 * Class CRM_Extension_InfoTest
5 * @group headless
6 */
7 class CRM_Extension_InfoTest extends CiviUnitTestCase {
8 public function setUp() {
9 parent::setUp();
10 $this->file = NULL;
11 }
12
13 public function tearDown() {
14 if ($this->file) {
15 unlink($this->file);
16 }
17 parent::tearDown();
18 }
19
20 public function testGood_file() {
21 $this->file = tempnam(sys_get_temp_dir(), 'infoxml-');
22 file_put_contents($this->file, "<extension key='test.foo' type='module'><file>foo</file><typeInfo><extra>zamboni</extra></typeInfo></extension>");
23
24 $info = CRM_Extension_Info::loadFromFile($this->file);
25 $this->assertEquals('test.foo', $info->key);
26 $this->assertEquals('foo', $info->file);
27 $this->assertEquals('zamboni', $info->typeInfo['extra']);
28 }
29
30 public function testBad_file() {
31 // <file> vs file>
32 $this->file = tempnam(sys_get_temp_dir(), 'infoxml-');
33 file_put_contents($this->file, "<extension key='test.foo' type='module'>file>foo</file></extension>");
34
35 $exc = NULL;
36 try {
37 $info = CRM_Extension_Info::loadFromFile($this->file);
38 }
39 catch (CRM_Extension_Exception $e) {
40 $exc = $e;
41 }
42 $this->assertTrue(is_object($exc));
43 }
44
45 public function testGood_string() {
46 $data = "<extension key='test.foo' type='module'><file>foo</file><typeInfo><extra>zamboni</extra></typeInfo></extension>";
47
48 $info = CRM_Extension_Info::loadFromString($data);
49 $this->assertEquals('test.foo', $info->key);
50 $this->assertEquals('foo', $info->file);
51 $this->assertEquals('zamboni', $info->typeInfo['extra']);
52 $this->assertEquals(array(), $info->requires);
53 }
54
55 public function testGood_string_extras() {
56 $data = "<extension key='test.bar' type='module'><file>testbar</file>
57 <classloader><psr4 prefix=\"Civi\\\" path=\"Civi\"/></classloader>
58 <requires><ext>org.civicrm.a</ext><ext>org.civicrm.b</ext></requires>
59 </extension>
60 ";
61
62 $info = CRM_Extension_Info::loadFromString($data);
63 $this->assertEquals('test.bar', $info->key);
64 $this->assertEquals('testbar', $info->file);
65 $this->assertEquals('Civi\\', $info->classloader[0]['prefix']);
66 $this->assertEquals('Civi', $info->classloader[0]['path']);
67 $this->assertEquals(array('org.civicrm.a', 'org.civicrm.b'), $info->requires);
68 }
69
70 public function testBad_string() {
71 // <file> vs file>
72 $data = "<extension key='test.foo' type='module'>file>foo</file></extension>";
73
74 $exc = NULL;
75 try {
76 $info = CRM_Extension_Info::loadFromString($data);
77 }
78 catch (CRM_Extension_Exception $e) {
79 $exc = $e;
80 }
81 $this->assertTrue(is_object($exc));
82 }
83
84 public function test_requirements() {
85 // Quicksearch requirement should get filtered out per extension-compatibility.json
86 $data = "<extension key='test.foo' type='module'><file>foo</file><requires><ext>example.test</ext><ext>com.ixiam.modules.quicksearch</ext></requires></extension>";
87
88 $info = CRM_Extension_Info::loadFromString($data);
89 $this->assertEquals(['example.test'], $info->requires);
90 }
91
92 }