Merge branch '2014.11' into 2014.11-develop
[tine20] / tests / tine20 / Calendar / Controller / EventNotificationsTests.php
index 8b1c92b..e4ac085 100644 (file)
@@ -1302,12 +1302,15 @@ class Calendar_Controller_EventNotificationsTests extends Calendar_TestCase
      * checks if notification mail is sent to configured mail address of a resource
      * 
      * @see 0009954: resource manager and email handling
+     *
+     * @param boolean $suppress_notification
      */
-    public function testResourceNotification()
+    public function testResourceNotification($suppress_notification = false)
     {
         // create resource with email address of unittest user
         $resource = $this->_getResource();
         $resource->email = Tinebase_Core::getUser()->accountEmailAddress;
+        $resource->suppress_notification = $suppress_notification;
         $persistentResource = Calendar_Controller_Resource::getInstance()->create($resource);
         
         // create event with this resource as attender
@@ -1320,14 +1323,18 @@ class Calendar_Controller_EventNotificationsTests extends Calendar_TestCase
         $this->assertEquals(3, count($persistentEvent->attendee));
 
         $messages = self::getMessages();
-        
-        $this->assertEquals(2, count($messages), 'two mails should be send to current user (resource + attender)');
+
+        if ($suppress_notification) {
+            $this->assertEquals(1, count($messages), 'one mails should be send to current user (only attender)');
+        } else {
+            $this->assertEquals(2, count($messages), 'two mails should be send to current user (resource + attender)');
+        }
     }
 
     /**
      * Enable by a preference which sends mails to every user who got permissions to edit the resource
      */
-    public function testResourceNotificationForGrantedUsers()
+    public function testResourceNotificationForGrantedUsers($userIsAttendee = true)
     {
         // Enable feature, disabled by default!
         Calendar_Config::getInstance()->set(Calendar_Config::RESOURCE_MAIL_FOR_EDITORS, true);
@@ -1338,6 +1345,16 @@ class Calendar_Controller_EventNotificationsTests extends Calendar_TestCase
 
         $event = $this->_getEvent(/*now = */ true);
         $event->attendee->addRecord($this->_createAttender($persistentResource->getId(), Calendar_Model_Attender::USERTYPE_RESOURCE));
+
+        if (! $userIsAttendee) {
+            // remove organizer attendee
+            foreach ($event->attendee as $idx => $attender) {
+                if ($attender->user_id === $event->organizer) {
+                    $event->attendee->removeRecord($attender);
+                }
+            }
+        }
+
         $grants = Tinebase_Container::getInstance()->getGrantsOfContainer($resource->container_id);
 
         $newGrants = array(
@@ -1357,9 +1374,29 @@ class Calendar_Controller_EventNotificationsTests extends Calendar_TestCase
 
         Tinebase_Container::getInstance()->setGrants($resource->container_id, $grants);
 
+        $this->assertContains('Resource "' . $persistentResource->name . '" was booked', print_r($messages, true));
         $this->assertContains('Meeting Room (Required, No response)', print_r($messages, true));
-        $this->assertEquals(4, count($messages), 'four mails should be send to current user (resource + attender + everybody whos allowed to edit this resource)');
-        $this->assertEquals(3, count($persistentEvent->attendee));
+
+        $this->assertEquals(4, count($messages), 'four mails should be send to current user (resource + attender + everybody who is allowed to edit this resource)');
+        $this->assertEquals(count($event->attendee), count($persistentEvent->attendee));
+    }
+
+    /**
+     * @see 0011272: ressource invitation: organizer receives no mail if he is no attendee
+     */
+    public function testResourceNotificationForNonAttendeeOrganizer()
+    {
+        $this->testResourceNotificationForGrantedUsers(/* $userIsAttendee = */ false);
+    }
+
+    /**
+     * testResourceNotificationMuteForEditors
+     *
+     * @see 0011312: Make resource notification handling and default status configurable
+     */
+    public function testResourceNotificationMuteForEditors()
+    {
+        $this->testResourceNotification(/* $suppress_notification = */ false);
     }
     
     /**