Merge pull request #18761 from MegaphoneJon/event43-test
[civicrm-core.git] / tests / phpunit / CRM / Contact / Page / View / UserDashBoardTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
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 |
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
29 /**
30 * Contributions created for the test.
31 *
32 * @var array
33 */
34 protected $contributions = [];
35
36 /**
37 * Prepare for test
38 */
39 public function setUp() {
40 parent::setUp();
41 $this->contactID = $this->createLoggedInUser();
42 $this->listenForPageContent();
43 }
44
45 /**
46 * Clean up after each test.
47 */
48 public function tearDown() {
49 $this->quickCleanUpFinancialEntities();
50 $this->quickCleanup(['civicrm_uf_match']);
51 CRM_Utils_Hook::singleton()->reset();
52 CRM_Core_Session::singleton()->reset();
53 CRM_Core_Smarty::singleton()->clearTemplateVars();
54 $this->callAPISuccess('Contact', 'delete', ['id' => $this->contactID]);
55 }
56
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 */
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,
84 'receive_date' => '2018-11-22',
85 'receipt_date' => '2018-11-23',
86 'trxn_id' => '',
87 'invoice_id' => '',
88 ]);
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 ]);
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,
104 'receive_date' => '2018-11-20',
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]);
112 $this->callAPISuccess('Setting', 'create', ['default_invoice_page' => $this->contributionPageCreate()['id']]);
113 $this->runUserDashboard();
114 $expectedStrings = [
115 'Your Contribution(s)',
116 '<table class="selector"><tr class="columnheader"><th>Total Amount</th><th>Financial Type</th><th>Received date</th><th>Receipt Sent</th><th>Status</th><th></th>',
117 '<td>Completed</td><td><a class="button no-popup nowrap"href="/index.php?q=civicrm/contribute/invoice&amp;reset=1&amp;id=1&amp;cid=' . $this->contactID . '"><i class="crm-i fa-print" aria-hidden="true"></i><span>Print Invoice</span></a></td></tr><tr id=\'rowid2\'',
118 'Pay Now',
119 ];
120
121 $this->assertPageContains($expectedStrings);
122 $this->assertSmartyVariableArrayIncludes('contribute_rows', 1, [
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',
131 'receipt_date' => '2018-11-22 00:00:00',
132 ]);
133
134 }
135
136 /**
137 * Test the content of the dashboard.
138 *
139 * @throws \CRM_Core_Exception
140 * @throws \CiviCRM_API3_Exception
141 */
142 public function testDashboardContentContributions() {
143 $this->contributionCreate(['contact_id' => $this->contactID]);
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'];
149 $this->runUserDashboard();
150 $expectedStrings = [
151 'Your Contribution(s)',
152 '<table class="selector"><tr class="columnheader"><th>Total Amount</th><th>Financial Type</th><th>Received date</th><th>Receipt Sent</th><th>Status</th>',
153 '<td>$ 100.00 </td><td>Donation</td>',
154 '<td>Completed</td>',
155 ];
156 $this->assertPageContains($expectedStrings);
157 }
158
159 /**
160 * Run the user dashboard.
161 */
162 protected function runUserDashboard() {
163 $_REQUEST = ['reset' => 1, 'id' => $this->contactID];
164 $dashboard = new CRM_Contact_Page_View_UserDashBoard();
165 $dashboard->_contactId = $this->contactID;
166 $dashboard->run();
167 $_REQUEST = [];
168 }
169
170 /**
171 * Tests the event dashboard as a minimally permissioned user.
172 */
173 public function testEventDashboard() {
174 CRM_Core_Config::singleton()->userPermissionClass->permissions = [
175 'register for events',
176 'access Contact Dashboard',
177 ];
178 $event1id = $this->eventCreate()['id'];
179 $event2id = $this->eventCreate(['title' => 'Social Distancing Meetup Group'])['id'];
180 $params['contact_id'] = $this->contactID;
181 $params['event_id'] = $event1id;
182 $this->participantCreate($params);
183 $params['event_id'] = $event2id;
184 $this->participantCreate($params);
185 $this->runUserDashboard();
186 $expectedStrings = [
187 '<div class="header-dark">Your Event(s)</div>',
188 '<td class="crm-participant-event-id_1"><a href="/index.php?q=civicrm/event/info&amp;reset=1&amp;id=1&amp;context=dashboard">Annual CiviCRM meet</a></td>',
189 '<td class="crm-participant-event-id_2"><a href="/index.php?q=civicrm/event/info&amp;reset=1&amp;id=2&amp;context=dashboard">Social Distancing Meetup Group</a></td>',
190 ];
191 $this->assertPageContains($expectedStrings);
192 $this->individualCreate();
193 }
194
195 }