PageRenderTime 36ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/tine20/Expressomail/Sieve/Backend/ScriptTest.php

https://gitlab.com/rsilveira1987/Expresso
PHP | 251 lines | 132 code | 41 blank | 78 comment | 0 complexity | 24f77391de0dc095665c4536be3dc341 MD5 | raw file
  1. <?php
  2. /**
  3. * Tine 2.0 - http://www.tine20.org
  4. *
  5. * @package Felamimail
  6. * @license http://www.gnu.org/licenses/agpl.html
  7. * @copyright Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
  8. * @author Lars Kneschke <l.kneschke@metaways.de>
  9. */
  10. /**
  11. * Test helper
  12. */
  13. require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
  14. /**
  15. * Test class for Felamimail_Sieve_Backend_Script
  16. */
  17. class Expressomail_Sieve_Backend_ScriptTest extends PHPUnit_Framework_TestCase
  18. {
  19. /**
  20. * serialized rule
  21. *
  22. * @var string
  23. */
  24. protected $_serializedSieveRule;
  25. /**
  26. * smart rule file into
  27. *
  28. * @var string
  29. */
  30. protected $_smartSieveRuleFileInto = '#rule&&13&&ENABLED&&&&&&&&folder&&Listen/Icecast&&0&&List-Id&&icecast.xiph.org&&0';
  31. /**
  32. * smart rule discard
  33. *
  34. * @var string
  35. */
  36. protected $_smartSieveRuleDiscard = '#rule&&15&&ENABLED&&&&&&Bacula: Backup OK of&&discard&&&&0&&&&&&0';
  37. /**
  38. * sieve vacation
  39. *
  40. * @var string
  41. */
  42. protected $_smartSieveVacation = '#vacation&&7&&"info@example.com"&&Thank you very much for your email.\n\n&&off';
  43. /**
  44. * Runs the test methods of this class.
  45. *
  46. * @access public
  47. * @static
  48. */
  49. public static function main()
  50. {
  51. $suite = new PHPUnit_Framework_TestSuite('Tine 2.0 Expressomail Sieve Script Tests');
  52. PHPUnit_TextUI_TestRunner::run($suite);
  53. }
  54. /**
  55. * Sets up the fixture.
  56. * This method is called before a test is executed.
  57. *
  58. * @access protected
  59. */
  60. protected function setUp()
  61. {
  62. $rule = new Expressomail_Sieve_Rule();
  63. $condition = new Expressomail_Sieve_Rule_Condition();
  64. $action = new Expressomail_Sieve_Rule_Action();
  65. $condition->setComperator(Expressomail_Sieve_Rule_Condition::COMPERATOR_CONTAINS)
  66. ->setTest(Expressomail_Sieve_Rule_Condition::TEST_ADDRESS)
  67. ->setHeader('From')
  68. ->setKey('info@example.com');
  69. $action->setType(Expressomail_Sieve_Rule_Action::FILEINTO)
  70. ->setArgument('INBOX/UNITTEST');
  71. $rule->setEnabled(true)
  72. ->setId(12)
  73. ->setAction($action)
  74. ->addCondition($condition);
  75. $this->_serializedSieveRule = '#SieveRule' . serialize($rule);
  76. }
  77. /**
  78. * Tears down the fixture
  79. * This method is called after a test is executed.
  80. *
  81. * @access protected
  82. */
  83. protected function tearDown()
  84. {
  85. }
  86. /**
  87. * test enabled rule
  88. */
  89. public function testEnabledRule()
  90. {
  91. $script = new Expressomail_Sieve_Backend_Script();
  92. $rule = new Expressomail_Sieve_Rule();
  93. $condition = new Expressomail_Sieve_Rule_Condition();
  94. $action = new Expressomail_Sieve_Rule_Action();
  95. $condition->setComperator(Expressomail_Sieve_Rule_Condition::COMPERATOR_CONTAINS)
  96. ->setTest(Expressomail_Sieve_Rule_Condition::TEST_ADDRESS)
  97. ->setHeader('From')
  98. ->setKey('info@example.com');
  99. $action->setType(Expressomail_Sieve_Rule_Action::FILEINTO)
  100. ->setArgument('INBOX/UNITTEST');
  101. $rule->setEnabled(true)
  102. ->setId(12)
  103. ->setAction($action)
  104. ->addCondition($condition);
  105. $script->addRule($rule);
  106. $sieveScript = $script->getSieve();
  107. #echo $sieveScript;
  108. $this->assertContains('if allof (address :contains "From" "info@example.com")', $sieveScript);
  109. $this->assertContains('fileinto "INBOX/UNITTEST";', $sieveScript);
  110. $this->assertContains('Expressomail_Sieve_Rule', $sieveScript);
  111. }
  112. /**
  113. * test enabled vacation
  114. */
  115. public function testEnabledVacation()
  116. {
  117. $script = new Expressomail_Sieve_Backend_Script();
  118. $script->setVacation($this->_getVacation());
  119. $sieveScript = $script->getSieve();
  120. $this->assertContains(':days 8', $sieveScript);
  121. $this->assertContains(':from "sieve@example.com"', $sieveScript);
  122. $this->assertContains(':addresses ["info@example.com"]', $sieveScript);
  123. $this->assertContains('?Q?L=C3=B6=C3=9Flich?=', $sieveScript, $sieveScript);
  124. $this->assertContains('Expressomail_Sieve_Vacation', $sieveScript);
  125. $this->assertContains('Tine 2.0 Unit Test', $sieveScript);
  126. }
  127. /**
  128. * get vacation
  129. *
  130. * @return Felamimail_Sieve_Vacation
  131. */
  132. protected function _getVacation()
  133. {
  134. $vacation = new Expressomail_Sieve_Vacation();
  135. $vacation->setEnabled(true)
  136. ->addAddress('info@example.com')
  137. ->setDays(8)
  138. ->setSubject('Lößlich')
  139. ->setFrom('sieve@example.com')
  140. ->setReason('Tine 2.0 Unit Test');
  141. return $vacation;
  142. }
  143. /**
  144. * test enabled vacation
  145. */
  146. public function testMimeVacation()
  147. {
  148. $vacation = $this->_getVacation();
  149. $vacation->setMime('multipart/alternative')->setReason('<html><body><strong>AWAY!</strong></body></html>');
  150. $script = new Expressomail_Sieve_Backend_Script();
  151. $script->setVacation($vacation);
  152. $sieveScript = $script->getSieve();
  153. $this->assertContains('Content-Type: multipart/alternative; boundary=foo', $sieveScript);
  154. $this->assertContains('vacation :days 8 :subject "=?UTF-8?Q?L=C3=B6=C3=9Flich?=" :from "sieve@example.com" :addresses ["info@example.com"] :mime text:', $sieveScript);
  155. $this->assertContains('<html><body><strong>AWAY!</strong></body></html>', $sieveScript);
  156. $this->assertContains('--foo--', $sieveScript);
  157. }
  158. /**
  159. * testStartAndEndDate
  160. *
  161. * @see 0006266: automatic deactivation of vacation message
  162. */
  163. public function testStartAndEndDate()
  164. {
  165. $vacation = $this->_getVacation();
  166. $vacation->setStartdate('2012-05-08');
  167. $vacation->setEnddate('2012-05-18');
  168. $vacation->setDateEnabled(TRUE);
  169. $script = new Expressomail_Sieve_Backend_Script();
  170. $script->setVacation($vacation);
  171. $sieveScript = $script->getSieve();
  172. $this->assertContains('require ["vacation","date","relational"]', $sieveScript);
  173. $this->assertContains('if allof(currentdate :value "le" "date" "2012-05-18",', $sieveScript);
  174. $this->assertContains('currentdate :value "ge" "date" "2012-05-08")', $sieveScript);
  175. }
  176. /**
  177. * test disabled vacation
  178. */
  179. public function testDisabledVacation()
  180. {
  181. $script = new Expresomail_Sieve_Backend_Script();
  182. $vacation = new Expressomail_Sieve_Vacation();
  183. $vacation->setEnabled(false)
  184. ->addAddress('info@example.com')
  185. ->setDays(8)
  186. ->setReason('Tine 2.0 Unit Test');
  187. $script->setVacation($vacation);
  188. $sieveScript = $script->getSieve();
  189. $this->assertNotContains('vacation :days 8 :addresses ["info@example.com"]', $sieveScript);
  190. $this->assertContains('Expressomail_Sieve_Vacation', $sieveScript);
  191. $this->assertContains('Tine 2.0 Unit Test', $sieveScript);
  192. }
  193. /**
  194. * parse serialized sieve rule
  195. */
  196. public function testParseSerializedSieveRule()
  197. {
  198. $script = new Expressomail_Sieve_Backend_Script();
  199. $script->setScriptToParse($this->_serializedSieveRule);
  200. $script->readScriptData();
  201. $script->setScriptToParse($this->_smartSieveRuleFileInto);
  202. $script->readScriptData();
  203. $script->setScriptToParse($this->_smartSieveRuleDiscard);
  204. $script->readScriptData();
  205. $script->setScriptToParse($this->_smartSieveVacation);
  206. $script->readScriptData();
  207. $rules = $script->getRules();
  208. $this->assertEquals(3, count($rules));
  209. }
  210. }