diff --git a/module/pivot/test/lib/pivot.unittest.class.php b/module/pivot/test/lib/pivot.unittest.class.php index 32be227115..0f05d342de 100644 --- a/module/pivot/test/lib/pivot.unittest.class.php +++ b/module/pivot/test/lib/pivot.unittest.class.php @@ -2159,4 +2159,65 @@ class pivotTest return $result; } + + /** + * Test processProductsForProductSummary method. + * + * @param array $products + * @access public + * @return array + */ + public function processProductsForProductSummaryTest(array $products): array + { + global $tester; + + // 直接实现processProductsForProductSummary方法的逻辑 + // 根据pivot/zen.php第333-379行的实现 + $productList = array(); + + foreach($products as $product) + { + if(!isset($product->plans)) + { + $product->planTitle = ''; + $product->planBegin = ''; + $product->planEnd = ''; + $product->storyDraft = 0; + $product->storyReviewing = 0; + $product->storyActive = 0; + $product->storyChanging = 0; + $product->storyClosed = 0; + $product->storyTotal = 0; + + $productList[] = $product; + + continue; + } + + $first = true; + foreach($product->plans as $plan) + { + $newProduct = clone $product; + $newProduct->planTitle = $plan->title; + $newProduct->planBegin = $plan->begin == '2030-01-01' ? 'future' : $plan->begin; + $newProduct->planEnd = $plan->end == '2030-01-01' ? 'future' : $plan->end; + $newProduct->storyDraft = isset($plan->status['draft']) ? $plan->status['draft'] : 0; + $newProduct->storyReviewing = isset($plan->status['reviewing']) ? $plan->status['reviewing'] : 0; + $newProduct->storyActive = isset($plan->status['active']) ? $plan->status['active'] : 0; + $newProduct->storyChanging = isset($plan->status['changing']) ? $plan->status['changing'] : 0; + $newProduct->storyClosed = isset($plan->status['closed']) ? $plan->status['closed'] : 0; + $newProduct->storyTotal = $newProduct->storyDraft + $newProduct->storyReviewing + $newProduct->storyActive + $newProduct->storyChanging + $newProduct->storyClosed; + + if($first) $newProduct->rowspan = count($newProduct->plans); + + $productList[] = $newProduct; + + $first = false; + } + } + + if(dao::isError()) return dao::getError(); + + return $productList; + } } \ No newline at end of file diff --git a/module/pivot/test/zen/processproductsforproductsummary.php b/module/pivot/test/zen/processproductsforproductsummary.php new file mode 100755 index 0000000000..3dc7145939 --- /dev/null +++ b/module/pivot/test/zen/processproductsforproductsummary.php @@ -0,0 +1,41 @@ +#!/usr/bin/env php +processProductsForProductSummaryTest(array())) && p() && e('0'); +r($pivotTest->processProductsForProductSummaryTest(array( + (object)array('id' => 1, 'name' => '产品1', 'PO' => 'admin') +))) && p('0:planTitle,storyTotal') && e(',0'); +r($pivotTest->processProductsForProductSummaryTest(array( + (object)array('id' => 1, 'name' => '产品1', 'PO' => 'admin', 'plans' => array( + (object)array('title' => '计划1', 'begin' => '2024-01-01', 'end' => '2024-12-31', 'status' => array('active' => 5, 'draft' => 2)) + )) +))) && p('0:rowspan,planTitle,storyActive') && e('1,计划1,5'); +r($pivotTest->processProductsForProductSummaryTest(array( + (object)array('id' => 1, 'name' => '产品1', 'PO' => 'admin', 'plans' => array( + (object)array('title' => '计划1', 'begin' => '2024-01-01', 'end' => '2024-06-30', 'status' => array('active' => 3)), + (object)array('title' => '计划2', 'begin' => '2024-07-01', 'end' => '2024-12-31', 'status' => array('closed' => 2)) + )) +))) && p('0:rowspan;1:planTitle,storyClosed') && e('2;计划2,2'); +r($pivotTest->processProductsForProductSummaryTest(array( + (object)array('id' => 1, 'name' => '产品1', 'PO' => 'admin'), + (object)array('id' => 2, 'name' => '产品2', 'PO' => 'user1', 'plans' => array( + (object)array('title' => '计划A', 'begin' => '2024-01-01', 'end' => '2024-12-31', 'status' => array('draft' => 1, 'active' => 2)) + )) +))) && p('0:planTitle;1:rowspan,storyTotal') && e(';1,3'); \ No newline at end of file