From bd6658bd3117b3ad05569d5821a69f2c374156cc Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Thu, 13 Nov 2014 19:57:50 -0800 Subject: [PATCH] CRM-15578 - Mailing API - Misc test fixes (esp. syntax-conformance) --- CRM/Mailing/BAO/MailingAB.php | 4 +++- CRM/Mailing/Event/BAO/Queue.php | 6 ++++-- api/v3/Mailing.php | 9 ++++++++- api/v3/MailingAB.php | 3 +++ api/v3/MailingEventQueue.php | 15 +++++++++------ api/v3/utils.php | 4 ++++ tests/phpunit/api/v3/SyntaxConformanceTest.php | 8 +++----- xml/schema/Mailing/Event/Queue.xml | 6 ++++++ xml/schema/Mailing/MailingAB.xml | 17 ++++++++++++++--- 9 files changed, 54 insertions(+), 18 deletions(-) diff --git a/CRM/Mailing/BAO/MailingAB.php b/CRM/Mailing/BAO/MailingAB.php index 6e2cc44dba..c78a60c445 100644 --- a/CRM/Mailing/BAO/MailingAB.php +++ b/CRM/Mailing/BAO/MailingAB.php @@ -93,7 +93,9 @@ class CRM_Mailing_BAO_MailingAB extends CRM_Mailing_DAO_MailingAB { $mailingab = new CRM_Mailing_DAO_MailingAB(); $mailingab->id = $id; - $mailingab->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID()); + if (!$id) { + $mailingab->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID()); + } $mailingab->copyValues($params); diff --git a/CRM/Mailing/Event/BAO/Queue.php b/CRM/Mailing/Event/BAO/Queue.php index ccc2083452..9eb96a7867 100644 --- a/CRM/Mailing/Event/BAO/Queue.php +++ b/CRM/Mailing/Event/BAO/Queue.php @@ -53,7 +53,9 @@ class CRM_Mailing_Event_BAO_Queue extends CRM_Mailing_Event_DAO_Queue { public static function create($params) { $eq = new CRM_Mailing_Event_BAO_Queue(); $eq->copyValues($params); - $eq->hash = self::hash($params); + if (empty($params['id']) && empty($params['hash'])) { + $eq->hash = self::hash($params); + } $eq->save(); return $eq; } @@ -69,7 +71,7 @@ class CRM_Mailing_Event_BAO_Queue extends CRM_Mailing_Event_DAO_Queue { */ public static function hash($params) { $jobId = $params['job_id']; - $emailId = $params['email_id']; + $emailId = CRM_Utils_Array::value('email_id', $params, ''); $contactId = $params['contact_id']; return substr(sha1("{$jobId}:{$emailId}:{$contactId}:" . time()), diff --git a/api/v3/Mailing.php b/api/v3/Mailing.php index 481bd09bba..466c832ecb 100755 --- a/api/v3/Mailing.php +++ b/api/v3/Mailing.php @@ -397,7 +397,13 @@ function civicrm_api3_mailing_preview($params) { TRUE, $details[0][$contactID], $attachments ); - return civicrm_api3_create_success(array('subject' => $mime->_headers['Subject'], 'html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody())); + return civicrm_api3_create_success(array( + 'id' => $params['id'], + 'contact_id' => $contactID, + 'subject' => $mime->_headers['Subject'], + 'html' => $mime->getHTMLBody(), + 'text' => $mime->getTXTBody(), + )); } function civicrm_api3_mailing_send_test($params) { @@ -484,6 +490,7 @@ ORDER BY e.is_bulkmail DESC, e.is_primary DESC */ function _civicrm_api3_mailing_stats_spec(&$params) { $params['date']['api.default'] = 'now'; + $params['date']['title'] = 'Date'; } function civicrm_api3_mailing_stats($params) { diff --git a/api/v3/MailingAB.php b/api/v3/MailingAB.php index 0ca759c160..a761960c6a 100755 --- a/api/v3/MailingAB.php +++ b/api/v3/MailingAB.php @@ -115,6 +115,7 @@ function civicrm_api3_mailing_a_b_recipients_update($params) { * @param array $params array or parameters determined by getfields */ function _civicrm_api3_mailing_a_b_send_mail_spec(&$params) { + $params['scheduled_date']['title'] = 'Scheduled Dated'; $params['scheduled_date']['api.default'] = 'now'; } @@ -156,7 +157,9 @@ function civicrm_api3_mailing_a_b_send_mail($params) { * @param array $params array or parameters determined by getfields */ function _civicrm_api3_mailing_a_b_graph_stats_spec(&$params) { + $params['split_count']['title'] = 'Split Count'; $params['split_count']['api.default'] = 6; + $params['split_count_select']['title'] = 'Split Count Select'; $params['split_count_select']['api.required'] = 1; } diff --git a/api/v3/MailingEventQueue.php b/api/v3/MailingEventQueue.php index acfc28d58c..661a4dc4c5 100644 --- a/api/v3/MailingEventQueue.php +++ b/api/v3/MailingEventQueue.php @@ -46,22 +46,25 @@ * @access public */ function civicrm_api3_mailing_event_queue_create($params) { - if (!array_key_exists('email_id', $params) && !array_key_exists('phone_id', $params)) { - throw new API_Exception("Mandatory key(s) missing from params array: email_id or phone_id field are required" ); + if (!array_key_exists('id', $params) && !array_key_exists('email_id', $params) && !array_key_exists('phone_id', $params)) { + throw new API_Exception("Mandatory key missing from params array: id, email_id, or phone_id field is required" ); } civicrm_api3_verify_mandatory($params, 'CRM_Mailing_DAO_MailingJob', array('job_id','contact_id'), FALSE ); - $mailingEventQueueArray = array(); - $mailingEventQueueBAO = CRM_Mailing_Event_BAO_Queue::create($params); - _civicrm_api3_object_to_array($mailingEventQueueBAO, $mailingEventQueueArray[$mailingEventQueueBAO->id]); - return civicrm_api3_create_success($mailingEventQueueArray); + return _civicrm_api3_basic_create('CRM_Mailing_Event_BAO_Queue', $params); } + function civicrm_api3_mailing_event_queue_get($params) { return _civicrm_api3_basic_get('CRM_Mailing_Event_BAO_Queue', $params); } + +function civicrm_api3_mailing_event_queue_delete($params) { + return _civicrm_api3_basic_delete('CRM_Mailing_Event_BAO_Queue', $params); +} + /** * Adjust Metadata for Create action * diff --git a/api/v3/utils.php b/api/v3/utils.php index 2f6a105deb..705575d699 100644 --- a/api/v3/utils.php +++ b/api/v3/utils.php @@ -291,6 +291,10 @@ function _civicrm_api3_get_DAO($name) { // hack to deal with incorrectly named BAO/DAO - see CRM-10859 + // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingEventQueue + if ($name == 'MailingEventQueue') { + return 'CRM_Mailing_Event_DAO_Queue'; + } // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingRecipients // but am not confident mailing_recipients is tested so have not tackled. if ($name == 'MailingRecipients') { diff --git a/tests/phpunit/api/v3/SyntaxConformanceTest.php b/tests/phpunit/api/v3/SyntaxConformanceTest.php index 88949e9ca5..ca43477fb8 100644 --- a/tests/phpunit/api/v3/SyntaxConformanceTest.php +++ b/tests/phpunit/api/v3/SyntaxConformanceTest.php @@ -205,7 +205,7 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase { * @return array */ public static function toBeSkipped_get($sequential = FALSE) { - $entitiesWithoutGet = array('MailingEventSubscribe', 'MailingEventConfirm', 'MailingEventResubscribe', 'MailingEventUnsubscribe', 'MailingGroup', 'Location'); + $entitiesWithoutGet = array('MailingEventSubscribe', 'MailingEventConfirm', 'MailingEventResubscribe', 'MailingEventUnsubscribe', 'Location'); if ($sequential === TRUE) { return $entitiesWithoutGet; } @@ -252,7 +252,7 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase { * @return array */ public static function toBeSkipped_delete($sequential = FALSE) { - $entitiesWithout = array('MailingContact', 'MailingEventConfirm', 'MailingEventResubscribe', 'MailingEventSubscribe', 'MailingEventUnsubscribe', 'MailingGroup', 'MailingRecipients', 'Constant', 'Entity', 'Location', 'Domain', 'Profile', 'CustomValue', 'Setting'); + $entitiesWithout = array('MailingContact', 'MailingEventConfirm', 'MailingEventResubscribe', 'MailingEventSubscribe', 'MailingEventUnsubscribe', 'MailingRecipients', 'Constant', 'Entity', 'Location', 'Domain', 'Profile', 'CustomValue', 'Setting'); if ($sequential === TRUE) { return $entitiesWithout; } @@ -379,7 +379,6 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase { 'EntityTag', // non-standard api - has inappropriate mandatory fields & doesn't implement limit 'Event', // failed 'check that a 5 limit returns 5' - probably is_template field is wrong or something, or could be limit doesn't work right 'Extension', // can't handle creating 25 - 'MailingGroup', // no get call on MailingGroup 'Note', // fails on 5 limit - probably a set up problem 'Setting', //a bit of a pseudoapi - keys by domain ); @@ -396,7 +395,6 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase { 'EntityTag', // non-standard api - has inappropriate mandatory fields & doesn't implement limit 'Extension', // can't handle creating 25 'Note', // note has a default get that isn't implemented in createTestObject -meaning you don't 'get' them - 'MailingGroup', // no get call on MailingGroup 'Setting', //a bit of a pseudoapi - keys by domain ); return $entitiesWithout; @@ -530,7 +528,7 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase { * @dataProvider entities */ public function testGetFields($Entity) { - if (in_array($Entity, $this->deprecatedAPI) || $Entity == 'Entity' || $Entity == 'CustomValue' || $Entity == 'MailingGroup') { + if (in_array($Entity, $this->deprecatedAPI) || $Entity == 'Entity' || $Entity == 'CustomValue') { return; } diff --git a/xml/schema/Mailing/Event/Queue.xml b/xml/schema/Mailing/Event/Queue.xml index 44fef4f044..c8d2028a80 100644 --- a/xml/schema/Mailing/Event/Queue.xml +++ b/xml/schema/Mailing/Event/Queue.xml @@ -9,6 +9,7 @@ id int unsigned + Mailing Event Queue ID true @@ -19,6 +20,7 @@ job_id int unsigned true + Job ID FK to Job @@ -31,6 +33,7 @@ email_id int unsigned NULL + Email ID FK to Email @@ -43,6 +46,7 @@ contact_id int unsigned true + Contact ID FK to Contact @@ -56,12 +60,14 @@ varchar 255 true + Security Hash Security hash phone_id int unsigned NULL + Phone ID FK to Phone diff --git a/xml/schema/Mailing/MailingAB.xml b/xml/schema/Mailing/MailingAB.xml index 38d3783968..712956303a 100644 --- a/xml/schema/Mailing/MailingAB.xml +++ b/xml/schema/Mailing/MailingAB.xml @@ -9,6 +9,7 @@ id int unsigned + MailingAB ID true @@ -19,36 +20,42 @@ name varchar 25 + Name name of abtesting 4.5 mailing_id_a int unsigned - Id of mailing A + Mailing ID (A) + The first experimental mailing ("A" condition) 4.5 mailing_id_b int unsigned - Id of mailing B + Mailing ID (B) + The second experimental mailing ("B" condition) 4.5 mailing_id_c int unsigned - temporary mailing which is created during a/b testing + Mailing ID (C) + The final, general mailing (derived from A or B) 4.5 domain_id int unsigned + Domain ID Which site is this mailing for 4.5 testing_criteria_id int unsigned + Testing Criteria ID mailing_ab_testing_criteria @@ -57,6 +64,7 @@ winner_criteria_id int unsigned + Winner Criteria ID mailing_ab_winner_criteria @@ -65,6 +73,7 @@ specific_url varchar + URL for Winner Criteria 255 What specific url to track 4.5 @@ -72,12 +81,14 @@ declare_winning_time datetime + Declaration Time In how much time to declare winner 4.5 group_percentage int unsigned + Group Percentage 4.5 -- 2.25.1