Add api testing / custom data support for MailingJob.
authoreileen <emcnaughton@wikimedia.org>
Mon, 28 May 2018 00:00:13 +0000 (12:00 +1200)
committereileen <emcnaughton@wikimedia.org>
Wed, 30 May 2018 02:20:50 +0000 (14:20 +1200)
There is no specific requirement for MailingJob to have custom data - but
this is generally part of standardising all entities to support custom
data (ie. workign through the list in
api_v3_SyntaxConformanceTest:toBeSkipped_custom_data_creatable
 to remove the remaining rows.

Fix some places to call create instead of saving mailing job to trigger hooks.

CRM/Mailing/BAO/MailingJob.php
api/v3/Mailing.php
api/v3/MailingJob.php
tests/phpunit/api/v3/MailingTest.php
tests/phpunit/api/v3/SyntaxConformanceTest.php

index 367f85dbd0d290fb2eb8cfe4f66acc65e9bc8607..426332a3a1b143e655e4286e607216b807e40766 100644 (file)
@@ -63,19 +63,20 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
    * @throws \CRM_Core_Exception
    */
   static public function create($params) {
-    $job = new CRM_Mailing_BAO_MailingJob();
-    $job->mailing_id = $params['mailing_id'];
-    $job->status = $params['status'];
-    $job->scheduled_date = $params['scheduled_date'];
-    $job->is_test = $params['is_test'];
-    $job->save();
-    if ($params['mailing_id']) {
-      CRM_Mailing_BAO_Mailing::getRecipients($params['mailing_id']);
-      return $job;
-    }
-    else {
+    if (empty($params['id']) && empty($params['mailing_id'])) {
       throw new CRM_Core_Exception("Failed to create job: Unknown mailing ID");
     }
+    $op = empty($params['id']) ? 'create' : 'edit';
+    CRM_Utils_Hook::pre($op, 'MailingJob', CRM_Utils_Array::value('id', $params), $params);
+
+    $jobDAO = new CRM_Mailing_BAO_MailingJob();
+    $jobDAO->copyValues($params, TRUE);
+    $jobDAO->save();
+    if (!empty($params['mailing_id'])) {
+      CRM_Mailing_BAO_Mailing::getRecipients($params['mailing_id']);
+    }
+    CRM_Utils_Hook::post($op, 'MailingJob', $jobDAO->id, $jobDAO);
+    return $jobDAO;
   }
 
   /**
@@ -89,7 +90,6 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
   public static function runJobs($testParams = NULL, $mode = NULL) {
     $job = new CRM_Mailing_BAO_MailingJob();
 
-    $config = CRM_Core_Config::singleton();
     $jobTable = CRM_Mailing_DAO_MailingJob::getTableName();
     $mailingTable = CRM_Mailing_DAO_Mailing::getTableName();
     $mailerBatchLimit = Civi::settings()->get('mailerBatchLimit');
@@ -173,12 +173,12 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
         // get the parent ID, and limit and offset
         $job->queue($testParams);
 
-        // Mark up the starting time
-        $saveJob = new CRM_Mailing_DAO_MailingJob();
-        $saveJob->id = $job->id;
-        $saveJob->start_date = date('YmdHis');
-        $saveJob->status = 'Running';
-        $saveJob->save();
+        // Update to show job has started.
+        self::create([
+          'id' => $job->id,
+          'start_date' => date('YmdHis'),
+          'status' => 'Running',
+        ]);
 
         $transaction->commit();
       }
@@ -206,13 +206,7 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
         // Finish the job.
 
         $transaction = new CRM_Core_Transaction();
-
-        $saveJob = new CRM_Mailing_DAO_MailingJob();
-        $saveJob->id = $job->id;
-        $saveJob->end_date = date('YmdHis');
-        $saveJob->status = 'Complete';
-        $saveJob->save();
-
+        self::create(['id' => $job->id, 'end_date' => date('YmdHis'), 'status' => 'Complete']);
         $transaction->commit();
 
         // don't mark the mailing as complete
@@ -379,13 +373,8 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
 
       $job->split_job($offset);
 
-      // update the status of the parent job
-      $saveJob = new CRM_Mailing_DAO_MailingJob();
-      $saveJob->id = $job->id;
-      $saveJob->start_date = date('YmdHis');
-      $saveJob->status = 'Running';
-      $saveJob->save();
-
+      // Update the status of the parent job
+      self::create(['id' => $job->id, 'start_date' => date('YmdHis'), 'status' => 'Running']);
       $transaction->commit();
 
       // Release the job lock
@@ -811,11 +800,7 @@ AND    ( ( job_type IS NULL ) OR
       in_array($job->status, array('Scheduled', 'Running', 'Paused'))
     ) {
 
-      $newJob = new CRM_Mailing_BAO_MailingJob();
-      $newJob->id = $job->id;
-      $newJob->end_date = date('YmdHis');
-      $newJob->status = 'Canceled';
-      $newJob->save();
+      self::create(['id' => $job->id, 'end_date' => date('YmdHis'), 'status' => 'Canceled']);
 
       // also cancel all child jobs
       $sql = "
index c9819ba00204f62ad4467d8b6c5152e9e3ef5ccb..7a7257693cc92310aab1c502c4b22c0d446554a3 100644 (file)
@@ -251,7 +251,7 @@ function civicrm_api3_mailing_delete($params) {
  * @return array
  */
 function civicrm_api3_mailing_get($params) {
-  $result = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+  $result = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'Mailing');
   return _civicrm_api3_mailing_get_formatResult($result);
 }
 
index a744ded53e3e7f57d65e5cf7f540610c57462e3e..4e2602e476246da8bec60a43354c43a6839fbce1 100644 (file)
@@ -41,7 +41,7 @@
  * @throws \API_Exception
  */
 function civicrm_api3_mailing_job_create($params) {
-  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MailingJob');
 }
 
 /**
@@ -67,7 +67,7 @@ function _civicrm_api3_mailing_job_create_spec(&$params) {
  *   API return Array of matching mailing jobs.
  */
 function civicrm_api3_mailing_job_get($params) {
-  return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+  return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MailingJob');
 }
 
 /**
index 1e506e601df6e006fb1a845ab999ecfa41a3fb36..695203bbc62546b88c795696be8ab2d066da3a8c 100644 (file)
@@ -737,6 +737,7 @@ SELECT event_queue_id, time_stamp FROM mail_{$type}_temp";
     // END SAMPLE DATA
 
     $create = $this->callAPISuccess('Mailing', 'create', $params);
+    $created = $this->callAPISuccess('Mailing', 'get', []);
     $createId = $create['id'];
     $this->createLoggedInUser();
     $clone = $this->callAPIAndDocument('Mailing', 'clone', array('id' => $create['id']), __FUNCTION__, __FILE__);
index 9694308527bffe34d3d4026d46ed173be63f06df..2d264adac6afac82909e6f1853b05129055cca50 100644 (file)
@@ -384,7 +384,6 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
       'MailingEventResubscribe',
       'MailingEventSubscribe',
       'MailingEventUnsubscribe',
-      'MailingJob',
       'MembershipPayment',
       'SavedSearch',
       'UFJoin',
@@ -488,7 +487,6 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
       // pseudo-entity; testUpdateSingleValueAlter doesn't introspect properly on it. Multiple magic fields
       'Mailing',
       'MailingGroup',
-      'MailingJob',
       'Address',
       'MailingEventUnsubscribe',
       'MailingEventSubscribe',