You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.7 KiB

<?php
/*
* @copyright NetMonsters <team@netmonsters.ru>
* @link http://netmonsters.ru
* @package Majestic
* @subpackage UnitTests
* @since 2011-10-27
*
* Unit tests for Captcha class
*/
require_once dirname(__FILE__) . '/../../session/Session.php';
require_once dirname(__FILE__) . '/../../captcha/Captcha.php';
class CaptchaTest extends PHPUnit_Framework_TestCase
{
private $captcha;
protected $width = 200;
protected $height = 70;
public function setUp()
{
$this->captcha = new Captcha();
}
/**
* @TODO: give a path to custom font as a param
*/
public function testGetImage()
{
$token = $this->captcha->getToken();
$image = $this->captcha->getImage($token);
$this->assertNotNull($image);
$my_image = $this->createBlankImage();
$this->assertNotSame($image, $my_image);
}
public function testGetImageWrongToken()
{
$token = $this->captcha->getToken();
$image = $this->captcha->getImage('tony');
$this->assertNotNull($image);
$my_image = $this->createBlankImage();
$this->assertSame($image, $my_image);
}
public function testGetImageEmptyCode()
{
$token = $this->captcha->getToken();
Session::set('_ccode', '');
$image = $this->captcha->getImage($token);
$this->assertNotNull($image);
$my_image = $this->createBlankImage();
$this->assertSame($image, $my_image);
}
public function testGetToken()
{
$token = $this->captcha->getToken();
$code = Session::get('_ccode');
$this->assertNotEmpty($token);
$this->assertNotEmpty($code);
$this->assertSame(5, strlen($code));
$this->assertSame(Session::get('_ctoken'), $token);
$this->assertSame(32, strlen($token));
}
public function testCheckCode()
{
$token = Session::get('_ctoken');
$code = Session::get('_ccode');
$this->assertFalse($this->captcha->checkCode($token . 'asd', $code));
$this->assertSame(Session::get('_ctoken'), $token);
$this->assertTrue($this->captcha->checkCode($token, $code));
$this->assertNull(Session::get('_ctoken'));
}
public function tearDown()
{
$sid = session_id();
if (!empty($sid)) {
Session::destroy();
}
}
private function createBlankImage()
{
$image = imagecreatetruecolor($this->width, $this->height);
$background = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, $this->width, $this->height, $background);
ob_start();
imagejpeg($image, '', 100);
return ob_get_clean();
}
}