PageRenderTime 54ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/app/protected/modules/reports/tests/unit/RowsAndColumnsReportToExportAdapterTest.php

https://bitbucket.org/zurmo/zurmo/
PHP | 584 lines | 442 code | 61 blank | 81 comment | 1 complexity | 120d654624eb8c124c58623831cce46b MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-2-Clause
  1. <?php
  2. /*********************************************************************************
  3. * Zurmo is a customer relationship management program developed by
  4. * Zurmo, Inc. Copyright (C) 2015 Zurmo Inc.
  5. *
  6. * Zurmo is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU Affero General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * Zurmo is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
  24. * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
  25. *
  26. * The interactive user interfaces in original and modified versions
  27. * of this program must display Appropriate Legal Notices, as required under
  28. * Section 5 of the GNU Affero General Public License version 3.
  29. *
  30. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  31. * these Appropriate Legal Notices must retain the display of the Zurmo
  32. * logo and Zurmo copyright notice. If the display of the logo is not reasonably
  33. * feasible for technical reasons, the Appropriate Legal Notices must display the words
  34. * "Copyright Zurmo Inc. 2015. All rights reserved".
  35. ********************************************************************************/
  36. /**
  37. * Test RowsAndColumnsReportToExportAdapter
  38. */
  39. class RowsAndColumnsReportToExportAdapterTest extends ZurmoBaseTest
  40. {
  41. public static function setUpBeforeClass()
  42. {
  43. parent::setUpBeforeClass();
  44. $super = SecurityTestHelper::createSuperAdmin();
  45. }
  46. public static function getDependentTestModelClassNames()
  47. {
  48. return array('ReportModelTestItem', 'ReportModelTestItem2', 'ReportModelTestItem3', 'ReportModelTestItem7');
  49. }
  50. public function setUp()
  51. {
  52. parent::setUp();
  53. Yii::app()->user->userModel = User::getByUsername('super');
  54. DisplayAttributeForReportForm::resetCount();
  55. }
  56. public function testGetDataWithNoRelationsSet()
  57. {
  58. $values = array(
  59. 'Test1',
  60. 'Test2',
  61. 'Test3',
  62. 'Sample',
  63. 'Demo',
  64. );
  65. $customFieldData = CustomFieldData::getByName('ReportTestDropDown');
  66. $customFieldData->serializedData = serialize($values);
  67. $saved = $customFieldData->save();
  68. $this->assertTrue($saved);
  69. $report = new Report();
  70. $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
  71. $report->setModuleClassName('ReportsTestModule');
  72. $report->setFiltersStructure('');
  73. //for fullname attribute (derived attribute)
  74. $reportModelTestItem = new ReportModelTestItem();
  75. $reportModelTestItem->firstName = 'xFirst';
  76. $reportModelTestItem->lastName = 'xLast';
  77. $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  78. Report::TYPE_ROWS_AND_COLUMNS);
  79. $displayAttribute1->setModelAliasUsingTableAliasName('model1');
  80. $displayAttribute1->attributeIndexOrDerivedType = 'FullName';
  81. $displayAttribute1->label = 'Name';
  82. $report->addDisplayAttribute($displayAttribute1);
  83. //for boolean attribute
  84. $reportModelTestItem->boolean = true;
  85. $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  86. Report::TYPE_ROWS_AND_COLUMNS);
  87. $displayAttribute2->setModelAliasUsingTableAliasName('model1');
  88. $displayAttribute2->attributeIndexOrDerivedType = 'boolean';
  89. $report->addDisplayAttribute($displayAttribute2);
  90. //for date attribute
  91. $reportModelTestItem->date = '2013-02-12';
  92. $displayAttribute3 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  93. Report::TYPE_ROWS_AND_COLUMNS);
  94. $displayAttribute3->setModelAliasUsingTableAliasName('model1');
  95. $displayAttribute3->attributeIndexOrDerivedType = 'date';
  96. $report->addDisplayAttribute($displayAttribute3);
  97. //for datetime attribute
  98. $reportModelTestItem->dateTime = '2013-02-12 10:15:00';
  99. $displayAttribute4 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  100. Report::TYPE_ROWS_AND_COLUMNS);
  101. $displayAttribute4->setModelAliasUsingTableAliasName('model1');
  102. $displayAttribute4->attributeIndexOrDerivedType = 'dateTime';
  103. $report->addDisplayAttribute($displayAttribute4);
  104. //for float attribute
  105. $reportModelTestItem->float = 10.5;
  106. $displayAttribute5 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  107. Report::TYPE_ROWS_AND_COLUMNS);
  108. $displayAttribute5->setModelAliasUsingTableAliasName('model1');
  109. $displayAttribute5->attributeIndexOrDerivedType = 'float';
  110. $report->addDisplayAttribute($displayAttribute5);
  111. //for integer attribute
  112. $reportModelTestItem->integer = 10;
  113. $displayAttribute6 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  114. Report::TYPE_ROWS_AND_COLUMNS);
  115. $displayAttribute6->setModelAliasUsingTableAliasName('model1');
  116. $displayAttribute6->attributeIndexOrDerivedType = 'integer';
  117. $report->addDisplayAttribute($displayAttribute6);
  118. //for phone attribute
  119. $reportModelTestItem->phone = '7842151012';
  120. $displayAttribute7 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  121. Report::TYPE_ROWS_AND_COLUMNS);
  122. $displayAttribute7->setModelAliasUsingTableAliasName('model1');
  123. $displayAttribute7->attributeIndexOrDerivedType = 'phone';
  124. $report->addDisplayAttribute($displayAttribute7);
  125. //for string attribute
  126. $reportModelTestItem->string = 'xString';
  127. $displayAttribute8 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  128. Report::TYPE_ROWS_AND_COLUMNS);
  129. $displayAttribute8->setModelAliasUsingTableAliasName('model1');
  130. $displayAttribute8->attributeIndexOrDerivedType = 'string';
  131. $report->addDisplayAttribute($displayAttribute8);
  132. //for textArea attribute
  133. $reportModelTestItem->textArea = 'xtextAreatest';
  134. $displayAttribute9 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  135. Report::TYPE_ROWS_AND_COLUMNS);
  136. $displayAttribute9->setModelAliasUsingTableAliasName('model1');
  137. $displayAttribute9->attributeIndexOrDerivedType = 'textArea';
  138. $report->addDisplayAttribute($displayAttribute9);
  139. //for url attribute
  140. $reportModelTestItem->url = 'http://www.test.com';
  141. $displayAttribute10 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  142. Report::TYPE_ROWS_AND_COLUMNS);
  143. $displayAttribute10->setModelAliasUsingTableAliasName('model1');
  144. $displayAttribute10->attributeIndexOrDerivedType = 'url';
  145. $report->addDisplayAttribute($displayAttribute10);
  146. //for dropdown attribute
  147. $reportModelTestItem->dropDown->value = $values[1];
  148. $displayAttribute11 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  149. Report::TYPE_ROWS_AND_COLUMNS);
  150. $displayAttribute11->setModelAliasUsingTableAliasName('model1');
  151. $displayAttribute11->attributeIndexOrDerivedType = 'dropDown';
  152. $report->addDisplayAttribute($displayAttribute11);
  153. //for currency attribute
  154. $currencies = Currency::getAll();
  155. $currencyValue = new CurrencyValue();
  156. $currencyValue->value = 100;
  157. $currencyValue->currency = $currencies[0];
  158. $this->assertEquals('USD', $currencyValue->currency->code);
  159. $reportModelTestItem->currencyValue = $currencyValue;
  160. $displayAttribute12 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  161. Report::TYPE_ROWS_AND_COLUMNS);
  162. $displayAttribute12->setModelAliasUsingTableAliasName('model1');
  163. $displayAttribute12->attributeIndexOrDerivedType = 'currencyValue';
  164. $report->addDisplayAttribute($displayAttribute12);
  165. //for primaryAddress attribute
  166. $reportModelTestItem->primaryAddress->street1 = 'someString';
  167. $displayAttribute13 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  168. Report::TYPE_ROWS_AND_COLUMNS);
  169. $displayAttribute13->setModelAliasUsingTableAliasName('model1');
  170. $displayAttribute13->attributeIndexOrDerivedType = 'primaryAddress___street1';
  171. $report->addDisplayAttribute($displayAttribute13);
  172. //for primaryEmail attribute
  173. $reportModelTestItem->primaryEmail->emailAddress = "test@someString.com";
  174. $displayAttribute14 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  175. Report::TYPE_ROWS_AND_COLUMNS);
  176. $displayAttribute14->setModelAliasUsingTableAliasName('model1');
  177. $displayAttribute14->attributeIndexOrDerivedType = 'primaryEmail___emailAddress';
  178. $report->addDisplayAttribute($displayAttribute14);
  179. //for multiDropDown attribute
  180. $customFieldValue = new CustomFieldValue();
  181. $customFieldValue->value = 'Multi 1';
  182. $reportModelTestItem->multiDropDown->values->add($customFieldValue);
  183. $customFieldValue = new CustomFieldValue();
  184. $customFieldValue->value = 'Multi 2';
  185. $reportModelTestItem->multiDropDown->values->add($customFieldValue);
  186. $displayAttribute15 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  187. Report::TYPE_ROWS_AND_COLUMNS);
  188. $displayAttribute15->setModelAliasUsingTableAliasName('model1');
  189. $displayAttribute15->attributeIndexOrDerivedType = 'multiDropDown';
  190. $report->addDisplayAttribute($displayAttribute15);
  191. //for tagCloud attribute
  192. $customFieldValue = new CustomFieldValue();
  193. $customFieldValue->value = 'Cloud 2';
  194. $reportModelTestItem->tagCloud->values->add($customFieldValue);
  195. $customFieldValue = new CustomFieldValue();
  196. $customFieldValue->value = 'Cloud 3';
  197. $reportModelTestItem->tagCloud->values->add($customFieldValue);
  198. $displayAttribute16 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  199. Report::TYPE_ROWS_AND_COLUMNS);
  200. $displayAttribute16->setModelAliasUsingTableAliasName('model1');
  201. $displayAttribute16->attributeIndexOrDerivedType = 'tagCloud';
  202. $report->addDisplayAttribute($displayAttribute16);
  203. //for radioDropDown attribute
  204. $reportModelTestItem->radioDropDown->value = $values[1];
  205. $displayAttribute17 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  206. Report::TYPE_ROWS_AND_COLUMNS);
  207. $displayAttribute17->setModelAliasUsingTableAliasName('model1');
  208. $displayAttribute17->attributeIndexOrDerivedType = 'radioDropDown';
  209. $report->addDisplayAttribute($displayAttribute17);
  210. //for likeContactState
  211. $reportModelTestItem7 = new ReportModelTestItem7;
  212. $reportModelTestItem7->name = 'someName';
  213. $reportModelTestItem->likeContactState = $reportModelTestItem7;
  214. $displayAttribute18 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  215. Report::TYPE_ROWS_AND_COLUMNS);
  216. $displayAttribute18->setModelAliasUsingTableAliasName('model1');
  217. $displayAttribute18->attributeIndexOrDerivedType = 'likeContactState';
  218. $report->addDisplayAttribute($displayAttribute18);
  219. //for dynamic user attribute
  220. $reportModelTestItem->owner = Yii::app()->user->userModel;
  221. $displayAttribute19 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  222. Report::TYPE_ROWS_AND_COLUMNS);
  223. $displayAttribute19->setModelAliasUsingTableAliasName('model1');
  224. $displayAttribute19->attributeIndexOrDerivedType = 'owner__User';
  225. $report->addDisplayAttribute($displayAttribute19);
  226. $saved = $reportModelTestItem->save();
  227. $this->assertTrue($saved);
  228. $dataProvider = new RowsAndColumnsReportDataProvider($report);
  229. $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
  230. $compareHeaderData = array( 'Name', 'Boolean', 'Date', 'Date Time', 'Float',
  231. 'Integer', 'Phone', 'String', 'Text Area', 'Url', 'Drop Down',
  232. 'Currency Value', 'Currency Value Currency', 'Primary Address >> Street 1',
  233. 'Primary Email >> Email Address', 'Multi Drop Down',
  234. 'Tag Cloud', 'Radio Drop Down', 'A name for a state', 'Owner');
  235. $compareRowData = array(array( 'xFirst xLast', 1, '2013-02-12', '2013-02-12 10:15:00',
  236. 10.5, 10, '7842151012', 'xString', 'xtextAreatest',
  237. 'http://www.test.com', 'Test2', '100.00', 'USD', 'someString', 'test@someString.com',
  238. 'Multi 1,Multi 2', 'Cloud 2,Cloud 3', 'Test2', 'someName', 'Clark Kent')); // Not Coding Standard
  239. $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
  240. $this->assertEquals($compareRowData, $adapter->getData());
  241. $reportModelTestItem->delete();
  242. }
  243. public function testExportRelationAttributes()
  244. {
  245. $values = array(
  246. 'Test1',
  247. 'Test2',
  248. 'Test3',
  249. 'Sample',
  250. 'Demo',
  251. );
  252. $customFieldData = CustomFieldData::getByName('ReportTestDropDown');
  253. $customFieldData->serializedData = serialize($values);
  254. $saved = $customFieldData->save();
  255. assert('$saved'); // Not Coding Standard
  256. $report = new Report();
  257. $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
  258. $report->setModuleClassName('ReportsTest2Module');
  259. $report->setFiltersStructure('');
  260. //for fullname attribute
  261. $reportModelTestItem = new ReportModelTestItem();
  262. $reportModelTestItem->firstName = 'xFirst';
  263. $reportModelTestItem->lastName = 'xLast';
  264. $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  265. Report::TYPE_ROWS_AND_COLUMNS);
  266. $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel');
  267. $displayAttribute1->attributeIndexOrDerivedType = 'hasMany2___FullName';
  268. $displayAttribute1->label = 'Name';
  269. $report->addDisplayAttribute($displayAttribute1);
  270. //for boolean attribute
  271. $reportModelTestItem->boolean = true;
  272. $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  273. Report::TYPE_ROWS_AND_COLUMNS);
  274. $displayAttribute2->setModelAliasUsingTableAliasName('relatedModel');
  275. $displayAttribute2->attributeIndexOrDerivedType = 'hasMany2___boolean';
  276. $report->addDisplayAttribute($displayAttribute2);
  277. //for date attribute
  278. $reportModelTestItem->date = '2013-02-12';
  279. $displayAttribute3 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  280. Report::TYPE_ROWS_AND_COLUMNS);
  281. $displayAttribute3->setModelAliasUsingTableAliasName('relatedModel');
  282. $displayAttribute3->attributeIndexOrDerivedType = 'hasMany2___date';
  283. $report->addDisplayAttribute($displayAttribute3);
  284. //for datetime attribute
  285. $reportModelTestItem->dateTime = '2013-02-12 10:15:00';
  286. $displayAttribute4 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  287. Report::TYPE_ROWS_AND_COLUMNS);
  288. $displayAttribute4->setModelAliasUsingTableAliasName('relatedModel');
  289. $displayAttribute4->attributeIndexOrDerivedType = 'hasMany2___dateTime';
  290. $report->addDisplayAttribute($displayAttribute4);
  291. //for float attribute
  292. $reportModelTestItem->float = 10.5;
  293. $displayAttribute5 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  294. Report::TYPE_ROWS_AND_COLUMNS);
  295. $displayAttribute5->setModelAliasUsingTableAliasName('relatedModel');
  296. $displayAttribute5->attributeIndexOrDerivedType = 'hasMany2___float';
  297. $report->addDisplayAttribute($displayAttribute5);
  298. //for integer attribute
  299. $reportModelTestItem->integer = 10;
  300. $displayAttribute6 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  301. Report::TYPE_ROWS_AND_COLUMNS);
  302. $displayAttribute6->setModelAliasUsingTableAliasName('relatedModel');
  303. $displayAttribute6->attributeIndexOrDerivedType = 'hasMany2___integer';
  304. $report->addDisplayAttribute($displayAttribute6);
  305. //for phone attribute
  306. $reportModelTestItem->phone = '7842151012';
  307. $displayAttribute7 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  308. Report::TYPE_ROWS_AND_COLUMNS);
  309. $displayAttribute7->setModelAliasUsingTableAliasName('relatedModel');
  310. $displayAttribute7->attributeIndexOrDerivedType = 'hasMany2___phone';
  311. $report->addDisplayAttribute($displayAttribute7);
  312. //for string attribute
  313. $reportModelTestItem->string = 'xString';
  314. $displayAttribute8 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  315. Report::TYPE_ROWS_AND_COLUMNS);
  316. $displayAttribute8->setModelAliasUsingTableAliasName('relatedModel');
  317. $displayAttribute8->attributeIndexOrDerivedType = 'hasMany2___string';
  318. $report->addDisplayAttribute($displayAttribute8);
  319. //for textArea attribute
  320. $reportModelTestItem->textArea = 'xtextAreatest';
  321. $displayAttribute9 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  322. Report::TYPE_ROWS_AND_COLUMNS);
  323. $displayAttribute9->setModelAliasUsingTableAliasName('relatedModel');
  324. $displayAttribute9->attributeIndexOrDerivedType = 'hasMany2___textArea';
  325. $report->addDisplayAttribute($displayAttribute9);
  326. //for url attribute
  327. $reportModelTestItem->url = 'http://www.test.com';
  328. $displayAttribute10 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  329. Report::TYPE_ROWS_AND_COLUMNS);
  330. $displayAttribute10->setModelAliasUsingTableAliasName('relatedModel');
  331. $displayAttribute10->attributeIndexOrDerivedType = 'hasMany2___url';
  332. $report->addDisplayAttribute($displayAttribute10);
  333. //for dropdown attribute
  334. $reportModelTestItem->dropDown->value = $values[1];
  335. $displayAttribute11 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  336. Report::TYPE_ROWS_AND_COLUMNS);
  337. $displayAttribute11->setModelAliasUsingTableAliasName('relatedModel');
  338. $displayAttribute11->attributeIndexOrDerivedType = 'hasMany2___dropDown';
  339. $report->addDisplayAttribute($displayAttribute11);
  340. //for currency attribute
  341. $currencies = Currency::getAll();
  342. $currencyValue = new CurrencyValue();
  343. $currencyValue->value = 100;
  344. $currencyValue->currency = $currencies[0];
  345. $this->assertEquals('USD', $currencyValue->currency->code);
  346. $reportModelTestItem->currencyValue = $currencyValue;
  347. $displayAttribute12 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  348. Report::TYPE_ROWS_AND_COLUMNS);
  349. $displayAttribute12->setModelAliasUsingTableAliasName('relatedModel');
  350. $displayAttribute12->attributeIndexOrDerivedType = 'hasMany2___currencyValue';
  351. $report->addDisplayAttribute($displayAttribute12);
  352. //for primaryAddress attribute
  353. $reportModelTestItem->primaryAddress->street1 = 'someString';
  354. $displayAttribute13 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  355. Report::TYPE_ROWS_AND_COLUMNS);
  356. $displayAttribute13->setModelAliasUsingTableAliasName('relatedModel');
  357. $displayAttribute13->attributeIndexOrDerivedType = 'hasMany2___primaryAddress___street1';
  358. $report->addDisplayAttribute($displayAttribute13);
  359. //for primaryEmail attribute
  360. $reportModelTestItem->primaryEmail->emailAddress = "test@someString.com";
  361. $displayAttribute14 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  362. Report::TYPE_ROWS_AND_COLUMNS);
  363. $displayAttribute14->setModelAliasUsingTableAliasName('relatedModel');
  364. $displayAttribute14->attributeIndexOrDerivedType = 'hasMany2___primaryEmail___emailAddress';
  365. $report->addDisplayAttribute($displayAttribute14);
  366. //for multiDropDown attribute
  367. $customFieldValue = new CustomFieldValue();
  368. $customFieldValue->value = 'Multi 1';
  369. $reportModelTestItem->multiDropDown->values->add($customFieldValue);
  370. $customFieldValue = new CustomFieldValue();
  371. $customFieldValue->value = 'Multi 2';
  372. $reportModelTestItem->multiDropDown->values->add($customFieldValue);
  373. $displayAttribute15 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  374. Report::TYPE_ROWS_AND_COLUMNS);
  375. $displayAttribute15->setModelAliasUsingTableAliasName('relatedModel');
  376. $displayAttribute15->attributeIndexOrDerivedType = 'hasMany2___multiDropDown';
  377. $report->addDisplayAttribute($displayAttribute15);
  378. //for tagCloud attribute
  379. $customFieldValue = new CustomFieldValue();
  380. $customFieldValue->value = 'Cloud 2';
  381. $reportModelTestItem->tagCloud->values->add($customFieldValue);
  382. $customFieldValue = new CustomFieldValue();
  383. $customFieldValue->value = 'Cloud 3';
  384. $reportModelTestItem->tagCloud->values->add($customFieldValue);
  385. $displayAttribute16 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  386. Report::TYPE_ROWS_AND_COLUMNS);
  387. $displayAttribute16->setModelAliasUsingTableAliasName('relatedModel');
  388. $displayAttribute16->attributeIndexOrDerivedType = 'hasMany2___tagCloud';
  389. $report->addDisplayAttribute($displayAttribute16);
  390. //for radioDropDown attribute
  391. $reportModelTestItem->radioDropDown->value = $values[1];
  392. $displayAttribute17 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  393. Report::TYPE_ROWS_AND_COLUMNS);
  394. $displayAttribute17->setModelAliasUsingTableAliasName('relatedModel');
  395. $displayAttribute17->attributeIndexOrDerivedType = 'hasMany2___radioDropDown';
  396. $report->addDisplayAttribute($displayAttribute17);
  397. //for likeContactState
  398. $reportModelTestItem7 = new ReportModelTestItem7;
  399. $reportModelTestItem7->name = 'someName';
  400. $reportModelTestItem->likeContactState = $reportModelTestItem7;
  401. $displayAttribute18 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  402. Report::TYPE_ROWS_AND_COLUMNS);
  403. $displayAttribute18->setModelAliasUsingTableAliasName('relatedModel');
  404. $displayAttribute18->attributeIndexOrDerivedType = 'hasMany2___likeContactState';
  405. $report->addDisplayAttribute($displayAttribute18);
  406. //for dynamic user attribute
  407. $reportModelTestItem->owner = Yii::app()->user->userModel;
  408. $displayAttribute19 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  409. Report::TYPE_ROWS_AND_COLUMNS);
  410. $displayAttribute19->setModelAliasUsingTableAliasName('relatedModel');
  411. $displayAttribute19->attributeIndexOrDerivedType = 'hasMany2___owner__User';
  412. $report->addDisplayAttribute($displayAttribute19);
  413. //for dynamic user fullName attribute
  414. $reportModelTestItem->owner = Yii::app()->user->userModel;
  415. $displayAttribute20 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2',
  416. Report::TYPE_ROWS_AND_COLUMNS);
  417. $displayAttribute20->setModelAliasUsingTableAliasName('relatedModel');
  418. $displayAttribute20->attributeIndexOrDerivedType = 'hasMany2___owner___FullName';
  419. $report->addDisplayAttribute($displayAttribute20);
  420. $reportModelTestItem2 = new ReportModelTestItem2();
  421. $reportModelTestItem2->owner = Yii::app()->user->userModel;
  422. $reportModelTestItem2->hasMany2->add($reportModelTestItem);
  423. $this->assertTrue($reportModelTestItem2->save());
  424. $dataProvider = new RowsAndColumnsReportDataProvider($report);
  425. $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
  426. $compareHeaderData = array('Name',
  427. 'Reports Tests >> Boolean',
  428. 'Reports Tests >> Date',
  429. 'Reports Tests >> Date Time',
  430. 'Reports Tests >> Float',
  431. 'Reports Tests >> Integer',
  432. 'Reports Tests >> Phone',
  433. 'Reports Tests >> String',
  434. 'Reports Tests >> Text Area',
  435. 'Reports Tests >> Url',
  436. 'Reports Tests >> Drop Down',
  437. 'Reports Tests >> Currency Value',
  438. 'Reports Tests >> Currency Value Currency',
  439. 'Reports Tests >> Primary Address >> Street 1',
  440. 'Reports Tests >> Primary Email >> Email Address',
  441. 'Reports Tests >> Multi Drop Down',
  442. 'Reports Tests >> Tag Cloud',
  443. 'Reports Tests >> Radio Drop Down',
  444. 'Reports Tests >> A name for a state',
  445. 'Reports Tests >> Owner',
  446. 'Reports Tests >> User >> Full Name');
  447. $compareRowData = array(array('xFirst xLast', 1, '2013-02-12', '2013-02-12 10:15:00',
  448. 10.5, 10, '7842151012', 'xString', 'xtextAreatest',
  449. 'http://www.test.com', 'Test2', '100.00', 'USD', 'someString', 'test@someString.com',
  450. 'Multi 1,Multi 2', 'Cloud 2,Cloud 3', 'Test2', 'someName', 'Clark Kent', 'Clark Kent')); // Not Coding Standard
  451. $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
  452. $this->assertEquals($compareRowData, $adapter->getData());
  453. //for MANY-MANY Relationship
  454. $report = new Report();
  455. $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
  456. $report->setModuleClassName('ReportsTestModule');
  457. $report->setFiltersStructure('');
  458. //for name attribute
  459. $reportModelTestItem3 = new ReportModelTestItem3();
  460. $reportModelTestItem3->name = 'xFirst';
  461. $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  462. Report::TYPE_ROWS_AND_COLUMNS);
  463. $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel1');
  464. $displayAttribute1->attributeIndexOrDerivedType = 'hasOne___hasMany3___name';
  465. $report->addDisplayAttribute($displayAttribute1);
  466. //for somethingOn3 attribute
  467. $reportModelTestItem3->somethingOn3 = 'somethingOn3';
  468. $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  469. Report::TYPE_ROWS_AND_COLUMNS);
  470. $displayAttribute2->setModelAliasUsingTableAliasName('relatedModel1');
  471. $displayAttribute2->attributeIndexOrDerivedType = 'hasOne___hasMany3___somethingOn3';
  472. $report->addDisplayAttribute($displayAttribute2);
  473. $reportModelTestItem3->owner = Yii::app()->user->userModel;
  474. $reportModelTestItem3->hasMany2->add($reportModelTestItem2);
  475. $this->assertTrue($reportModelTestItem3->save());
  476. $dataProvider = new RowsAndColumnsReportDataProvider($report);
  477. $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
  478. $compareHeaderData = array('ReportModelTestItem2 >> ReportModelTestItem3s >> Name',
  479. 'ReportModelTestItem2 >> ReportModelTestItem3s >> Something On 3');
  480. $compareRowData = array(array('xFirst', 'somethingOn3'));
  481. $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
  482. $this->assertEquals($compareRowData, $adapter->getData());
  483. $reportModelTestItem->delete();
  484. $reportModelTestItem2->delete();
  485. $reportModelTestItem3->delete();
  486. }
  487. public function testViaSelectAndViaModelTogether()
  488. {
  489. $reportModelTestItem = new ReportModelTestItem();
  490. $reportModelTestItem->string = 'string';
  491. $reportModelTestItem->lastName = 'lastName';
  492. $reportModelTestItem->integer = 9000;
  493. $reportModelTestItem->boolean = true;
  494. $this->assertTrue($reportModelTestItem->save());
  495. $report = new Report();
  496. $report->setType(Report::TYPE_SUMMATION);
  497. $report->setModuleClassName('ReportsTestModule');
  498. $report->setFiltersStructure('');
  499. //viaSelect attribute
  500. $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  501. Report::TYPE_SUMMATION);
  502. $displayAttribute1->attributeIndexOrDerivedType = 'integer__Minimum';
  503. $displayAttribute1->madeViaSelectInsteadOfViaModel = true;
  504. $this->assertTrue($displayAttribute1->columnAliasName == 'col0');
  505. $report->addDisplayAttribute($displayAttribute1);
  506. //viaModel attribute
  507. $reportModelTestItem->boolean = true;
  508. $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem',
  509. Report::TYPE_SUMMATION);
  510. $displayAttribute2->setModelAliasUsingTableAliasName('model1');
  511. $displayAttribute2->attributeIndexOrDerivedType = 'boolean';
  512. $report->addDisplayAttribute($displayAttribute2);
  513. $dataProvider = new SummationReportDataProvider($report);
  514. $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
  515. $compareHeaderData = array('Integer -(Min)', 'Boolean');
  516. $compareRowData = array(array(9000, true),
  517. array('Total'));
  518. $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
  519. $this->assertEquals($compareRowData, $adapter->getData());
  520. $reportModelTestItem->delete();
  521. }
  522. }
  523. ?>