Merge pull request #9187 from sqweets/ExportHeadersRelationships
[civicrm-core.git] / tests / phpunit / api / v3 / MailingContactTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2016 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28 /**
29 * File for the CiviCRM APIv3 job functions
30 *
31 * @package CiviCRM_APIv3
32 * @subpackage API_MailingContact
33 *
34 * @copyright CiviCRM LLC (c) 2004-2016
35 * @version $Id: Job.php 30879 2010-11-22 15:45:55Z shot $
36 */
37
38 /**
39 * Class api_v3_MailingContactTest
40 * @group headless
41 */
42 class api_v3_MailingContactTest extends CiviUnitTestCase {
43 protected $_apiversion = 3;
44 protected $_entity = 'mailing';
45
46 public function setUp() {
47 parent::setUp();
48 $params = array(
49 'first_name' => 'abc1',
50 'contact_type' => 'Individual',
51 'last_name' => 'xyz1',
52 );
53 $this->_contact = $this->callAPISuccess("contact", "create", $params);
54 }
55
56 public function tearDown() {
57 $this->callAPISuccess("contact", "delete", array('id' => $this->_contact['id']));
58 parent::tearDown();
59 }
60
61 /**
62 * Test that the api responds correctly to null params.
63 *
64 * Do not copy and paste.
65 *
66 * Tests like this that test the wrapper belong in the SyntaxConformance class
67 * (which already has a 'not array test)
68 * I have left this here in case 'null' isn't covered in that class
69 * but don't copy it only any other classes
70 */
71 public function testMailingNullParams() {
72 $this->callAPIFailure('MailingContact', 'get', NULL);
73 }
74
75 public function testMailingContactGetFields() {
76 $result = $this->callAPISuccess('MailingContact', 'getfields', array(
77 'action' => 'get',
78 )
79 );
80 $this->assertEquals('Delivered', $result['values']['type']['api.default']);
81 }
82
83 /**
84 * Test for proper error when you do not supply the contact_id.
85 *
86 * Do not copy and paste.
87 *
88 * Test is of marginal if any value & testing of wrapper level functionality
89 * belongs in the SyntaxConformance class
90 */
91 public function testMailingNoContactID() {
92 $params = array(
93 'something' => 'This is not a real field',
94 );
95 $this->callAPIFailure('MailingContact', 'get', $params);
96 }
97
98 /**
99 * Test that invalid contact_id return with proper error messages.
100 *
101 * Do not copy & paste.
102 *
103 * Test is of marginal if any value & testing of wrapper level functionality
104 * belongs in the SyntaxConformance class
105 */
106 public function testMailingContactInvalidContactID() {
107 $params = array('contact_id' => 'This is not a number');
108 $this->callAPIFailure('MailingContact', 'get', $params);
109 }
110
111 /**
112 * Test that invalid types are returned with appropriate errors.
113 */
114 public function testMailingContactInvalidType() {
115 $params = array(
116 'contact_id' => 23,
117 'type' => 'invalid',
118 );
119 $this->callAPIFailure('MailingContact', 'get', $params);
120 }
121
122 /**
123 * Test for success result when there are no mailings for a the given contact.
124 */
125 public function testMailingContactNoMailings() {
126 $params = array(
127 'contact_id' => $this->_contact['id'],
128 );
129 $result = $this->callAPISuccess('MailingContact', 'get', $params);
130 $this->assertEquals($result['count'], 0);
131 $this->assertTrue(empty($result['values']));
132 }
133
134 /**
135 * Test that the API returns a mailing properly when there is only one.
136 */
137 public function testMailingContactDelivered() {
138 $op = new PHPUnit_Extensions_Database_Operation_Insert();
139 //Create the User
140 $op->execute($this->_dbconn,
141 $this->createXMLDataSet(
142 dirname(__FILE__) . '/dataset/mailing_contact.xml'
143 )
144 );
145 // Create the Mailing and connections to the user.
146 $op->execute($this->_dbconn,
147 $this->createXMLDataSet(
148 dirname(__FILE__) . '/dataset/mailing_delivered.xml'
149 )
150 );
151
152 $params = array(
153 'contact_id' => 23,
154 'type' => 'Delivered',
155 );
156
157 $result = $this->callAPISuccess('MailingContact', 'get', $params);
158 $count = $this->callAPISuccess('MailingContact', 'getcount', $params);
159 $this->assertEquals($result['count'], 1);
160 $this->assertEquals($count, 1);
161 $this->assertFalse(empty($result['values']));
162 $this->assertEquals($result['values'][1]['mailing_id'], 1);
163 $this->assertEquals($result['values'][1]['subject'], "Some Subject");
164 $this->assertEquals($result['values'][1]['creator_id'], 3);
165 $this->assertEquals($result['values'][1]['creator_name'], "xyz1, abc1");
166 }
167
168
169 /**
170 * Test that the API returns only the "Bounced" mailings when instructed to do so.
171 */
172 public function testMailingContactBounced() {
173 $op = new PHPUnit_Extensions_Database_Operation_Insert();
174 // Create the User.
175 $op->execute($this->_dbconn,
176 $this->createXMLDataSet(
177 dirname(__FILE__) . '/dataset/mailing_contact.xml'
178 )
179 );
180 // Create the Mailing and connections to the user.
181 $op->execute($this->_dbconn,
182 $this->createXMLDataSet(
183 dirname(__FILE__) . '/dataset/mailing_bounced.xml'
184 )
185 );
186
187 $params = array(
188 'contact_id' => 23,
189 'type' => 'Bounced',
190 );
191
192 $result = $this->callAPISuccess('MailingContact', 'get', $params);
193 $this->assertEquals($result['count'], 1);
194 $this->assertFalse(empty($result['values']));
195 $this->assertEquals($result['values'][2]['mailing_id'], 2);
196 $this->assertEquals($result['values'][2]['subject'], "Some Subject");
197 $this->assertEquals($result['values'][2]['creator_id'], 3);
198 $this->assertEquals($result['values'][2]['creator_name'], "xyz1, abc1");
199 }
200
201 }