PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/app/protected/modules/workflows/tests/unit/ModelRelationsAndAttributesToWorkflowAdapterTest.php

https://bitbucket.org/zurmo/zurmo/
PHP | 1424 lines | 1187 code | 52 blank | 185 comment | 0 complexity | 1906cef482b185f6ca476c550f87770d MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-2-Clause

Large files files are truncated, but you can click here to view the full file

  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. class ModelRelationsAndAttributesToWorkflowAdapterTest extends WorkflowBaseTest
  37. {
  38. public static function setUpBeforeClass()
  39. {
  40. parent::setUpBeforeClass();
  41. $attributeName = 'calculated';
  42. $attributeForm = new CalculatedNumberAttributeForm();
  43. $attributeForm->attributeName = $attributeName;
  44. $attributeForm->attributeLabels = array('en' => 'Test Calculated');
  45. $attributeForm->formula = 'integer + float';
  46. $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
  47. $adapter = new $modelAttributesAdapterClassName(new WorkflowModelTestItem());
  48. $adapter->setAttributeMetadataFromForm($attributeForm);
  49. }
  50. public function testGetAllRelations()
  51. {
  52. $model = new WorkflowModelTestItem();
  53. $rules = new WorkflowsTestWorkflowRules(); //WorkflowsTestModule rules
  54. $workflow = new Workflow();
  55. $workflow->setType(Workflow::TYPE_ON_SAVE);
  56. $workflow->setModuleClassName('WorkflowsTestModule');
  57. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  58. $relations = $adapter->getAllRelationsData();
  59. $this->assertEquals(22, count($relations));
  60. }
  61. /**
  62. * @depends testGetAllRelations
  63. * Make sure HAS_MANY_BELONGS_TO relations show up
  64. */
  65. public function testGetHasManyBelongsToRelations()
  66. {
  67. $model = new WorkflowModelTestItem9();
  68. $rules = new WorkflowsTestWorkflowRules(); //WorkflowsTestModule rules
  69. $workflow = new Workflow();
  70. $workflow->setType(Workflow::TYPE_ON_SAVE);
  71. $workflow->setModuleClassName('WorkflowsTestModule');
  72. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules,
  73. $workflow->getType());
  74. $relations = $adapter->getSelectableRelationsData();
  75. $this->assertEquals(11, count($relations));
  76. $compareData = array('label' => 'Workflow Model Test Item 9');
  77. $this->assertEquals($compareData, $relations['workflowModelTestItem9']);
  78. $compareData = array('label' => 'Workflow Model Test Item 9s');
  79. $this->assertEquals($compareData, $relations['workflowModelTestItem9s']);
  80. }
  81. /**
  82. * @depends testGetHasManyBelongsToRelations
  83. */
  84. public function testGetAllWorkflowableRelations()
  85. {
  86. //WorkflowModelTestItem has hasOne, hasMany, and hasOneAlso. In addition it has a
  87. //derivedRelationsViaCastedUpModel to WorkflowModelTestItem5.
  88. //Excludes any customField relations and relationsWorkflowedOnAsAttributes
  89. //Also excludes any non-workflowable relations
  90. //Get relations through adapter and confirm everything matches up as expected
  91. $model = new WorkflowModelTestItem();
  92. $rules = new WorkflowsTestWorkflowRules();
  93. $workflow = new Workflow();
  94. $workflow->setType(Workflow::TYPE_ON_SAVE);
  95. $workflow->setModuleClassName('WorkflowsTestModule');
  96. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  97. $relations = $adapter->getSelectableRelationsData();
  98. $this->assertEquals(13, count($relations));
  99. $compareData = array('label' => 'Has One');
  100. $this->assertEquals($compareData, $relations['hasOne']);
  101. $compareData = array('label' => 'Has One Again');
  102. $this->assertEquals($compareData, $relations['hasOneAgain']);
  103. $compareData = array('label' => 'Has Many');
  104. $this->assertEquals($compareData, $relations['hasMany']);
  105. $compareData = array('label' => 'Has One Also');
  106. $this->assertEquals($compareData, $relations['hasOneAlso']);
  107. $compareData = array('label' => 'Model 5 Via Item');
  108. $this->assertEquals($compareData, $relations['model5ViaItem']);
  109. $compareData = array('label' => 'Primary Email');
  110. $this->assertEquals($compareData, $relations['primaryEmail']);
  111. $compareData = array('label' => 'Primary Address');
  112. $this->assertEquals($compareData, $relations['primaryAddress']);
  113. $compareData = array('label' => 'Secondary Email');
  114. $this->assertEquals($compareData, $relations['secondaryEmail']);
  115. $compareData = array('label' => 'Owner');
  116. $this->assertEquals($compareData, $relations['owner']);
  117. $compareData = array('label' => 'Created By User');
  118. $this->assertEquals($compareData, $relations['createdByUser']);
  119. $compareData = array('label' => 'Modified By User');
  120. $this->assertEquals($compareData, $relations['modifiedByUser']);
  121. }
  122. /**
  123. * When retrieving available relations, make sure it does not give a relation based on what model it is coming
  124. * from. If you are in a Contact and the parent relation is account, then Contact should not return the account
  125. * as an available relation.
  126. * @depends testGetAllWorkflowableRelations
  127. */
  128. public function testGetAvailableRelationsDoesNotCauseFeedbackLoop()
  129. {
  130. $model = new WorkflowModelTestItem2();
  131. $rules = new WorkflowsTestWorkflowRules();
  132. $workflow = new Workflow();
  133. $workflow->setType(Workflow::TYPE_ON_SAVE);
  134. $workflow->setModuleClassName('WorkflowsTestModule');
  135. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  136. $relations = $adapter->getSelectableRelationsData();
  137. $this->assertEquals(5, count($relations));
  138. $compareData = array('label' => 'Has Many 2');
  139. $this->assertEquals($compareData, $relations['hasMany2']);
  140. $compareData = array('label' => 'Has Many 3');
  141. $this->assertEquals($compareData, $relations['hasMany3']);
  142. $compareData = array('label' => 'Owner');
  143. $this->assertEquals($compareData, $relations['owner']);
  144. $compareData = array('label' => 'Created By User');
  145. $this->assertEquals($compareData, $relations['createdByUser']);
  146. $compareData = array('label' => 'Modified By User');
  147. $this->assertEquals($compareData, $relations['modifiedByUser']);
  148. $precedingModel = new WorkflowModelTestItem();
  149. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  150. $relations = $adapter->getSelectableRelationsData($precedingModel, 'hasOne');
  151. $this->assertEquals(4, count($relations));
  152. $compareData = array('label' => 'Has Many 3');
  153. $this->assertEquals($compareData, $relations['hasMany3']);
  154. $compareData = array('label' => 'Owner');
  155. $this->assertEquals($compareData, $relations['owner']);
  156. $compareData = array('label' => 'Created By User');
  157. $this->assertEquals($compareData, $relations['createdByUser']);
  158. $compareData = array('label' => 'Modified By User');
  159. $this->assertEquals($compareData, $relations['modifiedByUser']);
  160. }
  161. /**
  162. * @depends testGetAvailableRelationsDoesNotCauseFeedbackLoop
  163. */
  164. public function testGetUsableAttributes()
  165. {
  166. $model = new WorkflowModelTestItem();
  167. $rules = new WorkflowsTestWorkflowRules();
  168. $workflow = new Workflow();
  169. $workflow->setType(Workflow::TYPE_ON_SAVE);
  170. $workflow->setModuleClassName('WorkflowsTestModule');
  171. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  172. $attributes = $adapter->getAttributesIncludingDerivedAttributesData();
  173. $this->assertEquals(37, count($attributes));
  174. $compareData = array('label' => 'Id');
  175. $this->assertEquals($compareData, $attributes['id']);
  176. $compareData = array('label' => 'Created Date Time');
  177. $this->assertEquals($compareData, $attributes['createdDateTime']);
  178. $compareData = array('label' => 'Modified Date Time');
  179. $this->assertEquals($compareData, $attributes['modifiedDateTime']);
  180. $compareData = array('label' => 'First Name');
  181. $this->assertEquals($compareData, $attributes['firstName']);
  182. $compareData = array('label' => 'Last Name');
  183. $this->assertEquals($compareData, $attributes['lastName']);
  184. $compareData = array('label' => 'Boolean');
  185. $this->assertEquals($compareData, $attributes['boolean']);
  186. $compareData = array('label' => 'Date');
  187. $this->assertEquals($compareData, $attributes['date']);
  188. $compareData = array('label' => 'Date Time');
  189. $this->assertEquals($compareData, $attributes['dateTime']);
  190. $compareData = array('label' => 'Float');
  191. $this->assertEquals($compareData, $attributes['float']);
  192. $compareData = array('label' => 'Integer');
  193. $this->assertEquals($compareData, $attributes['integer']);
  194. $compareData = array('label' => 'Phone');
  195. $this->assertEquals($compareData, $attributes['phone']);
  196. $compareData = array('label' => 'String');
  197. $this->assertEquals($compareData, $attributes['string']);
  198. $compareData = array('label' => 'Text Area');
  199. $this->assertEquals($compareData, $attributes['textArea']);
  200. $compareData = array('label' => 'Url');
  201. $this->assertEquals($compareData, $attributes['url']);
  202. $compareData = array('label' => 'Drop Down');
  203. $this->assertEquals($compareData, $attributes['dropDown']);
  204. $compareData = array('label' => 'Drop Down 2');
  205. $this->assertEquals($compareData, $attributes['dropDown2']);
  206. $compareData = array('label' => 'Radio Drop Down');
  207. $this->assertEquals($compareData, $attributes['radioDropDown']);
  208. $compareData = array('label' => 'Multi Drop Down');
  209. $this->assertEquals($compareData, $attributes['multiDropDown']);
  210. $compareData = array('label' => 'Tag Cloud');
  211. $this->assertEquals($compareData, $attributes['tagCloud']);
  212. $compareData = array('label' => 'Used As Attribute');
  213. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  214. //Currency is treated as a relation workflowed as an attribute just like drop downs
  215. $compareData = array('label' => 'Currency Value');
  216. $this->assertEquals($compareData, $attributes['currencyValue']);
  217. //likeContactState is a relation workflowed as attribute.
  218. //Makes sure the label is using the proper label translation via attributeLabels
  219. $compareData = array('label' => 'A name for a state');
  220. $this->assertEquals($compareData, $attributes['likeContactState']);
  221. //Includes derived attributes as well
  222. $compareData = array('label' => 'Test Calculated', 'derivedAttributeType' => 'CalculatedNumber');
  223. $this->assertEquals($compareData, $attributes['calculated']);
  224. $compareData = array('label' => 'Full Name', 'derivedAttributeType' => 'FullName');
  225. $this->assertEquals($compareData, $attributes['FullName']);
  226. //Add Dynamically Derived Attributes
  227. $compareData = array('label' => 'Owner');
  228. $this->assertEquals($compareData, $attributes['owner__User']);
  229. $compareData = array('label' => 'Created By User');
  230. $this->assertEquals($compareData, $attributes['createdByUser__User']);
  231. $compareData = array('label' => 'Modified By User');
  232. $this->assertEquals($compareData, $attributes['modifiedByUser__User']);
  233. $compareData = array('label' => 'Status');
  234. $this->assertEquals($compareData, $attributes['status']);
  235. }
  236. /**
  237. * @depends testGetUsableAttributes
  238. * Testing where a model relates to another model via something like Item. An example is notes which connects
  239. * to accounts via activityItems MANY_MANY through Items. On Notes we need to be able to show these relations
  240. * as selectable in workflowing.
  241. *
  242. * In this example WorkflowModelTestItem5 connects to WorkflowModelTestItem and WorkflowModelTestItem2
  243. * via MANY_MANY through Item using the workflowItems relation
  244. * Known as viaRelations: model5ViaItem on WorkflowModelItem and model5ViaItem on WorkflowModelItem2
  245. */
  246. public function testGetInferredRelationsData()
  247. {
  248. $model = new WorkflowModelTestItem5();
  249. $rules = new WorkflowsTestWorkflowRules();
  250. $workflow = new Workflow();
  251. $workflow->setType(Workflow::TYPE_ON_SAVE);
  252. $workflow->setModuleClassName('WorkflowsTestModule');
  253. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  254. $relations = $adapter->getInferredRelationsData();
  255. $this->assertEquals(2, count($relations));
  256. $compareData = array('label' => 'Workflows Tests');
  257. $this->assertEquals($compareData, $relations['WorkflowModelTestItem__workflowItems__Inferred']);
  258. $compareData = array('label' => 'WorkflowModelTestItem2s');
  259. $this->assertEquals($compareData, $relations['WorkflowModelTestItem2__workflowItems__Inferred']);
  260. //Getting all selectable relations. Should yield all 7 relations
  261. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  262. $relations = $adapter->getSelectableRelationsData();
  263. $this->assertEquals(7, count($relations));
  264. $compareData = array('label' => 'Workflows Tests');
  265. $this->assertEquals($compareData, $relations['WorkflowModelTestItem__workflowItems__Inferred']);
  266. $compareData = array('label' => 'WorkflowModelTestItem2s');
  267. $this->assertEquals($compareData, $relations['WorkflowModelTestItem2__workflowItems__Inferred']);
  268. $compareData = array('label' => 'Workflow Items');
  269. $this->assertEquals($compareData, $relations['workflowItems']);
  270. $compareData = array('label' => 'Has One');
  271. $this->assertEquals($compareData, $relations['hasOne']);
  272. //Add Dynamically Derived Attributes
  273. $compareData = array('label' => 'Owner');
  274. $this->assertEquals($compareData, $relations['owner']);
  275. $compareData = array('label' => 'Created By User');
  276. $this->assertEquals($compareData, $relations['createdByUser']);
  277. $compareData = array('label' => 'Modified By User');
  278. $this->assertEquals($compareData, $relations['modifiedByUser']);
  279. }
  280. /**
  281. * @depends testGetInferredRelationsData
  282. */
  283. public function testGetInferredRelationsDataWithPrecedingModel()
  284. {
  285. $model = new WorkflowModelTestItem5();
  286. $rules = new WorkflowsTestWorkflowRules();
  287. $workflow = new Workflow();
  288. $workflow->setType(Workflow::TYPE_ON_SAVE);
  289. $precedingModel = new WorkflowModelTestItem7();
  290. $workflow->setModuleClassName('WorkflowsTestModule');
  291. //Test calling on model 5 with a preceding model that is NOT part of workflowItems
  292. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  293. $relations = $adapter->getSelectableRelationsData($precedingModel, 'model5');
  294. $this->assertEquals(7, count($relations));
  295. $compareData = array('label' => 'Workflows Tests');
  296. $this->assertEquals($compareData, $relations['WorkflowModelTestItem__workflowItems__Inferred']);
  297. $compareData = array('label' => 'WorkflowModelTestItem2s');
  298. $this->assertEquals($compareData, $relations['WorkflowModelTestItem2__workflowItems__Inferred']);
  299. $compareData = array('label' => 'Workflow Items');
  300. $this->assertEquals($compareData, $relations['workflowItems']);
  301. $compareData = array('label' => 'Has One');
  302. $this->assertEquals($compareData, $relations['hasOne']);
  303. //Add Dynamically Derived Attributes
  304. $compareData = array('label' => 'Owner');
  305. $this->assertEquals($compareData, $relations['owner']);
  306. $compareData = array('label' => 'Created By User');
  307. $this->assertEquals($compareData, $relations['createdByUser']);
  308. $compareData = array('label' => 'Modified By User');
  309. $this->assertEquals($compareData, $relations['modifiedByUser']);
  310. //Test calling on model 5 with a preceding model that is one of the workflowItem models
  311. $precedingModel = new WorkflowModelTestItem();
  312. $relations = $adapter->getSelectableRelationsData($precedingModel, 'model5ViaItem');
  313. $this->assertEquals(6, count($relations));
  314. $compareData = array('label' => 'WorkflowModelTestItem2s');
  315. $this->assertEquals($compareData, $relations['WorkflowModelTestItem2__workflowItems__Inferred']);
  316. $compareData = array('label' => 'Workflow Items');
  317. $this->assertEquals($compareData, $relations['workflowItems']);
  318. $compareData = array('label' => 'Has One');
  319. $this->assertEquals($compareData, $relations['hasOne']);
  320. //Add Dynamically Derived Attributes
  321. $compareData = array('label' => 'Owner');
  322. $this->assertEquals($compareData, $relations['owner']);
  323. $compareData = array('label' => 'Created By User');
  324. $this->assertEquals($compareData, $relations['createdByUser']);
  325. $compareData = array('label' => 'Modified By User');
  326. $this->assertEquals($compareData, $relations['modifiedByUser']);
  327. }
  328. /**
  329. * @depends testGetInferredRelationsDataWithPrecedingModel
  330. */
  331. public function testGetDerivedRelationsViaCastedUpModelDataWithPrecedingModel()
  332. {
  333. //test with preceding model that is not the via relation
  334. $model = new WorkflowModelTestItem();
  335. $precedingModel = new WorkflowModelTestItem5();
  336. $rules = new WorkflowsTestWorkflowRules();
  337. $workflow = new Workflow();
  338. $workflow->setType(Workflow::TYPE_ON_SAVE);
  339. $workflow->setModuleClassName('WorkflowsTestModule');
  340. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  341. $relations = $adapter->getSelectableRelationsData($precedingModel, 'cannotTrigger2');
  342. $this->assertEquals(13, count($relations));
  343. $compareData = array('label' => 'Has One');
  344. $this->assertEquals($compareData, $relations['hasOne']);
  345. $compareData = array('label' => 'Has One Again');
  346. $this->assertEquals($compareData, $relations['hasOneAgain']);
  347. $compareData = array('label' => 'Has Many');
  348. $this->assertEquals($compareData, $relations['hasMany']);
  349. $compareData = array('label' => 'Has One Also');
  350. $this->assertEquals($compareData, $relations['hasOneAlso']);
  351. $compareData = array('label' => 'Model 5 Via Item');
  352. $this->assertEquals($compareData, $relations['model5ViaItem']);
  353. $compareData = array('label' => 'Primary Email');
  354. $this->assertEquals($compareData, $relations['primaryEmail']);
  355. $compareData = array('label' => 'Primary Address');
  356. $this->assertEquals($compareData, $relations['primaryAddress']);
  357. $compareData = array('label' => 'Secondary Email');
  358. $this->assertEquals($compareData, $relations['secondaryEmail']);
  359. $compareData = array('label' => 'Owner');
  360. $this->assertEquals($compareData, $relations['owner']);
  361. $compareData = array('label' => 'Created By User');
  362. $this->assertEquals($compareData, $relations['createdByUser']);
  363. $compareData = array('label' => 'Modified By User');
  364. $this->assertEquals($compareData, $relations['modifiedByUser']);
  365. //test with preceding model that is the via relation
  366. $rules = new WorkflowsTestWorkflowRules();
  367. $workflow = new Workflow();
  368. $workflow->setType(Workflow::TYPE_ON_SAVE);
  369. $workflow->setModuleClassName('WorkflowsTestModule');
  370. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  371. $relations = $adapter->getSelectableRelationsData($precedingModel, 'workflowItems');
  372. $this->assertEquals(12, count($relations));
  373. $compareData = array('label' => 'Has One');
  374. $this->assertEquals($compareData, $relations['hasOne']);
  375. $compareData = array('label' => 'Has One Again');
  376. $this->assertEquals($compareData, $relations['hasOneAgain']);
  377. $compareData = array('label' => 'Has Many');
  378. $this->assertEquals($compareData, $relations['hasMany']);
  379. $compareData = array('label' => 'Has One Also');
  380. $this->assertEquals($compareData, $relations['hasOneAlso']);
  381. $compareData = array('label' => 'Primary Email');
  382. $this->assertEquals($compareData, $relations['primaryEmail']);
  383. $compareData = array('label' => 'Primary Address');
  384. $this->assertEquals($compareData, $relations['primaryAddress']);
  385. $compareData = array('label' => 'Secondary Email');
  386. $this->assertEquals($compareData, $relations['secondaryEmail']);
  387. $compareData = array('label' => 'Owner');
  388. $this->assertEquals($compareData, $relations['owner']);
  389. $compareData = array('label' => 'Created By User');
  390. $this->assertEquals($compareData, $relations['createdByUser']);
  391. $compareData = array('label' => 'Modified By User');
  392. $this->assertEquals($compareData, $relations['modifiedByUser']);
  393. }
  394. /**
  395. * @depends testGetDerivedRelationsViaCastedUpModelDataWithPrecedingModel
  396. */
  397. public function testGetAllAvailableOnSaveTriggersRelations()
  398. {
  399. $model = new WorkflowModelTestItem();
  400. $rules = new WorkflowsTestWorkflowRules();
  401. $workflow = new Workflow();
  402. $workflow->setType(Workflow::TYPE_ON_SAVE);
  403. $workflow->setModuleClassName('WorkflowsTestModule');
  404. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  405. $relations = $adapter->getSelectableRelationsData();
  406. $this->assertEquals(12, count($relations));
  407. $compareData = array('label' => 'Has One');
  408. $this->assertEquals($compareData, $relations['hasOne']);
  409. $compareData = array('label' => 'Has One Again');
  410. $this->assertEquals($compareData, $relations['hasOneAgain']);
  411. $compareData = array('label' => 'Has Many');
  412. $this->assertEquals($compareData, $relations['hasMany']);
  413. $compareData = array('label' => 'Has One Also');
  414. $this->assertEquals($compareData, $relations['hasOneAlso']);
  415. //$compareData = array('label' => 'Model 5 Via Item');
  416. //$this->assertEquals($compareData, $relations['model5ViaItem']);
  417. $compareData = array('label' => 'Primary Email');
  418. $this->assertEquals($compareData, $relations['primaryEmail']);
  419. $compareData = array('label' => 'Primary Address');
  420. $this->assertEquals($compareData, $relations['primaryAddress']);
  421. $compareData = array('label' => 'Secondary Email');
  422. $this->assertEquals($compareData, $relations['secondaryEmail']);
  423. $compareData = array('label' => 'Owner');
  424. $this->assertEquals($compareData, $relations['owner']);
  425. $compareData = array('label' => 'Created By User');
  426. $this->assertEquals($compareData, $relations['createdByUser']);
  427. $compareData = array('label' => 'Modified By User');
  428. $this->assertEquals($compareData, $relations['modifiedByUser']);
  429. }
  430. /**
  431. * @depends testGetAllAvailableOnSaveTriggersRelations
  432. */
  433. public function testGetAllAvailableOnSaveTriggersRelationsWithPreceding()
  434. {
  435. $model = new WorkflowModelTestItem();
  436. $rules = new WorkflowsTestWorkflowRules();
  437. $workflow = new Workflow();
  438. $workflow->setType(Workflow::TYPE_ON_SAVE);
  439. $workflow->setModuleClassName('WorkflowsTestModule');
  440. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  441. $relations = $adapter->getSelectableRelationsData(new WorkflowModelTestItem(), 'hasMany');
  442. $this->assertEquals(3, count($relations));
  443. $compareData = array('label' => 'Primary Email');
  444. $this->assertEquals($compareData, $relations['primaryEmail']);
  445. $compareData = array('label' => 'Primary Address');
  446. $this->assertEquals($compareData, $relations['primaryAddress']);
  447. $compareData = array('label' => 'Secondary Email');
  448. $this->assertEquals($compareData, $relations['secondaryEmail']);
  449. }
  450. /**
  451. * @depends testGetAllAvailableOnSaveTriggersRelationsWithPreceding
  452. */
  453. public function testGetAvailableAttributesForOnSaveTriggers()
  454. {
  455. $model = new WorkflowModelTestItem();
  456. $rules = new WorkflowsTestWorkflowRules();
  457. $workflow = new Workflow();
  458. $workflow->setType(Workflow::TYPE_ON_SAVE);
  459. $workflow->setModuleClassName('WorkflowsTestModule');
  460. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  461. $attributes = $adapter->getAttributesForTriggers();
  462. $this->assertEquals(34, count($attributes));
  463. $compareData = array('label' => 'Created Date Time');
  464. $this->assertEquals($compareData, $attributes['createdDateTime']);
  465. $compareData = array('label' => 'Modified Date Time');
  466. $this->assertEquals($compareData, $attributes['modifiedDateTime']);
  467. $compareData = array('label' => 'First Name');
  468. $this->assertEquals($compareData, $attributes['firstName']);
  469. $compareData = array('label' => 'Last Name');
  470. $this->assertEquals($compareData, $attributes['lastName']);
  471. $compareData = array('label' => 'Boolean');
  472. $this->assertEquals($compareData, $attributes['boolean']);
  473. $compareData = array('label' => 'Date');
  474. $this->assertEquals($compareData, $attributes['date']);
  475. $compareData = array('label' => 'Date Time');
  476. $this->assertEquals($compareData, $attributes['dateTime']);
  477. $compareData = array('label' => 'Float');
  478. $this->assertEquals($compareData, $attributes['float']);
  479. $compareData = array('label' => 'Integer');
  480. $this->assertEquals($compareData, $attributes['integer']);
  481. $compareData = array('label' => 'Phone');
  482. $this->assertEquals($compareData, $attributes['phone']);
  483. $compareData = array('label' => 'String');
  484. $this->assertEquals($compareData, $attributes['string']);
  485. $compareData = array('label' => 'Text Area');
  486. $this->assertEquals($compareData, $attributes['textArea']);
  487. $compareData = array('label' => 'Url');
  488. $this->assertEquals($compareData, $attributes['url']);
  489. $compareData = array('label' => 'Drop Down');
  490. $this->assertEquals($compareData, $attributes['dropDown']);
  491. $compareData = array('label' => 'Drop Down 2');
  492. $this->assertEquals($compareData, $attributes['dropDown2']);
  493. $compareData = array('label' => 'Radio Drop Down');
  494. $this->assertEquals($compareData, $attributes['radioDropDown']);
  495. $compareData = array('label' => 'Multi Drop Down');
  496. $this->assertEquals($compareData, $attributes['multiDropDown']);
  497. $compareData = array('label' => 'Tag Cloud');
  498. $this->assertEquals($compareData, $attributes['tagCloud']);
  499. $compareData = array('label' => 'Used As Attribute');
  500. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  501. //Currency is treated as a relation workflowed as an attribute just like drop downs
  502. $compareData = array('label' => 'Currency Value');
  503. $this->assertEquals($compareData, $attributes['currencyValue']);
  504. //likeContactState is a relation workflowed as attribute.
  505. //Makes sure the label is using the proper label translation via attributeLabels
  506. $compareData = array('label' => 'A name for a state');
  507. $this->assertEquals($compareData, $attributes['likeContactState']);
  508. //Add Dynamically Derived Attributes
  509. $compareData = array('label' => 'Owner');
  510. $this->assertEquals($compareData, $attributes['owner__User']);
  511. $compareData = array('label' => 'Created By User');
  512. $this->assertEquals($compareData, $attributes['createdByUser__User']);
  513. $compareData = array('label' => 'Modified By User');
  514. $this->assertEquals($compareData, $attributes['modifiedByUser__User']);
  515. $compareData = array('label' => 'Status');
  516. $this->assertEquals($compareData, $attributes['status']);
  517. }
  518. /**
  519. * @depends testGetAvailableAttributesForOnSaveTriggers
  520. */
  521. public function testGetAvailableAttributesForOnSaveCreateActionAttributes()
  522. {
  523. $model = new WorkflowModelTestItem();
  524. $rules = new WorkflowsTestWorkflowRules();
  525. $workflow = new Workflow();
  526. $workflow->setType(Workflow::TYPE_ON_SAVE);
  527. $workflow->setModuleClassName('WorkflowsTestModule');
  528. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  529. $attributes = $adapter->getRequiredAttributesForActions();
  530. $this->assertEquals(3, count($attributes));
  531. $compareData = array('label' => 'Last Name');
  532. $this->assertEquals($compareData, $attributes['lastName']);
  533. $compareData = array('label' => 'String');
  534. $this->assertEquals($compareData, $attributes['string']);
  535. $compareData = array('label' => 'Owner');
  536. $this->assertEquals($compareData, $attributes['owner__User']);
  537. $attributes = $adapter->getNonRequiredAttributesForActions();
  538. $this->assertEquals(39, count($attributes));
  539. $compareData = array('label' => 'First Name');
  540. $this->assertEquals($compareData, $attributes['firstName']);
  541. $compareData = array('label' => 'Boolean');
  542. $this->assertEquals($compareData, $attributes['boolean']);
  543. $compareData = array('label' => 'Date');
  544. $this->assertEquals($compareData, $attributes['date']);
  545. $compareData = array('label' => 'Date Time');
  546. $this->assertEquals($compareData, $attributes['dateTime']);
  547. $compareData = array('label' => 'Float');
  548. $this->assertEquals($compareData, $attributes['float']);
  549. $compareData = array('label' => 'Integer');
  550. $this->assertEquals($compareData, $attributes['integer']);
  551. $compareData = array('label' => 'Phone');
  552. $this->assertEquals($compareData, $attributes['phone']);
  553. $compareData = array('label' => 'Text Area');
  554. $this->assertEquals($compareData, $attributes['textArea']);
  555. $compareData = array('label' => 'Url');
  556. $this->assertEquals($compareData, $attributes['url']);
  557. $compareData = array('label' => 'Drop Down');
  558. $this->assertEquals($compareData, $attributes['dropDown']);
  559. $compareData = array('label' => 'Drop Down 2');
  560. $this->assertEquals($compareData, $attributes['dropDown2']);
  561. $compareData = array('label' => 'Radio Drop Down');
  562. $this->assertEquals($compareData, $attributes['radioDropDown']);
  563. $compareData = array('label' => 'Multi Drop Down');
  564. $this->assertEquals($compareData, $attributes['multiDropDown']);
  565. $compareData = array('label' => 'Tag Cloud');
  566. $this->assertEquals($compareData, $attributes['tagCloud']);
  567. $compareData = array('label' => 'Used As Attribute');
  568. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  569. $compareData = array('label' => 'Status');
  570. $this->assertEquals($compareData, $attributes['status']);
  571. //Currency is treated as a relation workflowed as an attribute just like drop downs
  572. $compareData = array('label' => 'Currency Value');
  573. $this->assertEquals($compareData, $attributes['currencyValue']);
  574. //likeContactState is a relation workflowed as attribute.
  575. //Makes sure the label is using the proper label translation via attributeLabels
  576. $compareData = array('label' => 'A name for a state');
  577. $this->assertEquals($compareData, $attributes['likeContactState']);
  578. //Add in owned primaryAddress, and primaryEmail, and secondaryEmail attributes
  579. $compareData = array('label' => 'Primary Address >> City');
  580. $this->assertEquals($compareData, $attributes['primaryAddress___city']);
  581. $compareData = array('label' => 'Primary Address >> Country');
  582. $this->assertEquals($compareData, $attributes['primaryAddress___country']);
  583. $compareData = array('label' => 'Primary Address >> Postal Code');
  584. $this->assertEquals($compareData, $attributes['primaryAddress___postalCode']);
  585. $compareData = array('label' => 'Primary Address >> State');
  586. $this->assertEquals($compareData, $attributes['primaryAddress___state']);
  587. $compareData = array('label' => 'Primary Address >> Street 1');
  588. $this->assertEquals($compareData, $attributes['primaryAddress___street1']);
  589. $compareData = array('label' => 'Primary Address >> Street 2');
  590. $this->assertEquals($compareData, $attributes['primaryAddress___street2']);
  591. //Email fields
  592. $compareData = array('label' => 'Primary Email >> Email Address');
  593. $this->assertEquals($compareData, $attributes['primaryEmail___emailAddress']);
  594. $compareData = array('label' => 'Primary Email >> Opt Out');
  595. $this->assertEquals($compareData, $attributes['primaryEmail___optOut']);
  596. $compareData = array('label' => 'Primary Email >> Is Invalid');
  597. $this->assertEquals($compareData, $attributes['primaryEmail___isInvalid']);
  598. $compareData = array('label' => 'Secondary Email >> Email Address');
  599. $this->assertEquals($compareData, $attributes['secondaryEmail___emailAddress']);
  600. $compareData = array('label' => 'Secondary Email >> Opt Out');
  601. $this->assertEquals($compareData, $attributes['secondaryEmail___optOut']);
  602. $compareData = array('label' => 'Secondary Email >> Is Invalid');
  603. $this->assertEquals($compareData, $attributes['secondaryEmail___isInvalid']);
  604. }
  605. /**
  606. * @depends testGetAvailableAttributesForOnSaveCreateActionAttributes
  607. */
  608. public function testGetAvailableAttributesForOnSaveUpdateActionAttributes()
  609. {
  610. $model = new WorkflowModelTestItem();
  611. $rules = new WorkflowsTestWorkflowRules();
  612. $workflow = new Workflow();
  613. $workflow->setType(Workflow::TYPE_ON_SAVE);
  614. $workflow->setModuleClassName('WorkflowsTestModule');
  615. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  616. $attributes = $adapter->getAllAttributesForActions();
  617. $this->assertEquals(42, count($attributes));
  618. $compareData = array('label' => 'Last Name');
  619. $this->assertEquals($compareData, $attributes['lastName']);
  620. $compareData = array('label' => 'String');
  621. $this->assertEquals($compareData, $attributes['string']);
  622. $compareData = array('label' => 'Owner');
  623. $this->assertEquals($compareData, $attributes['owner__User']);
  624. $compareData = array('label' => 'First Name');
  625. $this->assertEquals($compareData, $attributes['firstName']);
  626. $compareData = array('label' => 'Boolean');
  627. $this->assertEquals($compareData, $attributes['boolean']);
  628. $compareData = array('label' => 'Date');
  629. $this->assertEquals($compareData, $attributes['date']);
  630. $compareData = array('label' => 'Date Time');
  631. $this->assertEquals($compareData, $attributes['dateTime']);
  632. $compareData = array('label' => 'Float');
  633. $this->assertEquals($compareData, $attributes['float']);
  634. $compareData = array('label' => 'Integer');
  635. $this->assertEquals($compareData, $attributes['integer']);
  636. $compareData = array('label' => 'Phone');
  637. $this->assertEquals($compareData, $attributes['phone']);
  638. $compareData = array('label' => 'Text Area');
  639. $this->assertEquals($compareData, $attributes['textArea']);
  640. $compareData = array('label' => 'Url');
  641. $this->assertEquals($compareData, $attributes['url']);
  642. $compareData = array('label' => 'Drop Down');
  643. $this->assertEquals($compareData, $attributes['dropDown']);
  644. $compareData = array('label' => 'Drop Down 2');
  645. $this->assertEquals($compareData, $attributes['dropDown2']);
  646. $compareData = array('label' => 'Radio Drop Down');
  647. $this->assertEquals($compareData, $attributes['radioDropDown']);
  648. $compareData = array('label' => 'Multi Drop Down');
  649. $this->assertEquals($compareData, $attributes['multiDropDown']);
  650. $compareData = array('label' => 'Tag Cloud');
  651. $this->assertEquals($compareData, $attributes['tagCloud']);
  652. $compareData = array('label' => 'Used As Attribute');
  653. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  654. $compareData = array('label' => 'Status');
  655. $this->assertEquals($compareData, $attributes['status']);
  656. //Currency is treated as a relation workflowed as an attribute just like drop downs
  657. $compareData = array('label' => 'Currency Value');
  658. $this->assertEquals($compareData, $attributes['currencyValue']);
  659. //likeContactState is a relation workflowed as attribute.
  660. //Makes sure the label is using the proper label translation via attributeLabels
  661. $compareData = array('label' => 'A name for a state');
  662. $this->assertEquals($compareData, $attributes['likeContactState']);
  663. //Add in owned primaryAddress, and primaryEmail, and secondaryEmail attributes
  664. $compareData = array('label' => 'Primary Address >> City');
  665. $this->assertEquals($compareData, $attributes['primaryAddress___city']);
  666. $compareData = array('label' => 'Primary Address >> Country');
  667. $this->assertEquals($compareData, $attributes['primaryAddress___country']);
  668. $compareData = array('label' => 'Primary Address >> Postal Code');
  669. $this->assertEquals($compareData, $attributes['primaryAddress___postalCode']);
  670. $compareData = array('label' => 'Primary Address >> State');
  671. $this->assertEquals($compareData, $attributes['primaryAddress___state']);
  672. $compareData = array('label' => 'Primary Address >> Street 1');
  673. $this->assertEquals($compareData, $attributes['primaryAddress___street1']);
  674. $compareData = array('label' => 'Primary Address >> Street 2');
  675. $this->assertEquals($compareData, $attributes['primaryAddress___street2']);
  676. //Email fields
  677. $compareData = array('label' => 'Primary Email >> Email Address');
  678. $this->assertEquals($compareData, $attributes['primaryEmail___emailAddress']);
  679. $compareData = array('label' => 'Primary Email >> Opt Out');
  680. $this->assertEquals($compareData, $attributes['primaryEmail___optOut']);
  681. $compareData = array('label' => 'Primary Email >> Is Invalid');
  682. $this->assertEquals($compareData, $attributes['primaryEmail___isInvalid']);
  683. $compareData = array('label' => 'Secondary Email >> Email Address');
  684. $this->assertEquals($compareData, $attributes['secondaryEmail___emailAddress']);
  685. $compareData = array('label' => 'Secondary Email >> Opt Out');
  686. $this->assertEquals($compareData, $attributes['secondaryEmail___optOut']);
  687. $compareData = array('label' => 'Secondary Email >> Is Invalid');
  688. $this->assertEquals($compareData, $attributes['secondaryEmail___isInvalid']);
  689. }
  690. /**
  691. * @depends testGetAvailableAttributesForOnSaveUpdateActionAttributes
  692. */
  693. public function testGetAllAvailableOnSaveRelationsForActionTypeRelation()
  694. {
  695. $model = new WorkflowModelTestItem();
  696. $rules = new WorkflowsTestWorkflowRules();
  697. $workflow = new Workflow();
  698. $workflow->setType(Workflow::TYPE_ON_SAVE);
  699. $workflow->setModuleClassName('WorkflowsTestModule');
  700. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  701. $relations = $adapter->getSelectableRelationsDataForActionTypeRelation();
  702. $this->assertEquals(5, count($relations));
  703. $compareData = array('label' => 'Has One');
  704. $this->assertEquals($compareData, $relations['hasOne']);
  705. $compareData = array('label' => 'Has One Again');
  706. $this->assertEquals($compareData, $relations['hasOneAgain']);
  707. $compareData = array('label' => 'Has Many');
  708. $this->assertEquals($compareData, $relations['hasMany']);
  709. $compareData = array('label' => 'Has One Also');
  710. $this->assertEquals($compareData, $relations['hasOneAlso']);
  711. $compareData = array('label' => 'Model 5 Via Item');
  712. $this->assertEquals($compareData, $relations['model5ViaItem']);
  713. }
  714. /**
  715. * @depends testGetAllAvailableOnSaveRelationsForActionTypeRelation
  716. */
  717. public function testGetAllAvailableByTimeTriggersRelations()
  718. {
  719. $model = new WorkflowModelTestItem();
  720. $rules = new WorkflowsTestWorkflowRules();
  721. $workflow = new Workflow();
  722. $workflow->setType(Workflow::TYPE_BY_TIME);
  723. $workflow->setModuleClassName('WorkflowsTestModule');
  724. $adapter = new ModelRelationsAndAttributesToByTimeWorkflowAdapter($model, $rules, $workflow->getType());
  725. $relations = $adapter->getSelectableRelationsData();
  726. $this->assertEquals(12, count($relations));
  727. $compareData = array('label' => 'Has One');
  728. $this->assertEquals($compareData, $relations['hasOne']);
  729. $compareData = array('label' => 'Has One Again');
  730. $this->assertEquals($compareData, $relations['hasOneAgain']);
  731. $compareData = array('label' => 'Has Many');
  732. $this->assertEquals($compareData, $relations['hasMany']);
  733. $compareData = array('label' => 'Has One Also');
  734. $this->assertEquals($compareData, $relations['hasOneAlso']);
  735. //$compareData = array('label' => 'Model 5 Via Item');
  736. //$this->assertEquals($compareData, $relations['model5ViaItem']);
  737. $compareData = array('label' => 'Primary Email');
  738. $this->assertEquals($compareData, $relations['primaryEmail']);
  739. $compareData = array('label' => 'Primary Address');
  740. $this->assertEquals($compareData, $relations['primaryAddress']);
  741. $compareData = array('label' => 'Secondary Email');
  742. $this->assertEquals($compareData, $relations['secondaryEmail']);
  743. $compareData = array('label' => 'Owner');
  744. $this->assertEquals($compareData, $relations['owner']);
  745. $compareData = array('label' => 'Created By User');
  746. $this->assertEquals($compareData, $relations['createdByUser']);

Large files files are truncated, but you can click here to view the full file