ActionSchedule - Update APIs & tests to work with new metadata
authorcolemanw <coleman@civicrm.org>
Thu, 3 Aug 2023 17:14:34 +0000 (13:14 -0400)
committercolemanw <coleman@civicrm.org>
Thu, 10 Aug 2023 00:04:33 +0000 (20:04 -0400)
Before: Name was not automatically generated by the DAO so lots of manual wrangling
After: Now that name has a unique index, the DAO handles it automatically

api/v3/ActionSchedule.php
tests/phpunit/CRM/Activity/Form/ActivityTest.php
tests/phpunit/CRM/Core/BAO/ActionScheduleTest.php
tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php
tests/phpunit/api/v3/ActionScheduleTest.php
tests/phpunit/api/v3/SyntaxConformanceTest.php

index 0931d6724778ff82007b02dcc8d1590f426640ff..2fb0dae647ac8a12bbb1aa349462071484c73190 100644 (file)
@@ -36,9 +36,6 @@ function civicrm_api3_action_schedule_get($params) {
  */
 function civicrm_api3_action_schedule_create($params) {
   civicrm_api3_verify_one_mandatory($params, NULL, ['start_action_date', 'absolute_date']);
-  if (!array_key_exists('name', $params) && !array_key_exists('id', $params)) {
-    $params['name'] = CRM_Utils_String::munge($params['title']);
-  }
   return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ActionSchedule');
 }
 
@@ -54,6 +51,17 @@ function _civicrm_api3_action_schedule_create_spec(&$params) {
   $params['title']['api.required'] = TRUE;
   $params['mapping_id']['api.required'] = TRUE;
   $params['entity_value']['api.required'] = TRUE;
+
+  // APIv3 doesn't understand dynamic pseudoconstants so just remove them
+  // to prevent false-positive validation errors.
+  $params['entity_value']['pseudoconstant'] = NULL;
+  $params['entity_status']['pseudoconstant'] = NULL;
+  $params['recipient']['pseudoconstant'] = NULL;
+  $params['recipient_listing']['pseudoconstant'] = NULL;
+  $params['start_action_date']['pseudoconstant'] = NULL;
+  $params['end_date']['pseudoconstant'] = NULL;
+  $params['filter_contact_language']['pseudoconstant'] = NULL;
+  $params['communication_language']['pseudoconstant'] = NULL;
 }
 
 /**
index a9c0e912dbc20164d89e221940c0a0cffb84c6fb..1606517e8f9d0e4dd9ba3f0d264c3a723082510d 100644 (file)
@@ -99,6 +99,7 @@ class CRM_Activity_Form_ActivityTest extends CiviUnitTestCase {
 
     // Create the repeating activity's schedule.
     $actionScheduleParams = [
+      'title' => 'RepeatingActSchedule',
       'used_for' => 'civicrm_activity',
       'entity_value' => $repeatingActivityBao->id,
       'start_action_date' => $repeatingActivityBao->activity_date_time,
index 1a6b64919a70ebb78ca941606e73286688a9d559..ea2b3599136fba0896bf5ec22a0d4581901cc12d 100644 (file)
@@ -136,7 +136,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'birth_date' => '20050707',
     ];
     $this->fixtures['sched_activity_1day'] = [
-      'name' => 'One_Day_Phone_Call_Notice',
       'title' => 'One Day Phone Call Notice',
       'limit_to' => '1',
       'absolute_date' => NULL,
@@ -168,7 +167,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'effective_end_date' => '2012-06-15 00:00:00',
     ];
     $this->fixtures['sched_activity_5minute'] = [
-      'name' => 'Five_Minute_Phone_Call_Notice',
       'title' => 'Five Minute Phone Call Notice',
       'limit_to' => '1',
       'absolute_date' => NULL,
@@ -198,7 +196,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => '5 minutes (about {activity.activity_type})',
     ];
     $this->fixtures['sched_activity_1day_r'] = [
-      'name' => 'One_Day_Phone_Call_Notice_R',
       'title' => 'One Day Phone Call Notice R',
       'limit_to' => 1,
       'absolute_date' => NULL,
@@ -229,7 +226,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'effective_end_date' => '2012-06-14 16:00:00',
     ];
     $this->fixtures['sched_activity_1day_r_on_abs_date'] = [
-      'name' => 'One_Day_Phone_Call_Notice_R',
       'title' => 'One Day Phone Call Notice R',
       'limit_to' => 1,
       'absolute_date' => CRM_Utils_Date::processDate('20120614100000'),
@@ -259,7 +255,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => '1-Day (repeating) (about {activity.activity_type})',
     ];
     $this->fixtures['sched_event_name_1day_on_abs_date'] = [
-      'name' => 'sched_event_name_1day_on_abs_date',
       'title' => 'sched_event_name_1day_on_abs_date',
       'limit_to' => 1,
       'absolute_date' => CRM_Utils_Date::processDate('20120614100000'),
@@ -289,7 +284,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'sched_event_name_1day_on_abs_date',
     ];
     $this->fixtures['sched_membership_join_2week'] = [
-      'name' => 'sched_membership_join_2week',
       'title' => 'sched_membership_join_2week',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_join_2week</p>',
@@ -318,7 +312,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'subject sched_membership_join_2week (joined {membership.join_date})',
     ];
     $this->fixtures['sched_membership_start_1week'] = [
-      'name' => 'sched_membership_start_1week',
       'title' => 'sched_membership_start_1week',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_start_1week</p>',
@@ -347,7 +340,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'subject sched_membership_start_1week (joined {membership.start_date})',
     ];
     $this->fixtures['sched_membership_end_2week'] = [
-      'name' => 'sched_membership_end_2week',
       'title' => 'sched_membership_end_2week',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_end_2week</p>',
@@ -377,7 +369,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'effective_start_date' => '2012-05-01 01:00:00',
     ];
     $this->fixtures['sched_on_membership_end_date'] = [
-      'name' => 'sched_on_membership_end_date',
       'title' => 'sched_on_membership_end_date',
       'body_html' => '<p>Your membership expired today</p>',
       'body_text' => 'Your membership expired today',
@@ -391,7 +382,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'subject send reminder on membership_end_date',
     ];
     $this->fixtures['sched_after_1day_membership_end_date'] = [
-      'name' => 'sched_after_1day_membership_end_date',
       'title' => 'sched_after_1day_membership_end_date',
       'body_html' => '<p>Your membership expired yesterday</p>',
       'body_text' => 'Your membership expired yesterday',
@@ -406,7 +396,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_membership_end_2month'] = [
-      'name' => 'sched_membership_end_2month',
       'title' => 'sched_membership_end_2month',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_end_2month</p>',
@@ -436,7 +425,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_membership_absolute_date'] = [
-      'name' => 'sched_membership_absolute_date',
       'title' => 'sched_membership_absolute_date',
       'absolute_date' => CRM_Utils_Date::processDate('20120614100000'),
       'body_html' => '<p>body sched_membership_absolute_date</p>',
@@ -466,7 +454,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_birth_day_yesterday'] = [
-      'name' => 'sched_contact_birth_day_yesterday',
       'title' => 'sched_contact_birth_day_yesterday',
       'absolute_date' => '',
       'body_html' => '<p>you look like you were born yesterday!</p>',
@@ -496,7 +483,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_birth_day_anniversary'] = [
-      'name' => 'sched_contact_birth_day_anniversary',
       'title' => 'sched_contact_birth_day_anniversary',
       'absolute_date' => '',
       'body_html' => '<p>happy birthday!</p>',
@@ -526,7 +512,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_grad_tomorrow'] = [
-      'name' => 'sched_contact_grad_tomorrow',
       'title' => 'sched_contact_grad_tomorrow',
       'absolute_date' => '',
       'body_html' => '<p>congratulations on your graduation!</p>',
@@ -556,7 +541,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_grad_anniversary'] = [
-      'name' => 'sched_contact_grad_anniversary',
       'title' => 'sched_contact_grad_anniversary',
       'absolute_date' => '',
       'body_html' => '<p>dear alum, please send us money.</p>',
@@ -585,7 +569,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_created_yesterday'] = [
-      'name' => 'sched_contact_created_yesterday',
       'title' => 'sched_contact_created_yesterday',
       'absolute_date' => '',
       'body_html' => '<p>Your contact was created yesterday</p>',
@@ -615,7 +598,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_contact_mod_anniversary'] = [
-      'name' => 'sched_contact_mod_anniversary',
       'title' => 'sched_contact_mod_anniversary',
       'absolute_date' => '',
       'body_html' => '<p>You last updated your data last year</p>',
@@ -645,7 +627,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_event_type_start_1week_before'] = [
-      'name' => 'sched_event_type_start_1week_before',
       'title' => 'sched_event_type_start_1week_before',
       'absolute_date' => '',
       'body_html' => '<p>body sched_event_type_start_1week_before ({event.title})</p>',
@@ -677,7 +658,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'subject sched_event_type_start_1week_before ({event.title})',
     ];
     $this->fixtures['sched_event_type_end_2month_repeat_twice_2_weeks'] = [
-      'name' => 'sched_event_type_end_2month_repeat_twice_2_weeks',
       'title' => 'sched_event_type_end_2month_repeat_twice_2_weeks',
       'absolute_date' => '',
       'body_html' => '<p>body sched_event_type_end_2month_repeat_twice_2_weeks {event.title}</p>',
@@ -710,7 +690,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_membership_end_2month_repeat_twice_4_weeks'] = [
-      'name' => 'sched_membership_end_2month',
       'title' => 'sched_membership_end_2month',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_end_2month</p>',
@@ -739,7 +718,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'subject sched_membership_end_2month',
     ];
     $this->fixtures['sched_membership_end_limit_to_none'] = [
-      'name' => 'limit to none',
       'title' => 'limit to none',
       'absolute_date' => '',
       'body_html' => '<p>body sched_membership_end_2month</p>',
@@ -769,7 +747,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'subject' => 'limit to none',
     ];
     $this->fixtures['sched_on_membership_end_date_repeat_interval'] = [
-      'name' => 'sched_on_membership_end_date',
       'title' => 'sched_on_membership_end_date',
       'body_html' => '<p>Your membership expired 1 unit ago</p>',
       'body_text' => 'Your membership expired 1 unit ago',
@@ -787,7 +764,7 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $customGroup = $this->callAPISuccess('CustomGroup', 'create', [
-      'title' => ts('Test Contact Custom group'),
+      'title' => 'Test Contact Custom group',
       'name' => 'test_contact_cg',
       'extends' => 'Contact',
       'domain_id' => CRM_Core_Config::domainID(),
@@ -817,7 +794,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     ];
 
     $this->fixtures['sched_on_custom_date'] = [
-      'name' => 'sched_on_custom_date',
       'title' => 'sched_on_custom_date',
       'body_html' => '<p>Send reminder before 1 hour of custom date field</p>',
       'body_text' => 'Send reminder on custom date field',
@@ -1390,7 +1366,6 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     );
 
     $actionScheduleParams = [
-      'name' => 'sched_contact_birth_day_yesterday',
       'title' => 'sched_contact_birth_day_yesterday',
       'absolute_date' => '',
       'body_html' => '<p>you look like you were born yesterday!</p>',
@@ -1407,7 +1382,7 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
       'is_repeat' => '0',
       'mapping_id' => 6,
       'msg_template_id' => '',
-      'recipient' => '2',
+      'recipient' => 'group',
       'recipient_listing' => '',
       'recipient_manual' => '',
       'record_activity' => 1,
@@ -1887,9 +1862,12 @@ class CRM_Core_BAO_ActionScheduleTest extends CiviUnitTestCase {
     $contact = $this->callAPISuccess('Contact', 'create', $this->fixtures['contact_birthdate']);
     $this->_testObjects['CRM_Contact_DAO_Contact'][] = $contact['id'];
     $modifiedDate = $this->callAPISuccess('Contact', 'getvalue', ['id' => $contact['id'], 'return' => 'modified_date']);
-    $actionSchedule = $this->createScheduleFromFixtures('sched_contact_mod_anniversary');
-    $actionSchedule['effective_start_date'] = date('Y-m-d H:i:s', strtotime($contact['values'][$contact['id']]['modified_date']));
-    $actionScheduleDao = CRM_Core_BAO_ActionSchedule::writeRecord($actionSchedule);
+    $this->createScheduleFromFixtures('sched_contact_mod_anniversary');
+    $actionSchedule = [
+      'id' => $this->fixtures['sched_contact_mod_anniversary']['action_schedule_id'],
+      'effective_start_date' => date('Y-m-d H:i:s', strtotime($contact['values'][$contact['id']]['modified_date'])),
+    ];
+    CRM_Core_BAO_ActionSchedule::writeRecord($actionSchedule);
     $this->assertCronRuns([
       [
         // On some random day, no email.
index 9ac465eb4e60d81e6e2ac664dc704f05c37e545b..a20b8cd6a4ba06c02f0658261e70c39d71c3317a 100644 (file)
@@ -84,6 +84,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase {
    */
   private function createActionSchedule($entity_id, $entity_table) {
     $params = [
+      'title' => 'My Reminder',
       "used_for" => $entity_table,
       "entity_value" => $entity_id,
       "start_action_date" => date("YmdHis"),
index 9473b17878c1846f53a36e1749675e3fdf23cbe8..ccfe14a87d9f228b9c8104119f0b253edea5147c 100644 (file)
@@ -63,6 +63,11 @@ class api_v3_ActionScheduleTest extends CiviUnitTestCase {
       'is_active' => 1,
       'record_activity' => 1,
       'start_action_date' => 'activity_date_time',
+      'start_action_offset' => '1',
+      'start_action_unit' => 'day',
+      'start_action_condition' => 'before',
+      'subject' => 'Hello',
+      'body_html' => '<p>Hello</p>',
       'mapping_id' => CRM_Activity_ActionMapping::ACTIVITY_MAPPING_ID,
     ];
     $actionSchedule = $this->callAPISuccess('action_schedule', 'create', $params);
index 3ae84f73e80dba13755e4f12120f82281754d074..bfd1f4cc98c2ef2f9c15ec6f8f32252359b4bd74 100644 (file)
@@ -486,6 +486,8 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
   public static function toBeSkipped_updatesingle($sequential = FALSE) {
     $entitiesWithout = [
       'Attachment',
+      // This one confuses the test by unsetting some fields based on the values of others
+      'ActionSchedule',
       // pseudo-entity; testUpdateSingleValueAlter doesn't introspect properly on it. Multiple magic fields
       'Mailing',
       'MailingEventUnsubscribe',