summaryrefslogtreecommitdiff
path: root/test/KolabAdmin/Unit/Sieve
diff options
context:
space:
mode:
Diffstat (limited to 'test/KolabAdmin/Unit/Sieve')
-rw-r--r--test/KolabAdmin/Unit/Sieve/Segment/DeliveryTest.php188
-rw-r--r--test/KolabAdmin/Unit/Sieve/Segment/ForwardTest.php268
-rw-r--r--test/KolabAdmin/Unit/Sieve/Segment/VacationTest.php414
3 files changed, 870 insertions, 0 deletions
diff --git a/test/KolabAdmin/Unit/Sieve/Segment/DeliveryTest.php b/test/KolabAdmin/Unit/Sieve/Segment/DeliveryTest.php
new file mode 100644
index 0000000..3acd758
--- /dev/null
+++ b/test/KolabAdmin/Unit/Sieve/Segment/DeliveryTest.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Test the sieve script delivery segment.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+
+/**
+ * Require the tested classes.
+ */
+require_once dirname(__FILE__) . '/../../../Autoload.php';
+
+/**
+ * Test the sieve script delivery segment.
+ *
+ * Copyright 2010 Klarälvdalens Datakonsult AB
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+class KolabAdmin_Unit_Sieve_Segment_DeliveryTest extends PHPUnit_Framework_TestCase
+{
+ public function setUp()
+ {
+ $this->sieve = $this->getMock('Net_Sieve');
+ $this->manager = new KolabAdmin_Sieve($this->sieve);
+ }
+
+ public function testSieveHandlerAllowsFetchingDeliverySegment()
+ {
+ $this->assertType(
+ 'KolabAdmin_Sieve_Segment_Delivery',
+ $this->manager->fetchDeliverySegment()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheDeliverySegmentIsActiveIfAnOldActiveScriptWasFound()
+ {
+ $this->_provideActiveScript(
+ 'kolab-deliver.siv', $this->_getOldDeliveryScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchDeliverySegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheDeliverySegmentIsInactiveIfAnOldInactiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab-deliver.siv', $this->_getOldDeliveryScript()
+ );
+ $this->assertFalse(
+ $this->manager->fetchDeliverySegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheDeliverySegmentIsActiveIfANewActiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab.siv', $this->_getDeliveryScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchDeliverySegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveDeliverySegmentIfNoActiveScriptWasFound()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array()));
+ $this->assertFalse(
+ $this->manager->fetchDeliverySegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveDeliverySegmentIfAnInactiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab.siv', $this->_getDeliveryScript('Test', false)
+ );
+ $this->assertFalse(
+ $this->manager->fetchDeliverySegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerAllowsActivatingDeliverySegment()
+ {
+ $segment = $this->manager->fetchDeliverySegment();
+ $segment->setActive();
+ $this->assertEquals(
+ $this->_getDeliveryScript('Inbox'),
+ $segment->generate()
+ );
+ }
+
+ public function testSieveHandlerAllowsDeactivatingDeliverySegment()
+ {
+ $segment = $this->manager->fetchDeliverySegment();
+ $segment->setInactive();
+ $this->assertEquals(
+ $this->_getDeliveryScript('Inbox', false),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentDeliveryProvidesDeliveryFolder()
+ {
+ $this->_provideActiveScript(
+ 'kolab-deliver.siv', $this->_getOldDeliveryScript()
+ );
+ $segment = $this->manager->fetchDeliverySegment();
+ $this->assertEquals('Test', $segment->getDeliveryFolder());
+ }
+
+ public function testSieveSegmentDeliveryProvidesDeliveryFolder()
+ {
+ $this->_provideInactiveScript(
+ 'kolab.siv', $this->_getDeliveryScript('Test', false)
+ );
+ $segment = $this->manager->fetchDeliverySegment();
+ $this->assertEquals('Test', $segment->getDeliveryFolder());
+ }
+
+ public function testSieveSegmentDeliveryAllowsSettingDeliveryFolder()
+ {
+ $segment = $this->manager->fetchDeliverySegment();
+ $segment->setActive();
+ $segment->setDeliveryFolder('Dummy');
+ $this->assertEquals(
+ $this->_getDeliveryScript('Dummy'),
+ $segment->generate()
+ );
+ }
+
+ private function _provideInactiveScript($name, $script)
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array($name)));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with($name)
+ ->will($this->returnValue($script));
+ }
+
+ private function _provideActiveScript($name, $script)
+ {
+ $this->_provideInactiveScript($name, $script);
+ $this->sieve->expects($this->once())
+ ->method('getActive')
+ ->will($this->returnValue($name));
+ }
+
+ private function _getOldDeliveryScript()
+ {
+ return 'require "fileinto";' . "\r\n" .
+ 'if header :contains ["X-Kolab-Scheduling-Message"] ["FALSE"] {' . "\r\n" .
+ 'fileinto "INBOX/Test";' . "\r\n" .
+ '}' . "\r\n";
+ }
+
+ private function _getDeliveryScript($box = 'Test', $active = true)
+ {
+ $script = 'if allof (' . (($active) ? 'true, ## delivery enabled' : 'false, ## delivery disabled') . "\r\n" .
+ 'header :contains ["X-Kolab-Scheduling-Message"] ["FALSE"]) {' . "\r\n" .
+ 'fileinto "INBOX/' . $box . '";' . "\r\n" .
+ '}' . "\r\n";
+ if (!$active) {
+ $script = preg_replace('/^(.)/m', '#$1', $script);
+ }
+ return '### SEGMENT START DELIVERY ' . (($active) ? 'ENABLED' : 'DISABLED') . "\r\n" .
+ $script .
+ '### SEGMENT END DELIVERY' . "\r\n";
+ }
+} \ No newline at end of file
diff --git a/test/KolabAdmin/Unit/Sieve/Segment/ForwardTest.php b/test/KolabAdmin/Unit/Sieve/Segment/ForwardTest.php
new file mode 100644
index 0000000..f82cb28
--- /dev/null
+++ b/test/KolabAdmin/Unit/Sieve/Segment/ForwardTest.php
@@ -0,0 +1,268 @@
+<?php
+/**
+ * Test the sieve script forward segment.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+
+/**
+ * Require the tested classes.
+ */
+require_once dirname(__FILE__) . '/../../../Autoload.php';
+
+/**
+ * Test the sieve script forward segment.
+ *
+ * Copyright 2010 Klarälvdalens Datakonsult AB
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+class KolabAdmin_Unit_Sieve_Segment_ForwardTest extends PHPUnit_Framework_TestCase
+{
+ public function setUp()
+ {
+ $this->sieve = $this->getMock('Net_Sieve');
+ $this->manager = new KolabAdmin_Sieve($this->sieve);
+ }
+
+ public function testSieveHandlerAllowsFetchingForwardSegment()
+ {
+ $this->assertType(
+ 'KolabAdmin_Sieve_Segment_Forward',
+ $this->manager->fetchForwardSegment()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheForwardSegmentIsActiveIfAnOldActiveScriptWasFound()
+ {
+ $this->_provideActiveScript(
+ 'kolab-forward.siv', $this->_getOldForwardScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchForwardSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheForwardSegmentIsInactiveIfAnOldInactiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab-forward.siv', $this->_getOldForwardScript()
+ );
+ $this->assertFalse(
+ $this->manager->fetchForwardSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheForwardSegmentIsActiveIfANewActiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab.siv', $this->_getForwardScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchForwardSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveForwardSegmentIfNoActiveScriptWasFound()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array()));
+ $this->assertFalse(
+ $this->manager->fetchForwardSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveForwardSegmentIfAnInactiveScriptWasFound()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getForwardScript('test@example.com', false)));
+ $this->assertFalse(
+ $this->manager->fetchForwardSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerAllowsActivatingForwardSegment()
+ {
+ $segment = $this->manager->fetchForwardSegment();
+ $segment->setActive();
+ $segment->setForwardAddress('somebody@example.com');
+ $this->assertEquals(
+ $this->_getForwardScript('somebody@example.com'),
+ $segment->generate()
+ );
+ }
+
+ public function testSieveHandlerAllowsDeactivatingForwardSegment()
+ {
+ $segment = $this->manager->fetchForwardSegment();
+ $segment->setInactive();
+ $segment->setForwardAddress('somebody@example.com');
+ $this->assertEquals(
+ $this->_getForwardScript('somebody@example.com', false),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentForwardProvidesForwardAddress()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-forward.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-forward.siv')
+ ->will($this->returnValue($this->_getOldForwardScript()));
+ $segment = $this->manager->fetchForwardSegment();
+ $this->assertEquals('test@example.org', $segment->getForwardAddress());
+ }
+
+ public function testSieveSegmentForwardProvidesForwardAddress()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getForwardScript('dummy@example.com', false)));
+ $segment = $this->manager->fetchForwardSegment();
+ $this->assertEquals('dummy@example.com', $segment->getForwardAddress());
+ }
+
+ public function testSieveSegmentForwardAllowsSettingForwardAddress()
+ {
+ $segment = $this->manager->fetchForwardSegment();
+ $segment->setActive();
+ $segment->setForwardAddress('dummy@example.com');
+ $this->assertEquals(
+ $this->_getForwardScript('dummy@example.com'),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentForwardProvidesKeepOnServerAttributeTrueIfSetToTrue()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-forward.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-forward.siv')
+ ->will($this->returnValue($this->_getOldForwardScript()));
+ $segment = $this->manager->fetchForwardSegment();
+ $this->assertTrue($segment->getKeepOnServer());
+ }
+
+ public function testOldSieveSegmentForwardProvidesKeepOnServerAttributeFalseIfSetToFalse()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-forward.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-forward.siv')
+ ->will($this->returnValue($this->_getOldForwardScript(false)));
+ $segment = $this->manager->fetchForwardSegment();
+ $this->assertFalse($segment->getKeepOnServer());
+ }
+
+ public function testSieveSegmentForwardProvidesKeepOnServerAttributeTrueIfSetToTrue()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getForwardScript('dummy@example.com', false, true)));
+ $segment = $this->manager->fetchForwardSegment();
+ $this->assertTrue($segment->getKeepOnServer());
+ }
+
+ public function testSieveSegmentForwardAllowsSettingKeepOnServerToTrue()
+ {
+ $segment = $this->manager->fetchForwardSegment();
+ $segment->setActive();
+ $segment->setForwardAddress('dummy@example.com');
+ $segment->setKeepOnServer(true);
+ $this->assertEquals(
+ $this->_getForwardScript('dummy@example.com', true, true),
+ $segment->generate()
+ );
+ }
+
+ public function testSieveSegmentForwardAllowsSettingKeepOnServerToFalse()
+ {
+ $segment = $this->manager->fetchForwardSegment();
+ $segment->setActive();
+ $segment->setKeepOnServer(false);
+ $segment->setForwardAddress('dummy@example.com');
+ $this->assertEquals(
+ $this->_getForwardScript('dummy@example.com', true, false),
+ $segment->generate()
+ );
+ }
+
+ private function _provideInactiveScript($name, $script)
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array($name)));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with($name)
+ ->will($this->returnValue($script));
+ }
+
+ private function _provideActiveScript($name, $script)
+ {
+ $this->_provideInactiveScript($name, $script);
+ $this->sieve->expects($this->once())
+ ->method('getActive')
+ ->will($this->returnValue($name));
+ }
+
+ private function _getOldForwardScript($keep_on_server = true)
+ {
+ return 'require "fileinto";' . "\r\n" .
+ 'redirect "test@example.org";' . (($keep_on_server) ? ' keep;' : '') . "\r\n";
+ }
+
+ private function _getForwardScript($address = 'test@example.com', $active = true, $keep_on_server = true)
+ {
+ if (!empty($address)) {
+ $address = 'redirect "' . $address . '";';
+ } else {
+ $address = '';
+ }
+ $script = 'if allof (' . (($active) ? 'true ## forward enabled' : 'false ## forward disabled') . "\r\n" .
+ ') {' . "\r\n" .
+ $address . (($keep_on_server) ? ' keep;' : '') . "\r\n" .
+ '}' . "\r\n";
+ if (!$active) {
+ $script = preg_replace('/^(.)/m', '#$1', $script);
+ }
+ return '### SEGMENT START FORWARD ' . (($active) ? 'ENABLED' : 'DISABLED') . "\r\n" .
+ $script .
+ '### SEGMENT END FORWARD' . "\r\n";
+ }
+} \ No newline at end of file
diff --git a/test/KolabAdmin/Unit/Sieve/Segment/VacationTest.php b/test/KolabAdmin/Unit/Sieve/Segment/VacationTest.php
new file mode 100644
index 0000000..503c6a4
--- /dev/null
+++ b/test/KolabAdmin/Unit/Sieve/Segment/VacationTest.php
@@ -0,0 +1,414 @@
+<?php
+/**
+ * Test the sieve script vacation segment.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+
+/**
+ * Require the tested classes.
+ */
+require_once dirname(__FILE__) . '/../../../Autoload.php';
+
+/**
+ * Test the sieve script vacation segment.
+ *
+ * Copyright 2010 Klarälvdalens Datakonsult AB
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package KolabAdmin
+ * @author Gunnar Wrobel <wrobel@pardus.de>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=KolabAdmin
+ */
+class KolabAdmin_Unit_Sieve_Segment_VacationTest extends PHPUnit_Framework_TestCase
+{
+ public function setUp()
+ {
+ $this->sieve = $this->getMock('Net_Sieve');
+ $this->manager = new KolabAdmin_Sieve($this->sieve);
+ }
+
+ public function testSieveHandlerAllowsFetchingVacationSegment()
+ {
+ $this->assertType(
+ 'KolabAdmin_Sieve_Segment_Vacation',
+ $this->manager->fetchVacationSegment()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheVacationSegmentIsActiveIfAnOldActiveScriptWasFound()
+ {
+ $this->_provideActiveScript(
+ 'kolab-vacation.siv', $this->_getOldVacationScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchVacationSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheVacationSegmentIsInactiveIfAnOldInactiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab-vacation.siv', $this->_getOldVacationScript()
+ );
+ $this->assertFalse(
+ $this->manager->fetchVacationSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesThatTheVacationSegmentIsActiveIfANewActiveScriptWasFound()
+ {
+ $this->_provideInactiveScript(
+ 'kolab.siv', $this->_getVacationScript()
+ );
+ $this->assertTrue(
+ $this->manager->fetchVacationSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveVacationSegmentIfNoActiveScriptWasFound()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array()));
+ $this->assertFalse(
+ $this->manager->fetchVacationSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerIndicatesAnInactiveVacationSegmentIfAnInactiveScriptWasFound()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(false)));
+ $this->assertFalse(
+ $this->manager->fetchVacationSegment()->isActive()
+ );
+ }
+
+ public function testSieveHandlerAllowsActivatingVacationSegment()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $this->assertEquals(
+ $this->_getVacationScript(),
+ $segment->generate()
+ );
+ }
+
+ public function testSieveHandlerAllowsDeactivatingVacationSegment()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setInactive();
+ $this->assertEquals(
+ $this->_getVacationScript(false),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentVacationProvidesResponse()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript("REPLY\r\nLINE2\r\n")));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals("REPLY\r\nLINE2", $segment->getResponse());
+ }
+
+ public function testSieveSegmentVacationProvidesResponse()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, "REPLY\r\nLINE2\r\n")));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals("REPLY\r\nLINE2", $segment->getResponse());
+ }
+
+ public function testSieveSegmentVacationAllowsSettingResponse()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setResponse("REPLY\r\nLINE2");
+ $this->assertEquals(
+ $this->_getVacationScript(true, "REPLY\r\nLINE2"),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentVacationProvidesResendAfter()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript('', '', false, array(), 8)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals(8, $segment->getResendAfter());
+ }
+
+ public function testSieveSegmentVacationProvidesResendAfter()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, '', '', false, array(), 12)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals(12, $segment->getResendAfter());
+ }
+
+ public function testSieveSegmentVacationAllowsSettingResendAfter()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setResendAfter(9);
+ $this->assertEquals(
+ $this->_getVacationScript(true, '', '', false, array(), 9),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentVacationProvidesDomain()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript('REPLY', 'example.com')));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals('example.com', $segment->getDomain());
+ }
+
+ public function testSieveSegmentVacationProvidesDomain()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, 'REPLY', 'example.com')));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals('example.com', $segment->getDomain());
+ }
+
+ public function testSieveSegmentVacationAllowsSettingDomain()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setDomain('example.org');
+ $this->assertEquals(
+ $this->_getVacationScript(true, '', 'example.org'),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentVacationProvidesRecipientAddresses()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript('', '', false, array('1@example.org', '2@example.org'))));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals(array('1@example.org', '2@example.org'), $segment->getRecipientAddresses());
+ }
+
+ public function testSieveSegmentVacationProvidesRecipientAddresses()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, '', '', false, array('1@example.org', '2@example.org'))));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertEquals(array('1@example.org', '2@example.org'), $segment->getRecipientAddresses());
+ }
+
+ public function testSieveSegmentVacationAllowsSettingRecipientAddresses()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setRecipientAddresses(array('1@example.com', '2@example.com'));
+ $this->assertEquals(
+ $this->_getVacationScript(true, '', '', false, array('1@example.com', '2@example.com')),
+ $segment->generate()
+ );
+ }
+
+ public function testOldSieveSegmentVacationProvidesReactToSpamAttributeTrueIfSetToTrue()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript('', '', true)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertTrue($segment->getReactToSpam());
+ }
+
+ public function testOldSieveSegmentVacationProvidesReactToSpamAttributeFalseIfSetToFalse()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab-vacation.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab-vacation.siv')
+ ->will($this->returnValue($this->_getOldVacationScript('', '', false)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertFalse($segment->getReactToSpam());
+ }
+
+ public function testSieveSegmentVacationProvidesReactToSpamAttributeFalseIfSetToFalse()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, '', '', false)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertFalse($segment->getReactToSpam());
+ }
+
+ public function testSieveSegmentVacationProvidesReactToSpamAttributeTrueIfSetToTrue()
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array('kolab.siv')));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with('kolab.siv')
+ ->will($this->returnValue($this->_getVacationScript(true, '', '', true)));
+ $segment = $this->manager->fetchVacationSegment();
+ $this->assertTrue($segment->getReactToSpam());
+ }
+
+ public function testSieveSegmentVacationAllowsSettingReactToSpamToTrue()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setReactToSpam(true);
+ $this->assertEquals(
+ $this->_getVacationScript(true, '', '', true),
+ $segment->generate()
+ );
+ }
+
+ public function testSieveSegmentVacationAllowsSettingReactToSpamToFalse()
+ {
+ $segment = $this->manager->fetchVacationSegment();
+ $segment->setActive();
+ $segment->setReactToSpam(false);
+ $this->assertEquals(
+ $this->_getVacationScript(true, '', '', false),
+ $segment->generate()
+ );
+ }
+
+ private function _provideInactiveScript($name, $script)
+ {
+ $this->sieve->expects($this->once())
+ ->method('listScripts')
+ ->will($this->returnValue(array($name)));
+ $this->sieve->expects($this->once())
+ ->method('getScript')
+ ->with($name)
+ ->will($this->returnValue($script));
+ }
+
+ private function _provideActiveScript($name, $script)
+ {
+ $this->_provideInactiveScript($name, $script);
+ $this->sieve->expects($this->once())
+ ->method('getActive')
+ ->will($this->returnValue($name));
+ }
+
+ private function _getOldVacationScript($text = '', $domain = null, $react_to_spam = false, $addresses = array(), $days = 7)
+ {
+ return 'require "vacation";' . "\r\n" .
+ ((empty($domain)) ? '' : 'if not address :domain :contains "From" "' . $domain . '" { keep; stop; }' . "\r\n") .
+ (($react_to_spam) ? '' : 'if header :contains "X-Spam-Flag" "YES" { keep; stop; }' . "\r\n") .
+ 'vacation :addresses [ "' . join('", "', $addresses) . '" ] :days ' . $days . ' text:' . "\r\n" .
+ $text . "\r\n" .
+ '.' . "\r\n" .
+ ';' . "\r\n";
+ }
+
+ private function _getVacationScript($active = true, $text = '', $domain = null, $react_to_spam = false, $addresses = array(), $days = 7)
+ {
+ if (empty($text)) {
+ $text = sprintf(
+ _("I am out of office until %s.\r\n").
+ _("In urgent cases, please contact Mrs. <vacation replacement>\r\n\r\n").
+ _("email: <email address of vacation replacement>\r\n").
+ _("phone: +49 711 1111 11\r\n").
+ _("fax.: +49 711 1111 12\r\n\r\n").
+ _("Yours sincerely,\r\n").
+ _("-- \r\n").
+ _("<enter your name and email address here>"),
+ strftime(_('%x'))
+ );
+ }
+
+ if (!empty($addresses)) {
+ $addresses = ':addresses [ "' . join('", "', $addresses) . '" ]';
+ } else {
+ $addresses = '';
+ }
+
+ $script = 'if allof (' . (($active) ? 'true, ## vacation enabled' : 'false, ## vacation disabled') . "\r\n" .
+ ((empty($domain)) ? 'true,' : 'address :domain :contains "From" "' . $domain . '",') . "\r\n" .
+ (($react_to_spam) ? 'true' : 'not header :contains "X-Spam-Flag" "YES"') . ') {' . "\r\n" .
+ 'vacation ' . $addresses . ' :days ' . $days . ' text:' . "\r\n" .
+ $text . "\r\n" .
+ '.' . "\r\n" .
+ ';' . "\r\n" .
+ '}' . "\r\n";
+
+ if (!$active) {
+ $script = preg_replace('/^(.)/m', '#$1', $script);
+ }
+
+ return '### SEGMENT START VACATION ' . (($active) ? 'ENABLED' : 'DISABLED') . "\r\n" .
+ $script .
+ '### SEGMENT END VACATION' . "\r\n";
+ }
+} \ No newline at end of file