From 1a160fc575608ffa2b14373dc46dd7b4e63db3dd Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 5 Nov 2019 11:32:47 -0400 Subject: [PATCH] PMC-488 --- .../engine/classes/DerivationTest.php | 83 +++++++++++++++++++ workflow/engine/classes/Derivation.php | 6 +- 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 tests/unit/workflow/engine/classes/DerivationTest.php diff --git a/tests/unit/workflow/engine/classes/DerivationTest.php b/tests/unit/workflow/engine/classes/DerivationTest.php new file mode 100644 index 000000000..ca42ee585 --- /dev/null +++ b/tests/unit/workflow/engine/classes/DerivationTest.php @@ -0,0 +1,83 @@ + '@&var3']; + $childCaseData = ['var2' => (object)['Street' => 'test', 'name' => 'Something']]; + $parentCaseData = ['var1' => (object)['Street' => 'test']]; + + $der = new Derivation(); + $res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData); + + $this->assertArrayHasKey('var3', $res); + $this->assertObjectHasAttribute('Street', $res['var3']); + $this->assertObjectHasAttribute('name', $res['var3']); + $this->assertEquals($res['var3'], (object)['Street' => 'test', 'name' => 'Something']); + } + + /** + * It tests the getSubProcessVariables method with origin labels + * + * @covers Derivation::getSubProcessVariables() + * @test + */ + public function it_should_test_the_get_sub_process_variables_method_with_origin_labels() + { + $fields = ['@&var2' => '@&var3', '@&var2_label' => '@&var3']; + $childCaseData = [ + 'var2' => (object)['Street' => 'test', 'name' => 'Something'], + 'var2_label' => ['Street' => 'test', 'name' => 'Something'] + ]; + $parentCaseData = ['var1' => (object)['Street' => 'test']]; + + $der = new Derivation(); + $res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData); + + $this->assertArrayHasKey('var3_label', $res); + $this->assertEquals($res['var3_label'], ['Street' => 'test', 'name' => 'Something']); + } + + /** + * It tests the getSubProcessVariables method with target labels + * + * @covers Derivation::getSubProcessVariables() + * @test + */ + public function it_should_test_the_get_sub_process_variables_method_with_target_labels() + { + $fields = ['@&var2' => '@&var3', '@&var2' => '@&var3_label']; + $childCaseData = ['var2' => (object)['Street' => 'test', 'name' => 'Something']]; + $parentCaseData = ['var1' => (object)['Street' => 'test']]; + + $der = new Derivation(); + $res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData); + + $this->assertArrayHasKey('var3_label', $res); + $this->assertObjectHasAttribute('Street', $res['var3_label']); + $this->assertObjectHasAttribute('name', $res['var3_label']); + $this->assertEquals($res['var3_label'], (object)['Street' => 'test', 'name' => 'Something']); + } +} \ No newline at end of file diff --git a/workflow/engine/classes/Derivation.php b/workflow/engine/classes/Derivation.php index 65c55a449..d3ffe0f8d 100644 --- a/workflow/engine/classes/Derivation.php +++ b/workflow/engine/classes/Derivation.php @@ -1334,8 +1334,8 @@ class Derivation $aOldFields = $this->case->loadCase( $aNewCase['APPLICATION'] ); foreach ($aFields as $sOriginField => $sTargetField) { - $sOriginField = trim($sOriginField, " @#%?$="); - $sTargetField = trim($sTargetField, " @#%?$="); + $sOriginField = trim($sOriginField, " @#%?$=&"); + $sTargetField = trim($sTargetField, " @#%?$=&"); $aNewFields[$sTargetField] = isset( $appFields['APP_DATA'][$sOriginField] ) ? $appFields['APP_DATA'][$sOriginField] : ''; @@ -1653,12 +1653,14 @@ class Derivation $originField = str_replace('?', '', $originField); $originField = str_replace('$', '', $originField); $originField = str_replace('=', '', $originField); + $originField = str_replace('&', '', $originField); $targetField = str_replace('@', '', $targetField); $targetField = str_replace('#', '', $targetField); $targetField = str_replace('%', '', $targetField); $targetField = str_replace('?', '', $targetField); $targetField = str_replace('$', '', $targetField); $targetField = str_replace('=', '', $targetField); + $targetField = str_replace('&', '', $targetField); $newFields[$targetField] = isset($childCaseData[$originField]) ? $childCaseData[$originField] : ''; if (array_key_exists($originField . '_label', $childCaseData)) {