model.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. class modelTest extends PHPUnit_Framework_TestCase
  3. {
  4. private $_conf;
  5. private $_model;
  6. public function setUp()
  7. {
  8. /* Setup Routine */
  9. $options = parse_ini_file(CONF, true);
  10. $options['model'] = array(
  11. 'class' => 'zerobin_db',
  12. );
  13. $options['model_options'] = array(
  14. 'dsn' => 'sqlite::memory:',
  15. 'usr' => null,
  16. 'pwd' => null,
  17. 'opt' => array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION),
  18. );
  19. helper::confBackup();
  20. helper::createIniFile(CONF, $options);
  21. $this->_conf = new configuration;
  22. $this->_model = new model($this->_conf);
  23. }
  24. public function tearDown()
  25. {
  26. /* Tear Down Routine */
  27. }
  28. public function testBasicWorkflow()
  29. {
  30. // storing pastes
  31. $pasteData = helper::getPaste();
  32. $this->_model->getPaste(helper::getPasteId())->delete();
  33. $paste = $this->_model->getPaste(helper::getPasteId());
  34. $this->assertFalse($paste->exists(), 'paste does not yet exist');
  35. $paste = $this->_model->getPaste();
  36. $paste->setData($pasteData['data']);
  37. $paste->setOpendiscussion();
  38. $paste->setFormatter($pasteData['meta']['formatter']);
  39. $paste->store();
  40. $paste = $this->_model->getPaste(helper::getPasteId());
  41. $this->assertTrue($paste->exists(), 'paste exists after storing it');
  42. $paste = $paste->get();
  43. foreach (array('data', 'opendiscussion', 'formatter') as $key) {
  44. $this->assertEquals($pasteData[$key], $paste->$key);
  45. }
  46. // storing comments
  47. $commentData = helper::getComment();
  48. $comment = $paste->getComment(helper::getPasteId(), helper::getCommentId());
  49. $this->assertFalse($comment->exists(), 'comment does not yet exist');
  50. $comment = $paste->getComment(helper::getPasteId());
  51. $comment->setData($commentData['data']);
  52. $comment->setNickname($commentData['meta']['nickname']);
  53. $comment->store();
  54. $comment = $paste->getComment(helper::getPasteId(), helper::getCommentId());
  55. $this->assertTrue($comment->exists(), 'comment exists after storing it');
  56. $comment = $comment->get();
  57. $this->assertEquals($commentData['data'], $comment->data);
  58. $this->assertEquals($commentData['meta']['nickname'], $comment->meta->nickname);
  59. // deleting pastes
  60. $this->_model->getPaste(helper::getPasteId())->delete();
  61. $paste = $this->_model->getPaste(helper::getPasteId());
  62. $this->assertFalse($paste->exists(), 'paste successfully deleted');
  63. $this->assertEquals(array(), $paste->getComments(), 'comment was deleted with paste');
  64. }
  65. /**
  66. * @expectedException Exception
  67. * @expectedExceptionCode 60
  68. */
  69. public function testPasteDuplicate()
  70. {
  71. $pasteData = helper::getPaste();
  72. $this->_model->getPaste(helper::getPasteId())->delete();
  73. $paste = $this->_model->getPaste();
  74. $paste->setData($pasteData['data']);
  75. $paste->setOpendiscussion();
  76. $paste->setFormatter($pasteData['meta']['formatter']);
  77. $paste->store();
  78. $paste = $this->_model->getPaste();
  79. $paste->setData($pasteData['data']);
  80. $paste->setOpendiscussion();
  81. $paste->setFormatter($pasteData['meta']['formatter']);
  82. $paste->store();
  83. }
  84. /**
  85. * @expectedException Exception
  86. * @expectedExceptionCode 60
  87. */
  88. public function testCommentDuplicate()
  89. {
  90. $pasteData = helper::getPaste();
  91. $commentData = helper::getComment();
  92. $this->_model->getPaste(helper::getPasteId())->delete();
  93. $paste = $this->_model->getPaste();
  94. $paste->setData($pasteData['data']);
  95. $paste->setOpendiscussion();
  96. $paste->setFormatter($pasteData['meta']['formatter']);
  97. $paste->store();
  98. $comment = $paste->getComment(helper::getPasteId());
  99. $comment->setData($commentData['data']);
  100. $comment->setNickname($commentData['meta']['nickname']);
  101. $comment->store();
  102. $comment = $paste->getComment(helper::getPasteId());
  103. $comment->setData($commentData['data']);
  104. $comment->setNickname($commentData['meta']['nickname']);
  105. $comment->store();
  106. }
  107. public function testImplicitDefaults()
  108. {
  109. $pasteData = helper::getPaste();
  110. $commentData = helper::getComment();
  111. $this->_model->getPaste(helper::getPasteId())->delete();
  112. $paste = $this->_model->getPaste();
  113. $paste->setData($pasteData['data']);
  114. $paste->setBurnafterreading();
  115. $paste->setOpendiscussion();
  116. // not setting a formatter, should use default one
  117. $paste->store();
  118. $paste = $this->_model->getPaste(helper::getPasteId())->get(); // ID was set based on data
  119. $this->assertEquals(true, $paste->meta->burnafterreading, 'burn after reading takes precedence');
  120. $this->assertEquals(false, $paste->meta->opendiscussion, 'opendiscussion is overiden');
  121. $this->assertEquals($this->_conf->getKey('defaultformatter'), $paste->meta->formatter, 'default formatter is set');
  122. $_SERVER['REMOTE_ADDR'] = '::1';
  123. $vz = new vizhash16x16();
  124. $pngdata = 'data:image/png;base64,' . base64_encode($vz->generate($_SERVER['REMOTE_ADDR']));
  125. $comment = $this->_model->getPaste(helper::getPasteId())->getComment(helper::getPasteId());
  126. $comment->setData($commentData['data']);
  127. $comment->setNickname($commentData['meta']['nickname']);
  128. $comment->store();
  129. $comment = $paste->getComment(helper::getPasteId(), helper::getCommentId());
  130. $this->assertEquals($pngdata, $comment->meta->vizhash, 'nickname triggers vizhash to be set');
  131. }
  132. }