Fixes dev/core#2840 bug in recent items sidebar/menu
authorColeman Watts <coleman@civicrm.org>
Thu, 16 Sep 2021 00:33:28 +0000 (20:33 -0400)
committerColeman Watts <coleman@civicrm.org>
Thu, 16 Sep 2021 04:22:53 +0000 (00:22 -0400)
CRM/Utils/Recent.php
tests/phpunit/api/v4/Action/RecentItemsTest.php

index 64636385199d5823f834027febf1c17d49d119fe..d4fcf923ec698f0b17e6a53d69bfd552db8e4130 100644 (file)
@@ -152,11 +152,11 @@ class CRM_Utils_Recent {
 
     self::$_recent = array_filter(self::$_recent, function($item) use ($props) {
       foreach ($props as $key => $val) {
-        if (isset($item[$key]) && $item[$key] == $val) {
-          return FALSE;
+        if (isset($item[$key]) && $item[$key] != $val) {
+          return TRUE;
         }
       }
-      return TRUE;
+      return FALSE;
     });
   }
 
index 1ea4a0b2292c5395bed54c74ff97dcdabf190090..4c81a618e13b23b490b331777a733e0a6f8cbbcb 100644 (file)
@@ -30,21 +30,32 @@ class RecentItemsTest extends UnitTestCase {
   public function testAddDeleteActivity(): void {
     $cid = $this->createLoggedInUser();
 
-    $aid = Activity::create(FALSE)
+    $aid1 = Activity::create(FALSE)
       ->addValue('activity_type_id:name', 'Meeting')
       ->addValue('source_contact_id', $cid)
       ->addValue('subject', 'Hello recent!')
       ->execute()->first()['id'];
-
-    $this->assertEquals(1, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid]));
-
+    $this->assertEquals(1, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid1]));
     $this->assertStringContainsString('Hello recent!', \CRM_Utils_Recent::get()[0]['title']);
 
-    Activity::delete(FALSE)->addWhere('id', '=', $aid)->execute();
+    $aid2 = Activity::create(FALSE)
+      ->addValue('activity_type_id:name', 'Meeting')
+      ->addValue('source_contact_id', $cid)
+      ->addValue('subject', 'Goodbye recent!')
+      ->execute()->first()['id'];
+    $this->assertEquals(1, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid2]));
+    $this->assertStringContainsString('Goodbye recent!', \CRM_Utils_Recent::get()[0]['title']);
+
+    Activity::delete(FALSE)->addWhere('id', '=', $aid1)->execute();
 
-    $this->assertEquals(0, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid]));
+    $this->assertEquals(0, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid1]));
+    $this->assertEquals(1, $this->getRecentItemCount(['type' => 'Activity', 'id' => $aid2]));
   }
 
+  /**
+   * @param array $props
+   * @return int
+   */
   private function getRecentItemCount($props) {
     $count = 0;
     foreach (\CRM_Utils_Recent::get() as $item) {