2015-08-27 23:30:35 +02:00
< ? php
class zerobinTest extends PHPUnit_Framework_TestCase
{
2015-10-03 15:52:37 +02:00
protected $_model ;
2015-08-27 23:30:35 +02:00
public function setUp ()
{
/* Setup Routine */
$this -> _model = zerobin_data :: getInstance ( array ( 'dir' => PATH . 'data' ));
serversalt :: setPath ( PATH . 'data' );
$this -> reset ();
}
public function tearDown ()
{
/* Tear Down Routine */
2015-10-03 15:52:37 +02:00
helper :: confRestore ();
2015-08-27 23:30:35 +02:00
}
public function reset ()
{
$_POST = array ();
$_GET = array ();
$_SERVER = array ();
2015-09-21 22:32:52 +02:00
if ( $this -> _model -> exists ( helper :: getPasteId ()))
$this -> _model -> delete ( helper :: getPasteId ());
2015-09-22 23:21:31 +02:00
helper :: confRestore ();
2015-08-27 23:30:35 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testView ()
{
$this -> reset ();
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'tag' => 'title' ,
'content' => 'ZeroBin'
),
$content ,
'outputs title correctly'
);
2016-01-31 09:56:06 +01:00
$this -> assertNotTag (
array (
'id' => 'shortenbutton'
),
$content ,
'doesn\'t output shortener button'
);
2015-08-27 23:30:35 +02:00
}
2015-09-19 17:23:10 +02:00
/**
* @ runInSeparateProcess
*/
public function testViewLanguageSelection ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-19 17:23:10 +02:00
$options [ 'main' ][ 'languageselection' ] = true ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-19 17:23:10 +02:00
$_COOKIE [ 'lang' ] = 'de' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'tag' => 'title' ,
'content' => 'ZeroBin'
),
$content ,
'outputs title correctly'
);
}
2016-01-31 09:56:06 +01:00
/**
* @ runInSeparateProcess
*/
public function testViewForceLanguageDefault ()
{
$this -> reset ();
$options = parse_ini_file ( CONF , true );
$options [ 'main' ][ 'languageselection' ] = false ;
$options [ 'main' ][ 'languagedefault' ] = 'fr' ;
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
$_COOKIE [ 'lang' ] = 'de' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'tag' => 'title' ,
'content' => 'ZeroBin'
),
$content ,
'outputs title correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testViewUrlShortener ()
{
$shortener = 'https://shortener.example.com/api?link=' ;
$this -> reset ();
$options = parse_ini_file ( CONF , true );
$options [ 'main' ][ 'urlshortener' ] = $shortener ;
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
$_COOKIE [ 'lang' ] = 'de' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'shortenbutton' ,
'attributes' => array ( 'data-shortener' => $shortener )
),
$content ,
'outputs configured shortener URL correctly'
);
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testHtaccess ()
{
$this -> reset ();
$dirs = array ( 'cfg' , 'lib' );
foreach ( $dirs as $dir ) {
$file = PATH . $dir . DIRECTORY_SEPARATOR . '.htaccess' ;
@ unlink ( $file );
}
ob_start ();
new zerobin ;
$content = ob_get_contents ();
foreach ( $dirs as $dir ) {
$file = PATH . $dir . DIRECTORY_SEPARATOR . '.htaccess' ;
$this -> assertFileExists (
$file ,
" $dir htaccess recreated "
);
}
}
/**
* @ expectedException Exception
* @ expectedExceptionCode 2
*/
public function testConf ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
file_put_contents ( CONF , '' );
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
}
2015-08-27 23:30:35 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreate ()
{
$this -> reset ();
2015-10-03 15:52:37 +02:00
$options = parse_ini_file ( CONF , true );
$options [ 'traffic' ][ 'limit' ] = 0 ;
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-27 23:30:35 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
2015-08-29 20:29:14 +02:00
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
2015-08-27 23:30:35 +02:00
$this -> assertEquals (
2015-08-29 20:29:14 +02:00
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
2015-08-27 23:30:35 +02:00
$response [ 'deletetoken' ],
2015-08-29 20:29:14 +02:00
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidTimelimit ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-03 22:55:36 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-10-03 15:52:37 +02:00
trafficlimiter :: canPass ();
2015-09-03 22:55:36 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-09-03 22:55:36 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidSize ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'main' ][ 'sizelimit' ] = 10 ;
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-03 22:55:36 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-09-03 22:55:36 +02:00
}
2015-09-19 17:23:10 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateProxyHeader ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-19 17:23:10 +02:00
$options [ 'traffic' ][ 'header' ] = 'X_FORWARDED_FOR' ;
2015-11-01 17:02:20 +01:00
$options [ 'traffic' ][ 'limit' ] = 100 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-09-19 17:23:10 +02:00
$_SERVER [ 'HTTP_X_FORWARDED_FOR' ] = '::1' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-19 17:23:10 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-09-19 17:23:10 +02:00
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateDuplicateId ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$_POST = helper :: getPaste ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-03 22:55:36 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-09-03 22:55:36 +02:00
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateValidExpire ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-08-29 20:29:14 +02:00
$_POST [ 'expire' ] = '5min' ;
2015-09-12 17:33:16 +02:00
$_POST [ 'formatter' ] = 'foo' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
$this -> assertEquals (
2015-08-27 23:30:35 +02:00
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
2015-08-29 20:29:14 +02:00
$response [ 'deletetoken' ],
2015-08-27 23:30:35 +02:00
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
2015-10-03 17:54:18 +02:00
$paste = $this -> _model -> read ( $response [ 'id' ]);
$this -> assertEquals ( time () + 300 , $paste -> meta -> expire_date , 'time is set correctly' );
}
/**
* @ runInSeparateProcess
*/
public function testCreateValidExpireWithDiscussion ()
{
$this -> reset ();
$options = parse_ini_file ( CONF , true );
$options [ 'traffic' ][ 'limit' ] = 0 ;
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
$_POST = helper :: getPaste ();
$_POST [ 'expire' ] = '5min' ;
$_POST [ 'opendiscussion' ] = '1' ;
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
$this -> assertEquals (
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
$response [ 'deletetoken' ],
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
$paste = $this -> _model -> read ( $response [ 'id' ]);
$this -> assertEquals ( time () + 300 , $paste -> meta -> expire_date , 'time is set correctly' );
$this -> assertEquals ( 1 , $paste -> meta -> opendiscussion , 'time is set correctly' );
2015-08-27 23:30:35 +02:00
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidExpire ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-08-29 20:29:14 +02:00
$_POST [ 'expire' ] = 'foo' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
$this -> assertEquals (
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
$response [ 'deletetoken' ],
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
}
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidBurn ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-08-29 20:29:14 +02:00
$_POST [ 'burnafterreading' ] = 'neither 1 nor 0' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidOpenDiscussion ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
2015-08-29 20:29:14 +02:00
$_POST [ 'opendiscussion' ] = 'neither 1 nor 0' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
2015-09-19 17:23:10 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateAttachment ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-19 17:23:10 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
$options [ 'main' ][ 'fileupload' ] = true ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-26 12:29:27 +02:00
$_POST = helper :: getPasteWithAttachment ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-19 17:23:10 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-09-26 12:29:27 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste does not exists before posting data' );
2015-09-19 17:23:10 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
$this -> assertEquals (
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
$response [ 'deletetoken' ],
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
2015-09-26 12:29:27 +02:00
$original = json_decode ( json_encode ( $_POST ));
$stored = $this -> _model -> read ( $response [ 'id' ]);
foreach ( array ( 'data' , 'attachment' , 'attachmentname' ) as $key ) {
$this -> assertEquals ( $original -> $key , $stored -> $key );
}
2015-09-19 17:23:10 +02:00
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateValidNick ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$_POST = helper :: getPaste ();
$_POST [ 'nickname' ] = helper :: getComment ()[ 'meta' ][ 'nickname' ];
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
$this -> assertEquals (
hash_hmac ( 'sha1' , $response [ 'id' ], serversalt :: get ()),
$response [ 'deletetoken' ],
'outputs valid delete token'
);
$this -> assertTrue ( $this -> _model -> exists ( $response [ 'id' ]), 'paste exists after posting data' );
}
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidNick ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-27 03:03:55 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
$_POST [ 'parentid' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
$_POST [ 'nickname' ] = 'foo' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-09-27 03:03:55 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-27 03:03:55 +02:00
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testCreateComment ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-21 22:32:52 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
$_POST [ 'parentid' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), $response [ 'id' ]), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateInvalidComment ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-21 22:32:52 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
2015-09-03 22:55:36 +02:00
$_POST [ 'parentid' ] = 'foo' ;
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-03 22:55:36 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
2015-09-03 22:55:36 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId ()), 'paste exists after posting data' );
2015-09-03 22:55:36 +02:00
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateCommentDiscussionDisabled ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-21 22:32:52 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
$_POST [ 'parentid' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
2015-09-21 22:32:52 +02:00
$paste = helper :: getPaste ( array ( 'opendiscussion' => false ));
$this -> _model -> create ( helper :: getPasteId (), $paste );
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId ()), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testCreateCommentInvalidPaste ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-21 22:32:52 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
$_POST [ 'parentid' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-29 20:29:14 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId ()), 'paste exists after posting data' );
2015-08-29 20:29:14 +02:00
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testCreateDuplicateComment ()
{
$this -> reset ();
2015-09-22 23:21:31 +02:00
$options = parse_ini_file ( CONF , true );
2015-09-03 22:55:36 +02:00
$options [ 'traffic' ][ 'limit' ] = 0 ;
2015-09-22 23:21:31 +02:00
helper :: confBackup ();
helper :: createIniFile ( CONF , $options );
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$this -> _model -> createComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId (), helper :: getComment ());
$this -> assertTrue ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId ()), 'comment exists before posting data' );
2015-10-03 15:52:37 +02:00
$_POST = helper :: getCommentPost ();
2015-09-21 22:32:52 +02:00
$_POST [ 'pasteid' ] = helper :: getPasteId ();
$_POST [ 'parentid' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-09-03 22:55:36 +02:00
$_SERVER [ 'REMOTE_ADDR' ] = '::1' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> existsComment ( helper :: getPasteId (), helper :: getPasteId (), helper :: getCommentId ()), 'paste exists after posting data' );
2015-09-03 22:55:36 +02:00
}
2015-08-27 23:30:35 +02:00
/**
* @ runInSeparateProcess
*/
public function testRead ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-08-27 23:30:35 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'cipherdata' ,
2015-10-18 11:08:28 +02:00
'content' => htmlspecialchars ( helper :: getPasteAsJson (), ENT_NOQUOTES )
2015-08-27 23:30:35 +02:00
),
$content ,
'outputs data correctly'
);
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testReadInvalidId ()
{
$this -> reset ();
$_SERVER [ 'QUERY_STRING' ] = 'foo' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Invalid paste ID'
),
$content ,
'outputs error correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testReadNonexisting ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Paste does not exist'
),
$content ,
'outputs error correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testReadExpired ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$expiredPaste = helper :: getPaste ( array ( 'expire_date' => 1344803344 ));
$this -> _model -> create ( helper :: getPasteId (), $expiredPaste );
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Paste does not exist'
),
$content ,
'outputs error correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testReadBurn ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$burnPaste = helper :: getPaste ( array ( 'burnafterreading' => true ));
$this -> _model -> create ( helper :: getPasteId (), $burnPaste );
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'cipherdata' ,
2015-10-18 11:08:28 +02:00
'content' => htmlspecialchars ( helper :: getPasteAsJson ( $burnPaste [ 'meta' ]), ENT_NOQUOTES )
2015-08-29 20:29:14 +02:00
),
$content ,
'outputs data correctly'
);
}
2015-09-01 22:33:07 +02:00
/**
* @ runInSeparateProcess
*/
public function testReadJson ()
{
$this -> reset ();
2015-10-18 11:08:28 +02:00
$paste = helper :: getPaste ();
$this -> _model -> create ( helper :: getPasteId (), $paste );
2015-09-27 20:34:39 +02:00
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
2015-09-01 22:33:07 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs success status' );
2015-10-18 11:08:28 +02:00
$this -> assertEquals ( helper :: getPasteId (), $response [ 'id' ], 'outputs data correctly' );
$this -> assertStringEndsWith ( '?' . $response [ 'id' ], $response [ 'url' ], 'returned URL points to new paste' );
$this -> assertEquals ( $paste [ 'data' ], $response [ 'data' ], 'outputs data correctly' );
$this -> assertEquals ( $paste [ 'meta' ][ 'formatter' ], $response [ 'meta' ][ 'formatter' ], 'outputs format correctly' );
$this -> assertEquals ( $paste [ 'meta' ][ 'postdate' ], $response [ 'meta' ][ 'postdate' ], 'outputs postdate correctly' );
$this -> assertEquals ( $paste [ 'meta' ][ 'opendiscussion' ], $response [ 'meta' ][ 'opendiscussion' ], 'outputs opendiscussion correctly' );
$this -> assertEquals ( 0 , $response [ 'comment_count' ], 'outputs comment_count correctly' );
$this -> assertEquals ( 0 , $response [ 'comment_offset' ], 'outputs comment_offset correctly' );
2015-09-01 22:33:07 +02:00
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testReadInvalidJson ()
{
$this -> reset ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
2015-09-03 22:55:36 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs error status' );
}
2015-09-19 17:23:10 +02:00
/**
* @ runInSeparateProcess
*/
public function testReadOldSyntax ()
{
$this -> reset ();
2015-10-03 15:52:37 +02:00
$oldPaste = helper :: getPaste ();
2015-10-18 11:08:28 +02:00
$meta = array (
2015-10-03 15:52:37 +02:00
'syntaxcoloring' => true ,
'postdate' => $oldPaste [ 'meta' ][ 'postdate' ],
'opendiscussion' => $oldPaste [ 'meta' ][ 'opendiscussion' ],
);
2015-10-18 11:08:28 +02:00
$oldPaste [ 'meta' ] = $meta ;
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), $oldPaste );
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-09-19 17:23:10 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
2015-10-18 11:08:28 +02:00
$meta [ 'formatter' ] = 'syntaxhighlighting' ;
2015-09-19 17:23:10 +02:00
$this -> assertTag (
array (
'id' => 'cipherdata' ,
2015-10-18 11:08:28 +02:00
'content' => htmlspecialchars ( helper :: getPasteAsJson ( $meta ), ENT_NOQUOTES )
2015-09-19 17:23:10 +02:00
),
$content ,
'outputs data correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testReadOldFormat ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$oldPaste = helper :: getPaste ();
2015-09-19 17:23:10 +02:00
unset ( $oldPaste [ 'meta' ][ 'formatter' ]);
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), $oldPaste );
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-09-19 17:23:10 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$oldPaste [ 'meta' ][ 'formatter' ] = 'plaintext' ;
$this -> assertTag (
array (
'id' => 'cipherdata' ,
2015-10-18 11:08:28 +02:00
'content' => htmlspecialchars ( helper :: getPasteAsJson ( $oldPaste [ 'meta' ]), ENT_NOQUOTES )
2015-09-19 17:23:10 +02:00
),
$content ,
'outputs data correctly'
);
}
2015-08-27 23:30:35 +02:00
/**
* @ runInSeparateProcess
*/
public function testDelete ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists before deleting data' );
$_GET [ 'pasteid' ] = helper :: getPasteId ();
$_GET [ 'deletetoken' ] = hash_hmac ( 'sha1' , helper :: getPasteId (), serversalt :: get ());
2015-08-27 23:30:35 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'status' ,
'content' => 'Paste was properly deleted'
),
$content ,
'outputs deleted status correctly'
);
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste successfully deleted' );
2015-08-27 23:30:35 +02:00
}
2015-08-29 20:29:14 +02:00
/**
* @ runInSeparateProcess
*/
public function testDeleteInvalidId ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
2015-08-29 20:29:14 +02:00
$_GET [ 'pasteid' ] = 'foo' ;
$_GET [ 'deletetoken' ] = 'bar' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Invalid paste ID'
),
$content ,
'outputs delete error correctly'
);
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after failing to delete data' );
2015-08-29 20:29:14 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testDeleteInexistantId ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$_GET [ 'pasteid' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
$_GET [ 'deletetoken' ] = 'bar' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Paste does not exist'
),
$content ,
'outputs delete error correctly'
);
}
/**
* @ runInSeparateProcess
*/
public function testDeleteInvalidToken ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$_GET [ 'pasteid' ] = helper :: getPasteId ();
2015-08-29 20:29:14 +02:00
$_GET [ 'deletetoken' ] = 'bar' ;
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Wrong deletion token'
),
$content ,
'outputs delete error correctly'
);
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists after failing to delete data' );
2015-08-29 20:29:14 +02:00
}
2015-08-31 22:10:41 +02:00
/**
* @ runInSeparateProcess
*/
public function testDeleteBurnAfterReading ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$burnPaste = helper :: getPaste ( array ( 'burnafterreading' => true ));
$this -> _model -> create ( helper :: getPasteId (), $burnPaste );
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists before deleting data' );
2015-10-11 21:22:00 +02:00
$_POST [ 'deletetoken' ] = 'burnafterreading' ;
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
2015-10-11 21:22:00 +02:00
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-31 22:10:41 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 0 , $response [ 'status' ], 'outputs status' );
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste successfully deleted' );
2015-08-31 22:10:41 +02:00
}
/**
* @ runInSeparateProcess
*/
public function testDeleteInvalidBurnAfterReading ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$this -> _model -> create ( helper :: getPasteId (), helper :: getPaste ());
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists before deleting data' );
2015-10-11 21:22:00 +02:00
$_POST [ 'deletetoken' ] = 'burnafterreading' ;
$_SERVER [ 'QUERY_STRING' ] = helper :: getPasteId ();
2015-09-27 20:34:39 +02:00
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'JSONHttpRequest' ;
2015-10-11 21:22:00 +02:00
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
2015-08-31 22:10:41 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$response = json_decode ( $content , true );
$this -> assertEquals ( 1 , $response [ 'status' ], 'outputs status' );
2015-09-21 22:32:52 +02:00
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste successfully deleted' );
2015-08-31 22:10:41 +02:00
}
2015-09-03 22:55:36 +02:00
/**
* @ runInSeparateProcess
*/
public function testDeleteExpired ()
{
$this -> reset ();
2015-09-21 22:32:52 +02:00
$expiredPaste = helper :: getPaste ( array ( 'expire_date' => 1000 ));
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste does not exist before being created' );
$this -> _model -> create ( helper :: getPasteId (), $expiredPaste );
$this -> assertTrue ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste exists before deleting data' );
$_GET [ 'pasteid' ] = helper :: getPasteId ();
2015-09-06 19:21:17 +02:00
$_GET [ 'deletetoken' ] = 'does not matter in this context, but has to be set' ;
2015-09-03 22:55:36 +02:00
ob_start ();
new zerobin ;
$content = ob_get_contents ();
$this -> assertTag (
array (
'id' => 'errormessage' ,
'content' => 'Paste does not exist'
),
$content ,
'outputs error correctly'
);
2015-09-21 22:32:52 +02:00
$this -> assertFalse ( $this -> _model -> exists ( helper :: getPasteId ()), 'paste successfully deleted' );
2015-09-03 22:55:36 +02:00
}
2015-08-27 23:30:35 +02:00
}