14c488e71SAndreas Gohr<?php 24c488e71SAndreas Gohr 34c488e71SAndreas Gohrnamespace dokuwiki\plugin\captcha\test; 44c488e71SAndreas Gohr 55697ecf8SAndreas Gohruse dokuwiki\plugin\captcha\FileCookie; 64c488e71SAndreas Gohruse DokuWikiTest; 74c488e71SAndreas Gohr 84c488e71SAndreas Gohr/** 94c488e71SAndreas Gohr * @group plugin_captcha 104c488e71SAndreas Gohr * @group plugins 114c488e71SAndreas Gohr */ 124c488e71SAndreas Gohrclass HelperTest extends DokuWikiTest 134c488e71SAndreas Gohr{ 144c488e71SAndreas Gohr 154c488e71SAndreas Gohr protected $pluginsEnabled = array('captcha'); 164c488e71SAndreas Gohr 174c488e71SAndreas Gohr public function testConfig() 184c488e71SAndreas Gohr { 194c488e71SAndreas Gohr global $conf; 204c488e71SAndreas Gohr $conf['plugin']['captcha']['lettercount'] = 20; 214c488e71SAndreas Gohr 224c488e71SAndreas Gohr $helper = new \helper_plugin_captcha(); 234c488e71SAndreas Gohr 244c488e71SAndreas Gohr // generateCAPTCHA generates a maximum of 16 chars 2509b1e97eSAndreas Gohr $code = $helper->generateCaptchaCode("fixed", 0); 264c488e71SAndreas Gohr $this->assertEquals(16, strlen($code)); 274c488e71SAndreas Gohr } 284c488e71SAndreas Gohr 294c488e71SAndreas Gohr public function testDecrypt() 304c488e71SAndreas Gohr { 314c488e71SAndreas Gohr $helper = new \helper_plugin_captcha(); 324c488e71SAndreas Gohr 334c488e71SAndreas Gohr $rand = "12345"; 344c488e71SAndreas Gohr $secret = $helper->encrypt($rand); 354c488e71SAndreas Gohr $this->assertNotSame(false, $secret); 364c488e71SAndreas Gohr $this->assertSame($rand, $helper->decrypt($secret)); 374c488e71SAndreas Gohr 384c488e71SAndreas Gohr $this->assertFalse($helper->decrypt('')); 394c488e71SAndreas Gohr $this->assertFalse($helper->decrypt('X')); 404c488e71SAndreas Gohr } 414c488e71SAndreas Gohr 424c488e71SAndreas Gohr public function testCheck() 434c488e71SAndreas Gohr { 444c488e71SAndreas Gohr 454c488e71SAndreas Gohr global $INPUT, $ID; 464c488e71SAndreas Gohr 474c488e71SAndreas Gohr $helper = new \helper_plugin_captcha(); 484c488e71SAndreas Gohr 494c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_hp'), ''); 504c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_in'), 'X'); 514c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_sec'), ''); 524c488e71SAndreas Gohr 534c488e71SAndreas Gohr $this->assertFalse($helper->check(false)); 544c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_sec'), 'X'); 554c488e71SAndreas Gohr $this->assertFalse($helper->check(false)); 564c488e71SAndreas Gohr 574c488e71SAndreas Gohr // create the captcha and store the cookie 584c488e71SAndreas Gohr $rand = 0; 5909b1e97eSAndreas Gohr $code = $helper->generateCaptchaCode($helper->fixedIdent(), $rand); 604c488e71SAndreas Gohr 615697ecf8SAndreas Gohr $cookie = new FileCookie($helper->fixedIdent(), $rand); 625697ecf8SAndreas Gohr $cookie->set(); 634c488e71SAndreas Gohr 644c488e71SAndreas Gohr // check with missing secrect -> fail 654c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_in'), $code); 664c488e71SAndreas Gohr $this->assertFalse($helper->check(false)); 674c488e71SAndreas Gohr 684c488e71SAndreas Gohr // set secret -> success 694c488e71SAndreas Gohr $INPUT->set($this->getInaccessibleProperty($helper, 'field_sec'), $helper->encrypt($rand)); 704c488e71SAndreas Gohr $this->assertTrue($helper->check(false)); 714c488e71SAndreas Gohr 724c488e71SAndreas Gohr // try again, cookie is gone -> fail 734c488e71SAndreas Gohr $this->assertFalse($helper->check(true)); 744c488e71SAndreas Gohr 754c488e71SAndreas Gohr // set the cookie but change the ID -> fail 765697ecf8SAndreas Gohr $cookie->set(); 774c488e71SAndreas Gohr $ID = 'test:fail'; 784c488e71SAndreas Gohr $this->assertFalse($helper->check(false)); 794c488e71SAndreas Gohr } 804c488e71SAndreas Gohr 814c488e71SAndreas Gohr public function testGenerate() 824c488e71SAndreas Gohr { 834c488e71SAndreas Gohr $helper = new \helper_plugin_captcha(); 844c488e71SAndreas Gohr 854c488e71SAndreas Gohr $rand = 0; 8609b1e97eSAndreas Gohr $code = $helper->generateCaptchaCode($helper->fixedIdent(), $rand); 8709b1e97eSAndreas Gohr $newcode = $helper->generateCaptchaCode($helper->fixedIdent() . 'X', $rand); 884c488e71SAndreas Gohr $this->assertNotEquals($newcode, $code); 8909b1e97eSAndreas Gohr $newcode = $helper->generateCaptchaCode($helper->fixedIdent(), $rand + 0.1); 904c488e71SAndreas Gohr $this->assertNotEquals($newcode, $code); 914c488e71SAndreas Gohr } 924c488e71SAndreas Gohr 934c488e71SAndreas Gohr public function testCleanup() 944c488e71SAndreas Gohr { 954c488e71SAndreas Gohr // we need a complete fresh environment: 964c488e71SAndreas Gohr $this->setUpBeforeClass(); 974c488e71SAndreas Gohr 984c488e71SAndreas Gohr global $conf; 99*194d3386SAndreas Gohr $path = $conf['tmpdir'] . '/captcha/cookie/'; 100*194d3386SAndreas Gohr $today = "$path" . date('Y-m-d'); 1014c488e71SAndreas Gohr 1024c488e71SAndreas Gohr $helper = new \helper_plugin_captcha(); 1034c488e71SAndreas Gohr 1044c488e71SAndreas Gohr // nothing at all 105*194d3386SAndreas Gohr $dirs = glob("$path*"); 1064c488e71SAndreas Gohr $this->assertEquals(array(), $dirs); 1074c488e71SAndreas Gohr 1084c488e71SAndreas Gohr // store a cookie 1095697ecf8SAndreas Gohr $cookie = new FileCookie('test', 0); 1105697ecf8SAndreas Gohr $cookie->set(); 1114c488e71SAndreas Gohr 1124c488e71SAndreas Gohr // nothing but today's data 113*194d3386SAndreas Gohr $dirs = glob("$path*"); 1144c488e71SAndreas Gohr $this->assertEquals(array($today), $dirs); 1154c488e71SAndreas Gohr 1164c488e71SAndreas Gohr // add some fake cookies 1174c488e71SAndreas Gohr io_saveFile("$path/2017-01-01/foo.cookie", ''); 1184c488e71SAndreas Gohr io_saveFile("$path/2017-01-02/foo.cookie", ''); 1194c488e71SAndreas Gohr io_saveFile("$path/2017-01-03/foo.cookie", ''); 1204c488e71SAndreas Gohr io_saveFile("$path/2017-01-04/foo.cookie", ''); 1214c488e71SAndreas Gohr 1224c488e71SAndreas Gohr // all directories there 123*194d3386SAndreas Gohr $dirs = glob("$path*"); 1244c488e71SAndreas Gohr $this->assertEquals( 1254c488e71SAndreas Gohr array( 126*194d3386SAndreas Gohr "{$path}2017-01-01", 127*194d3386SAndreas Gohr "{$path}2017-01-02", 128*194d3386SAndreas Gohr "{$path}2017-01-03", 129*194d3386SAndreas Gohr "{$path}2017-01-04", 1304c488e71SAndreas Gohr $today, 1314c488e71SAndreas Gohr ), 1324c488e71SAndreas Gohr $dirs 1334c488e71SAndreas Gohr ); 1344c488e71SAndreas Gohr 1354c488e71SAndreas Gohr // clean up 1365697ecf8SAndreas Gohr FileCookie::clean(); 1374c488e71SAndreas Gohr 1384c488e71SAndreas Gohr // nothing but today's data 139*194d3386SAndreas Gohr $dirs = glob("$path*"); 1404c488e71SAndreas Gohr $this->assertEquals(array($today), $dirs); 1414c488e71SAndreas Gohr } 1424c488e71SAndreas Gohr} 143