diff options
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/Lib/PermissionDescriptionTest.php | 129 | ||||
-rw-r--r-- | tests/unit/TextTest.php | 33 | ||||
-rw-r--r-- | tests/unit/includes/TextTest.php | 84 | ||||
-rw-r--r-- | tests/unit/template_test.php | 6 |
4 files changed, 141 insertions, 111 deletions
diff --git a/tests/unit/Lib/PermissionDescriptionTest.php b/tests/unit/Lib/PermissionDescriptionTest.php index b1da5a0fd..97a39a2c8 100644 --- a/tests/unit/Lib/PermissionDescriptionTest.php +++ b/tests/unit/Lib/PermissionDescriptionTest.php @@ -1,6 +1,6 @@ <?php /* - * Copyright (c) 2016 Hubzilla + * Copyright (c) 2016-2017 Hubzilla * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,90 +21,75 @@ * SOFTWARE. */ -// Global namespace for fully qualified \App class. -namespace { - // General channel permissions in boot.php - // 0 = Only you - define ( 'PERMS_PUBLIC' , 0x0001 ); // anybody - define ( 'PERMS_NETWORK' , 0x0002 ); // anybody in this network - define ( 'PERMS_SITE' , 0x0004 ); // anybody on this site - define ( 'PERMS_CONTACTS' , 0x0008 ); // any of my connections - define ( 'PERMS_SPECIFIC' , 0x0080 ); // only specific connections - define ( 'PERMS_AUTHED' , 0x0100 ); // anybody authenticated (could include visitors from other networks) - define ( 'PERMS_PENDING' , 0x0200 ); // any connections including those who haven't yet been approved - // log levels in boot.php - define ( 'LOGGER_DEBUG', 2 ); +namespace Zotlabs\Tests\Unit\Lib; - // Stub global fully qualified \App class for static function calls - class App { - // Stub get_hostname() - public static function get_hostname() { - return 'phpunit'; - } - } -} +use phpmock\phpunit\PHPMock; +use Zotlabs\Tests\Unit\UnitTestCase; +use Zotlabs\Lib\PermissionDescription; -// Stub global functions used in PermissionDescription with the help of -// PHP's namespace resolution rules. -namespace Zotlabs\Lib { - // Stub global translate function t() - function t($s) { - return $s; - } - // Stub global log function logger() - function logger($msg, $level = LOGGER_NORMAL, $priority = LOG_INFO) { - // doesn't matter - } -} +/** + * @brief Unit Test case for PermissionDescription class. + */ +class PermissionDescriptionTest extends UnitTestCase { -// regular namespace for this unit test -namespace Zotlabs\Tests\Unit\Lib { + use PHPMock; - use Zotlabs\Tests\Unit\UnitTestCase; - use Zotlabs\Lib\PermissionDescription; + public function testFromDescription() { + $permDesc = PermissionDescription::fromDescription('test'); + $permDesc2 = PermissionDescription::fromDescription('test'); + $permDesc3 = PermissionDescription::fromDescription('test2'); - /** - * @brief Unit Test case for ConnectionPool class. - */ - class PermissionDescriptionTest extends UnitTestCase { + $this->assertEquals($permDesc, $permDesc2); + $this->assertNotEquals($permDesc, $permDesc3); + } - public function testFromDescription() { - $permDesc = PermissionDescription::fromDescription('test'); - $permDesc2 = PermissionDescription::fromDescription('test'); - $permDesc3 = PermissionDescription::fromDescription('test2'); + public function testFromStandalonePermission() { + // Create a stub for global function t() + $t = $this->getFunctionMock('Zotlabs\Lib', 't'); + $t->expects($this->atLeastOnce())->willReturnCallback( + function ($string) { + return $string; + } + ); + // Create a mock for global function logger() + $this->getFunctionMock('Zotlabs\Lib', 'logger'); - $this->assertEquals($permDesc, $permDesc2); - $this->assertNotEquals($permDesc, $permDesc3); - } + $permDescUnknown = PermissionDescription::fromStandalonePermission(-1); + $permDescSelf = PermissionDescription::fromStandalonePermission(0); - public function testFromStandalonePermission() { - $permDescUnknown = PermissionDescription::fromStandalonePermission(-1); - $permDescSelf = PermissionDescription::fromStandalonePermission(0); + $this->assertNull($permDescUnknown); + $this->assertNotNull($permDescSelf); + } - $this->assertNull($permDescUnknown); - $this->assertNotNull($permDescSelf); - } + public function testFromGlobalPermission() { + //$permDesc = PermissionDescription::fromGlobalPermission('view_profile'); - public function testFromGlobalPermission() { - //$permDesc = PermissionDescription::fromGlobalPermission('view_profile'); + $this->markTestIncomplete( + 'The method fromGlobalPermission() is not yet testable ...' + ); + } - $this->markTestIncomplete( - 'For this test we need more stubs...' - ); - } + public function testGetPermissionDescription() { + // Create a stub for global function t() + $t = $this->getFunctionMock('Zotlabs\Lib', 't'); + $t->expects($this->atLeastOnce())->willReturnCallback( + function ($string) { + return $string; + } + ); + // Create a mock for global function logger() + $this->getFunctionMock('Zotlabs\Lib', 'logger'); - public function testGetPermissionDescription() { + // Create a stub for the PermissionDescription class + $stub = $this->createMock(PermissionDescription::class); + $stub->method('get_permission_description') + ->will($this->returnArgument(0)); - // fromStandalonePermission uses get_permission_description(), so that will not help - //$permDescSelf = PermissionDescription::fromStandalonePermission(0); - //$permDescPublic = PermissionDescription::fromStandalonePermission(PERMS_PUBLIC); + $permDescSelf = PermissionDescription::fromStandalonePermission(0); + $this->assertInstanceOf(PermissionDescription::class, $permDescSelf); + $this->assertEquals($permDescSelf->get_permission_description(), 'Only me'); - $this->markTestIncomplete( - 'For this test we need a mock of PermissionDescription...' - ); - //$permDescSelf = - //$this->assertEquals($permDescSelf->, 'Only me'); - //$this->assertEquals($permDescPublic, 'Public'); - } + $permDescPublic = PermissionDescription::fromStandalonePermission(PERMS_PUBLIC); + $this->assertEquals($permDescPublic->get_permission_description(), 'Public'); } } diff --git a/tests/unit/TextTest.php b/tests/unit/TextTest.php deleted file mode 100644 index 48c04bc54..000000000 --- a/tests/unit/TextTest.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * this file contains tests for text.php - * - * @package test.util - */ - -use PHPUnit\Framework\TestCase; - -/** required, it is the file under test */ -require_once('include/text.php'); - -/** - * TestCase for the texter - * - * @author ken restivo - * @package test.util - */ -class TextTest extends TestCase { - public function testGoodEmail() { - $this->assertTrue(valid_email_regex('ken@spaz.org')); - } - public function testGoodEmail2() { - $this->assertTrue(valid_email_regex('ken@restivo.org')); - } - public function testGoodEmail3() { - $this->assertTrue(valid_email_regex('nobody@hubzilla.com')); - } - public function testBadEmail() { - $this->assertFalse(valid_email_regex('nobody!uses!these!any.more')); - } - -}
\ No newline at end of file diff --git a/tests/unit/includes/TextTest.php b/tests/unit/includes/TextTest.php new file mode 100644 index 000000000..e2c7cbb9a --- /dev/null +++ b/tests/unit/includes/TextTest.php @@ -0,0 +1,84 @@ +<?php + +namespace Zotlabs\Tests\Unit\includes; + +use Zotlabs\Tests\Unit\UnitTestCase; + +/** + * @brief Unit Test case for include/texter.php file. + * + * @author ken restivo + */ +class TextTest extends UnitTestCase { + + public function testGoodEmail() { + $this->assertTrue(valid_email_regex('ken@spaz.org')); + $this->assertTrue(valid_email_regex('ken@restivo.org')); + $this->assertTrue(valid_email_regex('nobody@hubzilla.org')); + $this->assertTrue(valid_email_regex('foo+nobody@hubzilla.org')); + } + + public function testBadEmail() { + $this->assertFalse(valid_email_regex('nobody!uses!these!any.more')); + $this->assertFalse(valid_email_regex('foo@bar@hubzilla.org')); + } + + public function testPurifyHTML() { + // linebreaks + $htmlbr = 'first line<br /> + one tab preserved + +empty line above'; + $this->assertEquals($htmlbr, purify_html($htmlbr)); + + // HTML5 is not supported by HTMLPurifier yet, test our own configuration + $html5elements = '<section>section<nav>navigation</nav><article>main<a href="http://hubzilla.org/">hubzilla.org</a></article></section><footer>footer</footer>'; + $this->assertEquals($html5elements, purify_html($html5elements)); + $this->assertEquals('<button>button label</button>', purify_html('<button>button label</button>')); + + // unsupported HTML5 elements + $this->assertEquals('Your HTML parser does not support HTML5 video.', purify_html('<video controls><source src="movie.ogg" type="video/ogg">Your HTML parser does not support HTML5 video.</video>')); + $this->assertEquals('Your HTML parser does not support HTML5 audio.', purify_html('<audio controls><source src="movie.ogg" "type="audio/ogg">Your HTML parser does not support HTML5 audio.</audio>')); + + // preserve f6 and bootstrap additional data attributes from our own configuration + $this->assertEquals('<div data-title="title">text</div>', purify_html('<div data-title="title">text</div>')); + $this->assertEquals('<ul data-accordion-menu=""><li>item1</li></ul>', purify_html('<ul data-accordion-menu><li>item1</li></ul>')); + $this->assertEquals('<ul><li>item1</li></ul>', purify_html('<ul data-accordion-menu-unknown><li>item1</li></ul>')); + } + + public function testPurifyHTML_html() { + $this->assertEquals('<div id="id01"><p class="class01">ids und classes</p></div>', purify_html('<div id="id01"><p class="class01">ids und classes</p></div>')); + $this->assertEquals('<div><p>close missing tags</p></div>', purify_html('<div><p>close missing tags')); + $this->assertEquals('<center>deprecated tag</center>', purify_html('<center>deprecated tag</center>')); + $this->assertEquals('<span></span><div>illegal nesting</div>', purify_html('<span><div>illegal nesting</div></span>')); + $this->assertEquals('<a href="#">link with target</a>', purify_html('<a href="#" target="_blank">link with target</a>')); + $this->assertEquals('<a href="#">link with rel="nofollow"</a>', purify_html('<a href="#" rel="nofollow">link with rel="nofollow"</a>')); + $this->assertEquals('a b', purify_html('a b')); + $this->assertEquals('ä ä € €', purify_html('ä ä € €')); + $this->assertEquals('<img src="picture.png" alt="text" />', purify_html('<img src="picture.png" alt="text">')); + $this->assertEquals('', purify_html('<iframe width="560" height="315" src="https://www.youtube.com/embed/kiNGx5oL7hk" frameborder="0" allowfullscreen></iframe>')); + } + + public function testPurifyHTML_js() { + $this->assertEquals('<div></div>', purify_html('<div><img src="javascript:evil();" onload="evil();"></div>')); + $this->assertEquals('<a href="#">link</a>', purify_html('<a href="#" onclick="alert(\'xss\')">link</a>')); + $this->assertEquals('', purify_html('<IMG SRC="javascript:alert('XSS');">')); + $this->assertEquals('', purify_html('<script>alter("42")</script>')); + } + + public function testPurifyHTML_css() { + $this->assertEquals('<p style="color:#FF0000;background-color:#fff;">red</p>', purify_html('<p style="color:red; background-color:#fff">red</p>')); + $this->assertEquals('<p>invalid color</p>', purify_html('<p style="color:invalid; background-color:#jjkkmm">invalid color</p>')); + $this->assertEquals('<p>invalid style</p>', purify_html('<p style="foo:bar">invalid style</p>')); + + // test our own CSS configuration + $this->assertEquals('<div>position removed</div>', purify_html('<div style="position:absolut">position removed</div>')); + $this->assertEquals('<div style="position:fixed;">position preserved</div>', purify_html('<div style="position:fixed">position preserved</div>', true)); + $this->assertEquals('<div>invalid position removed</div>', purify_html('<div style="position:invalid">invalid position removed</div>', true)); + + $this->assertEquals('<div>position removed</div>', purify_html('<div style="top:10px; left:3em;">position removed</div>')); + $this->assertEquals('<div style="top:10px;left:3em;right:50%;">position preserved</div>', purify_html('<div style="top:10px; left:3em; right:50%;">position preserved</div>', true)); + $this->assertEquals('<div>invalid position removed</div>', purify_html('<div style="top:10p">invalid position removed</div>', true)); + } + +} diff --git a/tests/unit/template_test.php b/tests/unit/template_test.php index 1f9f80531..dfaecb4a1 100644 --- a/tests/unit/template_test.php +++ b/tests/unit/template_test.php @@ -25,12 +25,6 @@ function x($s,$k = NULL) { } } -if(!function_exists('get_app')) { -function get_app() { - return new TemplateMockApp(); -} -} - /**
* TestCase for the template engine
*
|