From 7575b840243ffd8fea98ae3ec11ec648c4347abf Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Mon, 24 Nov 2014 01:57:42 -0800 Subject: [PATCH] CRM-15578 - Fix inconsistent generation of recipient list The recipient preview worked well with new mailings but was flaky with saved mailings. New mailings relied the api.default for "api.mailing_job.create" which was not included with existing mailings. This patch takes explicit control over "api.mailing_job.create". --- js/angular-crmMailing2-services.js | 9 +++++++-- tests/phpunit/api/v3/MailingTest.php | 11 +++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/js/angular-crmMailing2-services.js b/js/angular-crmMailing2-services.js index 9b97271cfd..653770b15a 100644 --- a/js/angular-crmMailing2-services.js +++ b/js/angular-crmMailing2-services.js @@ -152,6 +152,7 @@ // get the resulting recipients -- then rollback any changes. var params = _.extend({}, mailing, { options: {force_rollback: 1}, + 'api.mailing_job.create': 1, // note: exact match to API default 'api.MailingRecipients.get': { mailing_id: '$value.id', options: { limit: previewLimit }, @@ -168,7 +169,9 @@ // @param mailing Object (per APIv3) // @return Promise save: function(mailing) { - var params = _.extend({}, mailing); + var params = _.extend({}, mailing, { + 'api.mailing_job.create': 0 // note: exact match to API default + }); return crmApi('Mailing', 'create', params).then(function(result){ if (result.id && !mailing.id) mailing.id = result.id; // no rollback, so update mailing.id return result.values[result.id]; @@ -180,7 +183,9 @@ // @return Promise submit: function(mailing) { throw 'Not implemented: crmMailingMgr.submit'; -// var params = _.extend({}, mailing); +// var params = _.extend({}, mailing, { +// 'api.mailing_job.create': 1 // note: exact match to API default +// }); // return crmApi('Mailing', 'create', params).then(function(result){ // if (result.id && !mailing.id) mailing.id = result.id; // no rollback, so update mailing.id // return result.values[result.id]; diff --git a/tests/phpunit/api/v3/MailingTest.php b/tests/phpunit/api/v3/MailingTest.php index 6e72f7c9fa..ada2e2c68e 100755 --- a/tests/phpunit/api/v3/MailingTest.php +++ b/tests/phpunit/api/v3/MailingTest.php @@ -106,24 +106,35 @@ class api_v3_MailingTest extends CiviUnitTestCase { $getGroup1 = $this->callAPISuccess('MailingGroup', 'get', array('mailing_id' => $createResult['id'])); $getGroup1_ids = array_values(CRM_Utils_Array::collect('entity_id', $getGroup1['values'])); $this->assertEquals(array($groupIDs['a']), $getGroup1_ids); + $getRecip1 = $this->callAPISuccess('MailingRecipients', 'get', array('mailing_id' => $createResult['id'])); + $getRecip1_ids = array_values(CRM_Utils_Array::collect('contact_id', $getRecip1['values'])); + $this->assertEquals(array($contactIDs['a']), $getRecip1_ids); // ** Pass 2: Update without any changes to groups[include] $nullopParams = $createParams; $nullopParams['id'] = $createResult['id']; + $updateParams['api.mailing_job.create'] = 1; unset($nullopParams['groups']['include']); $this->callAPISuccess('Mailing', 'create', $nullopParams); $getGroup2 = $this->callAPISuccess('MailingGroup', 'get', array('mailing_id' => $createResult['id'])); $getGroup2_ids = array_values(CRM_Utils_Array::collect('entity_id', $getGroup2['values'])); $this->assertEquals(array($groupIDs['a']), $getGroup2_ids); + $getRecip2 = $this->callAPISuccess('MailingRecipients', 'get', array('mailing_id' => $createResult['id'])); + $getRecip2_ids = array_values(CRM_Utils_Array::collect('contact_id', $getRecip2['values'])); + $this->assertEquals(array($contactIDs['a']), $getRecip2_ids); // ** Pass 3: Update with different groups[include] $updateParams = $createParams; $updateParams['id'] = $createResult['id']; $updateParams['groups']['include'] = array($groupIDs['b']); + $updateParams['api.mailing_job.create'] = 1; $this->callAPISuccess('Mailing', 'create', $updateParams); $getGroup3 = $this->callAPISuccess('MailingGroup', 'get', array('mailing_id' => $createResult['id'])); $getGroup3_ids = array_values(CRM_Utils_Array::collect('entity_id', $getGroup3['values'])); $this->assertEquals(array($groupIDs['b']), $getGroup3_ids); + $getRecip3 = $this->callAPISuccess('MailingRecipients', 'get', array('mailing_id' => $createResult['id'])); + $getRecip3_ids = array_values(CRM_Utils_Array::collect('contact_id', $getRecip3['values'])); + $this->assertEquals(array($contactIDs['b']), $getRecip3_ids); } public function testMailerPreview() { -- 2.25.1