Commit | Line | Data |
---|---|---|
98867798 | 1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
7d61e75f | 4 | | Copyright CiviCRM LLC. All rights reserved. | |
98867798 | 5 | | | |
7d61e75f TO |
6 | | This work is published under the GNU AGPLv3 license with some | |
7 | | permitted exceptions and without any warranty. For full license | | |
8 | | and copyright information, see https://civicrm.org/licensing | | |
98867798 | 9 | +--------------------------------------------------------------------+ |
10 | */ | |
11 | ||
12 | /** | |
13 | * Test class for CRM_Contact_Page_View_UserDashBoard | |
14 | * | |
15 | * @package CiviCRM | |
16 | * @group headless | |
17 | */ | |
18 | class CRM_Contact_Page_View_UserDashBoardTest extends CiviUnitTestCase { | |
19 | ||
20 | use CRMTraits_Page_PageTestTrait; | |
21 | ||
22 | /** | |
23 | * Contact ID of logged in user. | |
24 | * | |
25 | * @var int | |
26 | */ | |
27 | protected $contactID; | |
28 | ||
e6507b1f | 29 | /** |
30 | * Contributions created for the test. | |
31 | * | |
32 | * @var array | |
33 | */ | |
34 | protected $contributions = []; | |
35 | ||
98867798 | 36 | /** |
37 | * Prepare for test | |
38 | */ | |
faba1457 | 39 | public function setUp(): void { |
98867798 | 40 | parent::setUp(); |
41 | $this->contactID = $this->createLoggedInUser(); | |
42 | $this->listenForPageContent(); | |
43 | } | |
44 | ||
d0df87f2 | 45 | /** |
46 | * Clean up after each test. | |
47 | */ | |
594a9328 | 48 | public function tearDown(): void { |
d0df87f2 | 49 | $this->quickCleanUpFinancialEntities(); |
50 | $this->quickCleanup(['civicrm_uf_match']); | |
e0001b13 | 51 | CRM_Utils_Hook::singleton()->reset(); |
e6507b1f | 52 | CRM_Core_Session::singleton()->reset(); |
53 | CRM_Core_Smarty::singleton()->clearTemplateVars(); | |
54 | $this->callAPISuccess('Contact', 'delete', ['id' => $this->contactID]); | |
d0df87f2 | 55 | } |
56 | ||
98867798 | 57 | /** |
58 | * Test the content of the dashboard. | |
59 | */ | |
60 | public function testDashboardContentEmptyContact() { | |
61 | $this->runUserDashboard(); | |
62 | $expectedStrings = [ | |
63 | 'You are not currently subscribed to any Groups', | |
64 | 'There are no contributions on record for you.', | |
65 | 'There are no Pledges for your record.', | |
66 | 'You are not registered for any current or upcoming Events.', | |
67 | 'There are no memberships on record for you.', | |
68 | 'You do not have any active Personal Campaign pages.', | |
69 | ]; | |
70 | $this->assertPageContains($expectedStrings); | |
71 | } | |
72 | ||
73 | /** | |
74 | * Test the content of the dashboard. | |
75 | */ | |
e6507b1f | 76 | public function testDashboardContentContributionsWithInvoicingEnabled() { |
77 | $this->contributions[] = $this->contributionCreate([ | |
78 | 'contact_id' => $this->contactID, | |
79 | 'receive_date' => '2018-11-21', | |
80 | 'receipt_date' => '2018-11-22', | |
81 | ]); | |
82 | $this->contributions[] = $this->contributionCreate([ | |
83 | 'contact_id' => $this->contactID, | |
3c73a132 AH |
84 | 'receive_date' => '2018-11-22', |
85 | 'receipt_date' => '2018-11-23', | |
e6507b1f | 86 | 'trxn_id' => '', |
87 | 'invoice_id' => '', | |
88 | ]); | |
10f949e6 | 89 | $this->contributions[] = $this->contributionCreate([ |
90 | 'contact_id' => $this->contactID, | |
91 | 'receive_date' => '2018-11-24', | |
92 | 'receipt_date' => '2018-11-24', | |
93 | 'trxn_id' => '', | |
94 | 'invoice_id' => '', | |
95 | 'contribution_status_id' => 'Pending', | |
96 | ]); | |
e6507b1f | 97 | $recur = $this->callAPISuccess('ContributionRecur', 'create', [ |
98 | 'contact_id' => $this->contactID, | |
99 | 'frequency_interval' => 1, | |
100 | 'amount' => 5, | |
101 | ]); | |
102 | $this->contributions[] = $this->contributionCreate([ | |
103 | 'contact_id' => $this->contactID, | |
3c73a132 | 104 | 'receive_date' => '2018-11-20', |
e6507b1f | 105 | 'amount_level' => 'high', |
106 | 'contribution_status_id' => 'Cancelled', | |
107 | 'invoice_id' => NULL, | |
108 | 'trxn_id' => NULL, | |
109 | 'contribution_recur_id' => $recur['id'], | |
110 | ]); | |
111 | $this->callAPISuccess('Setting', 'create', ['invoicing' => 1]); | |
10f949e6 | 112 | $this->callAPISuccess('Setting', 'create', ['default_invoice_page' => $this->contributionPageCreate()['id']]); |
98867798 | 113 | $this->runUserDashboard(); |
114 | $expectedStrings = [ | |
115 | 'Your Contribution(s)', | |
dbfe939a | 116 | '<table class="selector"><tr class="columnheader"><th>Total Amount</th><th>Financial Type</th><th>Received date</th><th>Receipt Sent</th><th>Balance</th><th>Status</th><th></th>', |
16d7b9f4 | 117 | '<td>Completed</td><td><a class="button no-popup nowrap"href="/index.php?q=civicrm/contribute/invoice&reset=1&id=1&cid=' . $this->contactID . '"><i class="crm-i fa-print" aria-hidden="true"></i><span>Print Invoice</span></a></td></tr><tr id=\'rowid2\'', |
10f949e6 | 118 | 'Pay Now', |
98867798 | 119 | ]; |
e6507b1f | 120 | |
98867798 | 121 | $this->assertPageContains($expectedStrings); |
3c73a132 | 122 | $this->assertSmartyVariableArrayIncludes('contribute_rows', 1, [ |
e6507b1f | 123 | 'contact_id' => $this->contactID, |
124 | 'contribution_id' => '1', | |
125 | 'total_amount' => '100.00', | |
126 | 'financial_type' => 'Donation', | |
127 | 'contribution_source' => 'SSF', | |
128 | 'receive_date' => '2018-11-21 00:00:00', | |
129 | 'contribution_status' => 'Completed', | |
130 | 'currency' => 'USD', | |
8bfce657 | 131 | 'receipt_date' => '2018-11-22 00:00:00', |
e6507b1f | 132 | ]); |
133 | ||
98867798 | 134 | } |
135 | ||
136 | /** | |
137 | * Test the content of the dashboard. | |
ff6f993e | 138 | * |
139 | * @throws \CRM_Core_Exception | |
140 | * @throws \CiviCRM_API3_Exception | |
98867798 | 141 | */ |
e6507b1f | 142 | public function testDashboardContentContributions() { |
98867798 | 143 | $this->contributionCreate(['contact_id' => $this->contactID]); |
e6507b1f | 144 | $this->contributions[] = civicrm_api3('Contribution', 'get', [ |
145 | 'contact_id' => $this->contactID, | |
146 | 'options' => ['limit' => 12, 'sort' => 'receive_date DESC'], | |
147 | 'sequential' => 1, | |
148 | ])['values']; | |
98867798 | 149 | $this->runUserDashboard(); |
150 | $expectedStrings = [ | |
151 | 'Your Contribution(s)', | |
dbfe939a | 152 | '<table class="selector"><tr class="columnheader"><th>Total Amount</th><th>Financial Type</th><th>Received date</th><th>Receipt Sent</th><th>Balance</th><th>Status</th>', |
e6507b1f | 153 | '<td>$ 100.00 </td><td>Donation</td>', |
154 | '<td>Completed</td>', | |
98867798 | 155 | ]; |
156 | $this->assertPageContains($expectedStrings); | |
98867798 | 157 | } |
158 | ||
dbfe939a JG |
159 | /** |
160 | * Test the presence of a "Pay Now" button on partial payments | |
161 | * | |
162 | * @throws \CRM_Core_Exception | |
163 | * @throws \CiviCRM_API3_Exception | |
164 | */ | |
165 | public function testDashboardPartialPayments() { | |
166 | $contributionId = $this->contributionCreate([ | |
167 | 'contact_id' => $this->contactID, | |
168 | 'contribution_status_id' => 'Pending', | |
169 | 'total_amount' => 25, | |
170 | ]); | |
171 | $result = civicrm_api3('Payment', 'create', [ | |
172 | 'contribution_id' => $contributionId, | |
173 | 'total_amount' => 11, | |
174 | 'trxn_date' => "2021-05-11", | |
175 | ]); | |
176 | $this->contributions[] = civicrm_api3('Contribution', 'get', [ | |
177 | 'contact_id' => $this->contactID, | |
178 | 'options' => ['limit' => 12, 'sort' => 'receive_date DESC'], | |
179 | 'sequential' => 1, | |
180 | ])['values']; | |
181 | $this->runUserDashboard(); | |
182 | $expectedStrings = [ | |
183 | 'Your Contribution(s)', | |
184 | '<table class="selector"><tr class="columnheader"><th>Total Amount</th><th>Financial Type</th><th>Received date</th><th>Receipt Sent</th><th>Balance</th><th>Status</th>', | |
185 | '<td>$ 25.00 </td><td>Donation</td>', | |
186 | '<td>$ 14.00</td><td>Partially paid</td>', | |
187 | 'Pay Now', | |
188 | ]; | |
189 | $this->assertPageContains($expectedStrings); | |
190 | } | |
191 | ||
98867798 | 192 | /** |
193 | * Run the user dashboard. | |
194 | */ | |
195 | protected function runUserDashboard() { | |
e6507b1f | 196 | $_REQUEST = ['reset' => 1, 'id' => $this->contactID]; |
98867798 | 197 | $dashboard = new CRM_Contact_Page_View_UserDashBoard(); |
e6507b1f | 198 | $dashboard->_contactId = $this->contactID; |
98867798 | 199 | $dashboard->run(); |
e6507b1f | 200 | $_REQUEST = []; |
98867798 | 201 | } |
202 | ||
e58f9fcc JG |
203 | /** |
204 | * Tests the event dashboard as a minimally permissioned user. | |
205 | */ | |
206 | public function testEventDashboard() { | |
207 | CRM_Core_Config::singleton()->userPermissionClass->permissions = [ | |
208 | 'register for events', | |
209 | 'access Contact Dashboard', | |
210 | ]; | |
211 | $event1id = $this->eventCreate()['id']; | |
212 | $event2id = $this->eventCreate(['title' => 'Social Distancing Meetup Group'])['id']; | |
213 | $params['contact_id'] = $this->contactID; | |
214 | $params['event_id'] = $event1id; | |
215 | $this->participantCreate($params); | |
216 | $params['event_id'] = $event2id; | |
217 | $this->participantCreate($params); | |
218 | $this->runUserDashboard(); | |
219 | $expectedStrings = [ | |
220 | '<div class="header-dark">Your Event(s)</div>', | |
221 | '<td class="crm-participant-event-id_1"><a href="/index.php?q=civicrm/event/info&reset=1&id=1&context=dashboard">Annual CiviCRM meet</a></td>', | |
222 | '<td class="crm-participant-event-id_2"><a href="/index.php?q=civicrm/event/info&reset=1&id=2&context=dashboard">Social Distancing Meetup Group</a></td>', | |
223 | ]; | |
224 | $this->assertPageContains($expectedStrings); | |
225 | $this->individualCreate(); | |
226 | } | |
227 | ||
98867798 | 228 | } |