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

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

https://bitbucket.org/pauk/zurmo_working
PHP | 1388 lines | 1158 code | 50 blank | 180 comment | 0 complexity | fa3f2ef86bacc1209cb10b66dcd050cf MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0, BSD-3-Clause, LGPL-3.0, GPL-2.0

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

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