PageRenderTime 34ms CodeModel.GetById 23ms RepoModel.GetById 1ms 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
  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']);
  747. $compareData = array('label' => 'Modified By User');
  748. $this->assertEquals($compareData, $relations['modifiedByUser']);
  749. }
  750. /**
  751. * @depends testGetAllAvailableByTimeTriggersRelations
  752. */
  753. public function testGetAllAvailableByTimeTriggersRelationsWithPreceding()
  754. {
  755. $model = new WorkflowModelTestItem();
  756. $rules = new WorkflowsTestWorkflowRules();
  757. $workflow = new Workflow();
  758. $workflow->setType(Workflow::TYPE_BY_TIME);
  759. $workflow->setModuleClassName('WorkflowsTestModule');
  760. $adapter = new ModelRelationsAndAttributesToByTimeWorkflowAdapter($model, $rules, $workflow->getType());
  761. $relations = $adapter->getSelectableRelationsData(new WorkflowModelTestItem(), 'hasMany');
  762. $this->assertEquals(3, count($relations));
  763. $compareData = array('label' => 'Primary Email');
  764. $this->assertEquals($compareData, $relations['primaryEmail']);
  765. $compareData = array('label' => 'Primary Address');
  766. $this->assertEquals($compareData, $relations['primaryAddress']);
  767. $compareData = array('label' => 'Secondary Email');
  768. $this->assertEquals($compareData, $relations['secondaryEmail']);
  769. }
  770. /**
  771. * @depends testGetAllAvailableByTimeTriggersRelationsWithPreceding
  772. */
  773. public function testGetAvailableAttributesForByTimeTriggers()
  774. {
  775. $model = new WorkflowModelTestItem();
  776. $rules = new WorkflowsTestWorkflowRules();
  777. $workflow = new Workflow();
  778. $workflow->setType(Workflow::TYPE_BY_TIME);
  779. $workflow->setModuleClassName('WorkflowsTestModule');
  780. $adapter = new ModelRelationsAndAttributesToByTimeWorkflowAdapter($model, $rules, $workflow->getType());
  781. $attributes = $adapter->getAttributesForTriggers();
  782. $this->assertEquals(34, count($attributes));
  783. $compareData = array('label' => 'Created Date Time');
  784. $this->assertEquals($compareData, $attributes['createdDateTime']);
  785. $compareData = array('label' => 'Modified Date Time');
  786. $this->assertEquals($compareData, $attributes['modifiedDateTime']);
  787. $compareData = array('label' => 'First Name');
  788. $this->assertEquals($compareData, $attributes['firstName']);
  789. $compareData = array('label' => 'Last Name');
  790. $this->assertEquals($compareData, $attributes['lastName']);
  791. $compareData = array('label' => 'Boolean');
  792. $this->assertEquals($compareData, $attributes['boolean']);
  793. $compareData = array('label' => 'Date');
  794. $this->assertEquals($compareData, $attributes['date']);
  795. $compareData = array('label' => 'Date Time');
  796. $this->assertEquals($compareData, $attributes['dateTime']);
  797. $compareData = array('label' => 'Float');
  798. $this->assertEquals($compareData, $attributes['float']);
  799. $compareData = array('label' => 'Integer');
  800. $this->assertEquals($compareData, $attributes['integer']);
  801. $compareData = array('label' => 'Phone');
  802. $this->assertEquals($compareData, $attributes['phone']);
  803. $compareData = array('label' => 'String');
  804. $this->assertEquals($compareData, $attributes['string']);
  805. $compareData = array('label' => 'Text Area');
  806. $this->assertEquals($compareData, $attributes['textArea']);
  807. $compareData = array('label' => 'Url');
  808. $this->assertEquals($compareData, $attributes['url']);
  809. $compareData = array('label' => 'Drop Down');
  810. $this->assertEquals($compareData, $attributes['dropDown']);
  811. $compareData = array('label' => 'Drop Down 2');
  812. $this->assertEquals($compareData, $attributes['dropDown2']);
  813. $compareData = array('label' => 'Radio Drop Down');
  814. $this->assertEquals($compareData, $attributes['radioDropDown']);
  815. $compareData = array('label' => 'Multi Drop Down');
  816. $this->assertEquals($compareData, $attributes['multiDropDown']);
  817. $compareData = array('label' => 'Tag Cloud');
  818. $this->assertEquals($compareData, $attributes['tagCloud']);
  819. $compareData = array('label' => 'Used As Attribute');
  820. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  821. //Currency is treated as a relation workflowed as an attribute just like drop downs
  822. $compareData = array('label' => 'Currency Value');
  823. $this->assertEquals($compareData, $attributes['currencyValue']);
  824. //likeContactState is a relation workflowed as attribute.
  825. //Makes sure the label is using the proper label translation via attributeLabels
  826. $compareData = array('label' => 'A name for a state');
  827. $this->assertEquals($compareData, $attributes['likeContactState']);
  828. //Add Dynamically Derived Attributes
  829. $compareData = array('label' => 'Owner');
  830. $this->assertEquals($compareData, $attributes['owner__User']);
  831. $compareData = array('label' => 'Created By User');
  832. $this->assertEquals($compareData, $attributes['createdByUser__User']);
  833. $compareData = array('label' => 'Modified By User');
  834. $this->assertEquals($compareData, $attributes['modifiedByUser__User']);
  835. $compareData = array('label' => 'Status');
  836. $this->assertEquals($compareData, $attributes['status']);
  837. }
  838. /**
  839. * @depends testGetAvailableAttributesForByTimeTriggers
  840. */
  841. public function testGetAvailableAttributesForByTimeTimeTrigger()
  842. {
  843. $model = new WorkflowModelTestItem();
  844. $rules = new WorkflowsTestWorkflowRules();
  845. $workflow = new Workflow();
  846. $workflow->setType(Workflow::TYPE_BY_TIME);
  847. $workflow->setModuleClassName('WorkflowsTestModule');
  848. $adapter = new ModelRelationsAndAttributesToByTimeWorkflowAdapter($model, $rules, $workflow->getType());
  849. $attributes = $adapter->getAttributesForTimeTrigger();
  850. $this->assertEquals(46, count($attributes));
  851. $compareData = array('label' => 'Owner');
  852. $this->assertEquals($compareData, $attributes['owner__User']);
  853. $compareData = array('label' => 'Modified By User');
  854. $this->assertEquals($compareData, $attributes['modifiedByUser__User']);
  855. $compareData = array('label' => 'Created By User');
  856. $this->assertEquals($compareData, $attributes['createdByUser__User']);
  857. $compareData = array('label' => 'User');
  858. $this->assertEquals($compareData, $attributes['user__User']);
  859. $compareData = array('label' => 'User 2');
  860. $this->assertEquals($compareData, $attributes['user2__User']);
  861. $compareData = array('label' => 'Last Name');
  862. $this->assertEquals($compareData, $attributes['lastName']);
  863. $compareData = array('label' => 'String');
  864. $this->assertEquals($compareData, $attributes['string']);
  865. $compareData = array('label' => 'First Name');
  866. $this->assertEquals($compareData, $attributes['firstName']);
  867. $compareData = array('label' => 'Boolean');
  868. $this->assertEquals($compareData, $attributes['boolean']);
  869. $compareData = array('label' => 'Date');
  870. $this->assertEquals($compareData, $attributes['date']);
  871. $compareData = array('label' => 'Date 2');
  872. $this->assertEquals($compareData, $attributes['date2']);
  873. $compareData = array('label' => 'Date 3');
  874. $this->assertEquals($compareData, $attributes['date3']);
  875. $compareData = array('label' => 'Date 4');
  876. $this->assertEquals($compareData, $attributes['date4']);
  877. $compareData = array('label' => 'Date Time');
  878. $this->assertEquals($compareData, $attributes['dateTime']);
  879. $compareData = array('label' => 'Date Time 2');
  880. $this->assertEquals($compareData, $attributes['dateTime2']);
  881. $compareData = array('label' => 'Date Time 3');
  882. $this->assertEquals($compareData, $attributes['dateTime3']);
  883. $compareData = array('label' => 'Date Time 4');
  884. $this->assertEquals($compareData, $attributes['dateTime4']);
  885. $compareData = array('label' => 'Created Date Time');
  886. $this->assertEquals($compareData, $attributes['createdDateTime']);
  887. $compareData = array('label' => 'Modified Date Time');
  888. $this->assertEquals($compareData, $attributes['modifiedDateTime']);
  889. $compareData = array('label' => 'Float');
  890. $this->assertEquals($compareData, $attributes['float']);
  891. $compareData = array('label' => 'Integer');
  892. $this->assertEquals($compareData, $attributes['integer']);
  893. $compareData = array('label' => 'Phone');
  894. $this->assertEquals($compareData, $attributes['phone']);
  895. $compareData = array('label' => 'Text Area');
  896. $this->assertEquals($compareData, $attributes['textArea']);
  897. $compareData = array('label' => 'Url');
  898. $this->assertEquals($compareData, $attributes['url']);
  899. $compareData = array('label' => 'Drop Down');
  900. $this->assertEquals($compareData, $attributes['dropDown']);
  901. $compareData = array('label' => 'Drop Down 2');
  902. $this->assertEquals($compareData, $attributes['dropDown2']);
  903. $compareData = array('label' => 'Radio Drop Down');
  904. $this->assertEquals($compareData, $attributes['radioDropDown']);
  905. $compareData = array('label' => 'Multi Drop Down');
  906. $this->assertEquals($compareData, $attributes['multiDropDown']);
  907. $compareData = array('label' => 'Tag Cloud');
  908. $this->assertEquals($compareData, $attributes['tagCloud']);
  909. $compareData = array('label' => 'Used As Attribute');
  910. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  911. $compareData = array('label' => 'Status');
  912. $this->assertEquals($compareData, $attributes['status']);
  913. //Currency is treated as a relation workflowed as an attribute just like drop downs
  914. $compareData = array('label' => 'Currency Value');
  915. $this->assertEquals($compareData, $attributes['currencyValue']);
  916. //likeContactState is a relation workflowed as attribute.
  917. //Makes sure the label is using the proper label translation via attributeLabels
  918. $compareData = array('label' => 'A name for a state');
  919. $this->assertEquals($compareData, $attributes['likeContactState']);
  920. //Add in owned primaryAddress, and primaryEmail, and secondaryEmail attributes
  921. $compareData = array('label' => 'Primary Address >> City');
  922. $this->assertEquals($compareData, $attributes['primaryAddress___city']);
  923. $compareData = array('label' => 'Primary Address >> Country');
  924. $this->assertEquals($compareData, $attributes['primaryAddress___country']);
  925. $compareData = array('label' => 'Primary Address >> Postal Code');
  926. $this->assertEquals($compareData, $attributes['primaryAddress___postalCode']);
  927. $compareData = array('label' => 'Primary Address >> State');
  928. $this->assertEquals($compareData, $attributes['primaryAddress___state']);
  929. $compareData = array('label' => 'Primary Address >> Street 1');
  930. $this->assertEquals($compareData, $attributes['primaryAddress___street1']);
  931. $compareData = array('label' => 'Primary Address >> Street 2');
  932. $this->assertEquals($compareData, $attributes['primaryAddress___street2']);
  933. //Email fields
  934. $compareData = array('label' => 'Primary Email >> Email Address');
  935. $this->assertEquals($compareData, $attributes['primaryEmail___emailAddress']);
  936. $compareData = array('label' => 'Primary Email >> Opt Out');
  937. $this->assertEquals($compareData, $attributes['primaryEmail___optOut']);
  938. $compareData = array('label' => 'Primary Email >> Is Invalid');
  939. $this->assertEquals($compareData, $attributes['primaryEmail___isInvalid']);
  940. $compareData = array('label' => 'Secondary Email >> Email Address');
  941. $this->assertEquals($compareData, $attributes['secondaryEmail___emailAddress']);
  942. $compareData = array('label' => 'Secondary Email >> Opt Out');
  943. $this->assertEquals($compareData, $attributes['secondaryEmail___optOut']);
  944. $compareData = array('label' => 'Secondary Email >> Is Invalid');
  945. $this->assertEquals($compareData, $attributes['secondaryEmail___isInvalid']);
  946. }
  947. /**
  948. * @depends testGetAvailableAttributesForByTimeTimeTrigger
  949. */
  950. public function testGetAvailableAttributesForByTimeCreateActionAttributes()
  951. {
  952. $model = new WorkflowModelTestItem();
  953. $rules = new WorkflowsTestWorkflowRules();
  954. $workflow = new Workflow();
  955. $workflow->setType(Workflow::TYPE_ON_SAVE);
  956. $workflow->setModuleClassName('WorkflowsTestModule');
  957. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  958. $attributes = $adapter->getRequiredAttributesForActions();
  959. $this->assertEquals(3, count($attributes));
  960. $compareData = array('label' => 'Last Name');
  961. $this->assertEquals($compareData, $attributes['lastName']);
  962. $compareData = array('label' => 'String');
  963. $this->assertEquals($compareData, $attributes['string']);
  964. $compareData = array('label' => 'Owner');
  965. $this->assertEquals($compareData, $attributes['owner__User']);
  966. $attributes = $adapter->getNonRequiredAttributesForActions();
  967. $this->assertEquals(39, count($attributes));
  968. $compareData = array('label' => 'First Name');
  969. $this->assertEquals($compareData, $attributes['firstName']);
  970. $compareData = array('label' => 'Boolean');
  971. $this->assertEquals($compareData, $attributes['boolean']);
  972. $compareData = array('label' => 'Date');
  973. $this->assertEquals($compareData, $attributes['date']);
  974. $compareData = array('label' => 'Date Time');
  975. $this->assertEquals($compareData, $attributes['dateTime']);
  976. $compareData = array('label' => 'Float');
  977. $this->assertEquals($compareData, $attributes['float']);
  978. $compareData = array('label' => 'Integer');
  979. $this->assertEquals($compareData, $attributes['integer']);
  980. $compareData = array('label' => 'Phone');
  981. $this->assertEquals($compareData, $attributes['phone']);
  982. $compareData = array('label' => 'Text Area');
  983. $this->assertEquals($compareData, $attributes['textArea']);
  984. $compareData = array('label' => 'Url');
  985. $this->assertEquals($compareData, $attributes['url']);
  986. $compareData = array('label' => 'Drop Down');
  987. $this->assertEquals($compareData, $attributes['dropDown']);
  988. $compareData = array('label' => 'Drop Down 2');
  989. $this->assertEquals($compareData, $attributes['dropDown2']);
  990. $compareData = array('label' => 'Radio Drop Down');
  991. $this->assertEquals($compareData, $attributes['radioDropDown']);
  992. $compareData = array('label' => 'Multi Drop Down');
  993. $this->assertEquals($compareData, $attributes['multiDropDown']);
  994. $compareData = array('label' => 'Tag Cloud');
  995. $this->assertEquals($compareData, $attributes['tagCloud']);
  996. $compareData = array('label' => 'Used As Attribute');
  997. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  998. $compareData = array('label' => 'Status');
  999. $this->assertEquals($compareData, $attributes['status']);
  1000. //Currency is treated as a relation workflowed as an attribute just like drop downs
  1001. $compareData = array('label' => 'Currency Value');
  1002. $this->assertEquals($compareData, $attributes['currencyValue']);
  1003. //likeContactState is a relation workflowed as attribute.
  1004. //Makes sure the label is using the proper label translation via attributeLabels
  1005. $compareData = array('label' => 'A name for a state');
  1006. $this->assertEquals($compareData, $attributes['likeContactState']);
  1007. //Add in owned primaryAddress, and primaryEmail, and secondaryEmail attributes
  1008. $compareData = array('label' => 'Primary Address >> City');
  1009. $this->assertEquals($compareData, $attributes['primaryAddress___city']);
  1010. $compareData = array('label' => 'Primary Address >> Country');
  1011. $this->assertEquals($compareData, $attributes['primaryAddress___country']);
  1012. $compareData = array('label' => 'Primary Address >> Postal Code');
  1013. $this->assertEquals($compareData, $attributes['primaryAddress___postalCode']);
  1014. $compareData = array('label' => 'Primary Address >> State');
  1015. $this->assertEquals($compareData, $attributes['primaryAddress___state']);
  1016. $compareData = array('label' => 'Primary Address >> Street 1');
  1017. $this->assertEquals($compareData, $attributes['primaryAddress___street1']);
  1018. $compareData = array('label' => 'Primary Address >> Street 2');
  1019. $this->assertEquals($compareData, $attributes['primaryAddress___street2']);
  1020. //Email fields
  1021. $compareData = array('label' => 'Primary Email >> Email Address');
  1022. $this->assertEquals($compareData, $attributes['primaryEmail___emailAddress']);
  1023. $compareData = array('label' => 'Primary Email >> Opt Out');
  1024. $this->assertEquals($compareData, $attributes['primaryEmail___optOut']);
  1025. $compareData = array('label' => 'Primary Email >> Is Invalid');
  1026. $this->assertEquals($compareData, $attributes['primaryEmail___isInvalid']);
  1027. $compareData = array('label' => 'Secondary Email >> Email Address');
  1028. $this->assertEquals($compareData, $attributes['secondaryEmail___emailAddress']);
  1029. $compareData = array('label' => 'Secondary Email >> Opt Out');
  1030. $this->assertEquals($compareData, $attributes['secondaryEmail___optOut']);
  1031. $compareData = array('label' => 'Secondary Email >> Is Invalid');
  1032. $this->assertEquals($compareData, $attributes['secondaryEmail___isInvalid']);
  1033. }
  1034. /**
  1035. * @depends testGetAvailableAttributesForByTimeCreateActionAttributes
  1036. */
  1037. public function testGetAvailableAttributesForByTimeUpdateActionAttributes()
  1038. {
  1039. $model = new WorkflowModelTestItem();
  1040. $rules = new WorkflowsTestWorkflowRules();
  1041. $workflow = new Workflow();
  1042. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1043. $workflow->setModuleClassName('WorkflowsTestModule');
  1044. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  1045. $attributes = $adapter->getAllAttributesForActions();
  1046. $this->assertEquals(42, count($attributes));
  1047. $compareData = array('label' => 'Last Name');
  1048. $this->assertEquals($compareData, $attributes['lastName']);
  1049. $compareData = array('label' => 'String');
  1050. $this->assertEquals($compareData, $attributes['string']);
  1051. $compareData = array('label' => 'Owner');
  1052. $this->assertEquals($compareData, $attributes['owner__User']);
  1053. $compareData = array('label' => 'First Name');
  1054. $this->assertEquals($compareData, $attributes['firstName']);
  1055. $compareData = array('label' => 'Boolean');
  1056. $this->assertEquals($compareData, $attributes['boolean']);
  1057. $compareData = array('label' => 'Date');
  1058. $this->assertEquals($compareData, $attributes['date']);
  1059. $compareData = array('label' => 'Date Time');
  1060. $this->assertEquals($compareData, $attributes['dateTime']);
  1061. $compareData = array('label' => 'Float');
  1062. $this->assertEquals($compareData, $attributes['float']);
  1063. $compareData = array('label' => 'Integer');
  1064. $this->assertEquals($compareData, $attributes['integer']);
  1065. $compareData = array('label' => 'Phone');
  1066. $this->assertEquals($compareData, $attributes['phone']);
  1067. $compareData = array('label' => 'Text Area');
  1068. $this->assertEquals($compareData, $attributes['textArea']);
  1069. $compareData = array('label' => 'Url');
  1070. $this->assertEquals($compareData, $attributes['url']);
  1071. $compareData = array('label' => 'Drop Down');
  1072. $this->assertEquals($compareData, $attributes['dropDown']);
  1073. $compareData = array('label' => 'Drop Down 2');
  1074. $this->assertEquals($compareData, $attributes['dropDown2']);
  1075. $compareData = array('label' => 'Radio Drop Down');
  1076. $this->assertEquals($compareData, $attributes['radioDropDown']);
  1077. $compareData = array('label' => 'Multi Drop Down');
  1078. $this->assertEquals($compareData, $attributes['multiDropDown']);
  1079. $compareData = array('label' => 'Tag Cloud');
  1080. $this->assertEquals($compareData, $attributes['tagCloud']);
  1081. $compareData = array('label' => 'Used As Attribute');
  1082. $this->assertEquals($compareData, $attributes['usedAsAttribute']);
  1083. $compareData = array('label' => 'Status');
  1084. $this->assertEquals($compareData, $attributes['status']);
  1085. //Currency is treated as a relation workflowed as an attribute just like drop downs
  1086. $compareData = array('label' => 'Currency Value');
  1087. $this->assertEquals($compareData, $attributes['currencyValue']);
  1088. //likeContactState is a relation workflowed as attribute.
  1089. //Makes sure the label is using the proper label translation via attributeLabels
  1090. $compareData = array('label' => 'A name for a state');
  1091. $this->assertEquals($compareData, $attributes['likeContactState']);
  1092. //Add in owned primaryAddress, and primaryEmail, and secondaryEmail attributes
  1093. $compareData = array('label' => 'Primary Address >> City');
  1094. $this->assertEquals($compareData, $attributes['primaryAddress___city']);
  1095. $compareData = array('label' => 'Primary Address >> Country');
  1096. $this->assertEquals($compareData, $attributes['primaryAddress___country']);
  1097. $compareData = array('label' => 'Primary Address >> Postal Code');
  1098. $this->assertEquals($compareData, $attributes['primaryAddress___postalCode']);
  1099. $compareData = array('label' => 'Primary Address >> State');
  1100. $this->assertEquals($compareData, $attributes['primaryAddress___state']);
  1101. $compareData = array('label' => 'Primary Address >> Street 1');
  1102. $this->assertEquals($compareData, $attributes['primaryAddress___street1']);
  1103. $compareData = array('label' => 'Primary Address >> Street 2');
  1104. $this->assertEquals($compareData, $attributes['primaryAddress___street2']);
  1105. //Email fields
  1106. $compareData = array('label' => 'Primary Email >> Email Address');
  1107. $this->assertEquals($compareData, $attributes['primaryEmail___emailAddress']);
  1108. $compareData = array('label' => 'Primary Email >> Opt Out');
  1109. $this->assertEquals($compareData, $attributes['primaryEmail___optOut']);
  1110. $compareData = array('label' => 'Primary Email >> Is Invalid');
  1111. $this->assertEquals($compareData, $attributes['primaryEmail___isInvalid']);
  1112. $compareData = array('label' => 'Secondary Email >> Email Address');
  1113. $this->assertEquals($compareData, $attributes['secondaryEmail___emailAddress']);
  1114. $compareData = array('label' => 'Secondary Email >> Opt Out');
  1115. $this->assertEquals($compareData, $attributes['secondaryEmail___optOut']);
  1116. $compareData = array('label' => 'Secondary Email >> Is Invalid');
  1117. $this->assertEquals($compareData, $attributes['secondaryEmail___isInvalid']);
  1118. }
  1119. /**
  1120. * @depends testGetAvailableAttributesForByTimeUpdateActionAttributes
  1121. */
  1122. public function testGetAllAvailableByTimeRelationsForActionTypeRelation()
  1123. {
  1124. $model = new WorkflowModelTestItem();
  1125. $rules = new WorkflowsTestWorkflowRules();
  1126. $workflow = new Workflow();
  1127. $workflow->setType(Workflow::TYPE_BY_TIME);
  1128. $workflow->setModuleClassName('WorkflowsTestModule');
  1129. $adapter = new ModelRelationsAndAttributesToByTimeWorkflowAdapter($model, $rules, $workflow->getType());
  1130. $relations = $adapter->getSelectableRelationsDataForActionTypeRelation();
  1131. $this->assertEquals(5, count($relations));
  1132. $compareData = array('label' => 'Has One');
  1133. $this->assertEquals($compareData, $relations['hasOne']);
  1134. $compareData = array('label' => 'Has One Again');
  1135. $this->assertEquals($compareData, $relations['hasOneAgain']);
  1136. $compareData = array('label' => 'Has Many');
  1137. $this->assertEquals($compareData, $relations['hasMany']);
  1138. $compareData = array('label' => 'Has One Also');
  1139. $this->assertEquals($compareData, $relations['hasOneAlso']);
  1140. $compareData = array('label' => 'Model 5 Via Item');
  1141. $this->assertEquals($compareData, $relations['model5ViaItem']);
  1142. }
  1143. /**
  1144. * @depends testGetAllAvailableByTimeRelationsForActionTypeRelation
  1145. */
  1146. public function testIsRelation()
  1147. {
  1148. $model = new WorkflowModelTestItem();
  1149. $rules = new WorkflowsTestWorkflowRules();
  1150. $workflow = new Workflow();
  1151. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1152. $workflow->setModuleClassName('WorkflowsTestModule');
  1153. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  1154. $this->assertTrue($adapter->isUsedAsARelation('hasOne'));
  1155. $this->assertFalse($adapter->isUsedAsARelation('garbage'));
  1156. $this->assertFalse($adapter->isUsedAsARelation('float'));
  1157. $this->assertFalse($adapter->isUsedAsARelation('firstname'));
  1158. $this->assertFalse($adapter->isUsedAsARelation('createdByUser__User'));
  1159. $this->assertTrue($adapter->isUsedAsARelation('modifiedByUser'));
  1160. //$this->assertTrue($adapter->isUsedAsARelation('model5ViaItem'));
  1161. $this->assertTrue($adapter->isUsedAsARelation('primaryEmail'));
  1162. $this->assertFalse($adapter->isUsedAsARelation('dropDown'));
  1163. $model = new WorkflowModelTestItem5();
  1164. $rules = new WorkflowsTestWorkflowRules();
  1165. $workflow = new Workflow();
  1166. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1167. $workflow->setModuleClassName('WorkflowsTestModule');
  1168. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  1169. $this->assertTrue ($adapter->isUsedAsARelation('WorkflowModelTestItem2__workflowItems__Inferred'));
  1170. $this->assertTrue ($adapter->isUsedAsARelation('WorkflowModelTestItem__workflowItems__Inferred'));
  1171. $this->assertTrue ($adapter->isUsedAsARelation('WorkflowModelTestItem__workflowItems__Inferred'));
  1172. }
  1173. /**
  1174. * @depends testIsRelation
  1175. */
  1176. public function testIsRelationASingularRelation()
  1177. {
  1178. $model = new WorkflowModelTestItem();
  1179. $rules = new WorkflowsTestWorkflowRules();
  1180. $workflow = new Workflow();
  1181. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1182. $workflow->setModuleClassName('WorkflowsTestModule');
  1183. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  1184. $this->assertTrue($adapter->isRelationASingularRelation('hasOne'));
  1185. $this->assertFalse($adapter->isRelationASingularRelation('hasMany'));
  1186. $model = new WorkflowModelTestItem5();
  1187. $rules = new WorkflowsTestWorkflowRules();
  1188. $workflow = new Workflow();
  1189. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1190. $workflow->setModuleClassName('WorkflowsTestModule');
  1191. $adapter = new ModelRelationsAndAttributesToOnSaveWorkflowAdapter($model, $rules, $workflow->getType());
  1192. $this->assertFalse($adapter->isRelationASingularRelation('WorkflowModelTestItem2__workflowItems__Inferred'));
  1193. $this->assertFalse($adapter->isRelationASingularRelation('WorkflowModelTestItem__workflowItems__Inferred'));
  1194. }
  1195. /**
  1196. * @depends testIsRelationASingularRelation
  1197. */
  1198. public function testGetTriggerValueElementTypeForNonStatefulAttributes()
  1199. {
  1200. $model = new WorkflowModelTestItem();
  1201. $rules = new WorkflowsTestWorkflowRules();
  1202. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1203. $this->assertEquals('BooleanForWizardStaticDropDown', $adapter->getTriggerValueElementType('boolean'));
  1204. $this->assertEquals('MixedCurrencyValueTypes', $adapter->getTriggerValueElementType('currencyValue'));
  1205. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date'));
  1206. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date2'));
  1207. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date3'));
  1208. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date4'));
  1209. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime'));
  1210. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime2'));
  1211. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime3'));
  1212. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime4'));
  1213. $this->assertEquals('StaticDropDownForWorkflow', $adapter->getTriggerValueElementType('dropDown'));
  1214. $this->assertEquals('MixedNumberTypes', $adapter->getTriggerValueElementType('float'));
  1215. $this->assertEquals('MixedNumberTypes', $adapter->getTriggerValueElementType('integer'));
  1216. $this->assertEquals('StaticMultiSelectDropDownForWorkflow', $adapter->getTriggerValueElementType('multiDropDown'));
  1217. $this->assertEquals('Text', $adapter->getTriggerValueElementType('phone'));
  1218. $this->assertEquals('StaticDropDownForWorkflow', $adapter->getTriggerValueElementType('radioDropDown'));
  1219. $this->assertEquals('Text', $adapter->getTriggerValueElementType('string'));
  1220. $this->assertEquals('StaticMultiSelectDropDownForWorkflow', $adapter->getTriggerValueElementType('tagCloud'));
  1221. $this->assertEquals('Text', $adapter->getTriggerValueElementType('textArea'));
  1222. $this->assertEquals('Text', $adapter->getTriggerValueElementType('url'));
  1223. }
  1224. /**
  1225. * @depends testGetTriggerValueElementTypeForNonStatefulAttributes
  1226. */
  1227. public function testGetTriggerValueElementTypeForAStatefulAttribute()
  1228. {
  1229. $model = new WorkflowModelTestItem();
  1230. $rules = new WorkflowsTestWorkflowRules();
  1231. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1232. $this->assertEquals('AllContactStatesStaticDropDownForWizardModel', $adapter->getTriggerValueElementType('likeContactState'));
  1233. $model = new WorkflowModelTestItem();
  1234. $rules = new WorkflowsAlternateStateTestWorkflowRules();
  1235. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1236. $this->assertEquals('LeadStateStaticDropDownForWorkflow', $adapter->getTriggerValueElementType('likeContactState'));
  1237. }
  1238. /**
  1239. * @depends testGetTriggerValueElementTypeForAStatefulAttribute
  1240. */
  1241. public function testGetTriggerValueElementType()
  1242. {
  1243. $model = new WorkflowModelTestItem();
  1244. $rules = new WorkflowsTestWorkflowRules();
  1245. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1246. $this->assertEquals('BooleanForWizardStaticDropDown', $adapter->getTriggerValueElementType('boolean'));
  1247. $this->assertEquals('MixedCurrencyValueTypes', $adapter->getTriggerValueElementType('currencyValue'));
  1248. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date'));
  1249. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date2'));
  1250. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date3'));
  1251. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('date4'));
  1252. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime'));
  1253. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime2'));
  1254. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime3'));
  1255. $this->assertEquals('MixedDateTypesForWorkflow', $adapter->getTriggerValueElementType('dateTime4'));
  1256. $this->assertEquals('StaticDropDownForWorkflow', $adapter->getTriggerValueElementType('dropDown'));
  1257. $this->assertEquals('MixedNumberTypes', $adapter->getTriggerValueElementType('float'));
  1258. $this->assertEquals('MixedNumberTypes', $adapter->getTriggerValueElementType('integer'));
  1259. $this->assertEquals('StaticMultiSelectDropDownForWorkflow', $adapter->getTriggerValueElementType('multiDropDown'));
  1260. $this->assertEquals('UserNameId', $adapter->getTriggerValueElementType('owner__User'));
  1261. $this->assertEquals('Text', $adapter->getTriggerValueElementType('phone'));
  1262. $this->assertEquals('StaticDropDownForWorkflow', $adapter->getTriggerValueElementType('radioDropDown'));
  1263. $this->assertEquals('Text', $adapter->getTriggerValueElementType('string'));
  1264. $this->assertEquals('StaticMultiSelectDropDownForWorkflow', $adapter->getTriggerValueElementType('tagCloud'));
  1265. $this->assertEquals('Text', $adapter->getTriggerValueElementType('textArea'));
  1266. $this->assertEquals('Text', $adapter->getTriggerValueElementType('url'));
  1267. $this->assertEquals('AllContactStatesStaticDropDownForWizardModel', $adapter->getTriggerValueElementType('likeContactState'));
  1268. $model = new WorkflowModelTestItem();
  1269. $rules = new WorkflowsAlternateStateTestWorkflowRules();
  1270. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1271. $this->assertEquals('LeadStateStaticDropDownForWorkflow', $adapter->getTriggerValueElementType('likeContactState'));
  1272. }
  1273. /**
  1274. * @depends testGetTriggerValueElementType
  1275. */
  1276. public function testGetAvailableOperatorsType()
  1277. {
  1278. $model = new WorkflowModelTestItem();
  1279. $rules = new WorkflowsTestWorkflowRules();
  1280. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1281. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_STRING,
  1282. $adapter->getAvailableOperatorsType('string'));
  1283. $model = new WorkflowModelTestItem();
  1284. $rules = new WorkflowsTestWorkflowRules();
  1285. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1286. $this->assertEquals('Boolean', $adapter->getAvailableOperatorsType('boolean'));
  1287. $this->assertEquals('CurrencyValue', $adapter->getAvailableOperatorsType('currencyValue'));
  1288. $this->assertNull($adapter->getAvailableOperatorsType('date'));
  1289. $this->assertNull($adapter->getAvailableOperatorsType('date2'));
  1290. $this->assertNull($adapter->getAvailableOperatorsType('date3'));
  1291. $this->assertNull($adapter->getAvailableOperatorsType('date4'));
  1292. $this->assertNull($adapter->getAvailableOperatorsType('dateTime'));
  1293. $this->assertNull($adapter->getAvailableOperatorsType('dateTime2'));
  1294. $this->assertNull($adapter->getAvailableOperatorsType('dateTime3'));
  1295. $this->assertNull($adapter->getAvailableOperatorsType('dateTime4'));
  1296. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1297. $adapter->getAvailableOperatorsType('dropDown'));
  1298. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_NUMBER,
  1299. $adapter->getAvailableOperatorsType('float'));
  1300. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_NUMBER,
  1301. $adapter->getAvailableOperatorsType('integer'));
  1302. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1303. $adapter->getAvailableOperatorsType('multiDropDown'));
  1304. $this->assertEquals('HasOne', $adapter->getAvailableOperatorsType('owner__User'));
  1305. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_STRING,
  1306. $adapter->getAvailableOperatorsType('phone'));
  1307. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1308. $adapter->getAvailableOperatorsType('radioDropDown'));
  1309. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_STRING,
  1310. $adapter->getAvailableOperatorsType('string'));
  1311. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1312. $adapter->getAvailableOperatorsType('tagCloud'));
  1313. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_STRING,
  1314. $adapter->getAvailableOperatorsType('textArea'));
  1315. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_STRING,
  1316. $adapter->getAvailableOperatorsType('url'));
  1317. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1318. $adapter->getAvailableOperatorsType('likeContactState'));
  1319. $model = new WorkflowModelTestItem();
  1320. $rules = new WorkflowsAlternateStateTestWorkflowRules();
  1321. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, Workflow::TYPE_ON_SAVE);
  1322. $this->assertEquals(ModelAttributeToOperatorTypeUtil::AVAILABLE_OPERATORS_TYPE_DROPDOWN,
  1323. $adapter->getAvailableOperatorsType('likeContactState'));
  1324. }
  1325. /**
  1326. * @depends testGetAvailableOperatorsType
  1327. */
  1328. public function testGetSelectableRelationsDataForEmailMessageRecipientModelRelation()
  1329. {
  1330. $model = new WorkflowModelTestItem();
  1331. $rules = new WorkflowsTestWorkflowRules();
  1332. $workflow = new Workflow();
  1333. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1334. $workflow->setModuleClassName('WorkflowsTestModule');
  1335. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  1336. $relations = $adapter->getSelectableRelationsDataForEmailMessageRecipientModelRelation();
  1337. $this->assertEquals(5, count($relations));
  1338. }
  1339. /**
  1340. * @depends testGetSelectableRelationsDataForEmailMessageRecipientModelRelation
  1341. */
  1342. public function testGetSelectableContactRelationsDataForEmailMessageRecipientModelRelation()
  1343. {
  1344. $model = new Account();
  1345. $rules = new AccountsWorkflowRules();
  1346. $workflow = new Workflow();
  1347. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1348. $workflow->setModuleClassName('AccountsModule');
  1349. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  1350. $relations = $adapter->getSelectableContactRelationsDataForEmailMessageRecipientModelRelation();
  1351. $this->assertEquals(1, count($relations));
  1352. $this->assertTrue(isset($relations['contacts']));
  1353. $model = new Contact();
  1354. $rules = new ContactsWorkflowRules();
  1355. $workflow = new Workflow();
  1356. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1357. $workflow->setModuleClassName('ContactsModule');
  1358. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  1359. $relations = $adapter->getSelectableContactRelationsDataForEmailMessageRecipientModelRelation();
  1360. $this->assertEquals(0, count($relations));
  1361. $model = new Task();
  1362. $rules = new TasksWorkflowRules();
  1363. $workflow = new Workflow();
  1364. $workflow->setType(Workflow::TYPE_ON_SAVE);
  1365. $workflow->setModuleClassName('TasksModule');
  1366. $adapter = new ModelRelationsAndAttributesToWorkflowAdapter($model, $rules, $workflow->getType());
  1367. $relations = $adapter->getSelectableContactRelationsDataForEmailMessageRecipientModelRelation();
  1368. $this->assertEquals(1, count($relations));
  1369. $this->assertTrue(isset($relations['Contact__activityItems__Inferred']));
  1370. }
  1371. }
  1372. ?>