From 6245b484b94fccd0ab32eee0c923bdbe880ae100 Mon Sep 17 00:00:00 2001 From: yulujie Date: Wed, 6 Aug 2025 11:24:50 +0800 Subject: [PATCH] *[task#147476,doing,2h,1h] Add uitest. --- .../test/lib/grouptaskinlite.ui.class.php | 74 ++++++ module/execution/test/ui/grouptaskinlite.php | 239 ++++++++++++++++++ 2 files changed, 313 insertions(+) create mode 100644 module/execution/test/lib/grouptaskinlite.ui.class.php create mode 100644 module/execution/test/ui/grouptaskinlite.php diff --git a/module/execution/test/lib/grouptaskinlite.ui.class.php b/module/execution/test/lib/grouptaskinlite.ui.class.php new file mode 100644 index 0000000000..0b66f775ff --- /dev/null +++ b/module/execution/test/lib/grouptaskinlite.ui.class.php @@ -0,0 +1,74 @@ +switchVision('lite', 5); + $form = $this->initForm('execution', 'grouptask', array('execution' => '2', 'groupBy' => $groupData ), 'appIframe-project'); + preg_match_all('/\d+(?:\.\d+)?/', $form->dom->task->getText(), $matches); + if($matches[0][0] != $nums['tasks']) return $this->failed('总任务数目错误'); + if($matches[0][1] != $nums['waiting']) return $this->failed('未开始任务数目错误'); + if($matches[0][2] != $nums['doing']) return $this->failed('进行中任务数目错误'); + preg_match_all('/\d+(?:\.\d+)?/', $form->dom->time->getText(), $params); + if($params[0][0] != $nums['estimates']) return $this->failed('总预计工时错误'); + if($params[0][1] != $nums['cost']) return $this->failed('已消耗工时错误'); + if($params[0][2] != $nums['left']) return $this->failed('剩余工时错误'); + return $this->success('数据正确'); + } + + /** + * 检查已关联研发需求的任务数据统计。 + * Check the data of the group. + * + * @param array $nums + * @access public + * @return void + */ + public function checkTaskLinkedStory($nums) + { + $form = $this->initForm('execution', 'grouptask', array('execution' => '2', 'groupBy' => 'story' ), 'appIframe-project'); + $form->dom->taskLinkedStoryBtn->click(); + $form->wait(1); + preg_match_all('/\d+(?:\.\d+)?/', $form->dom->task->getText(), $matches); + if($matches[0][0] != $nums['tasks']) return $this->failed('总任务数目错误'); + if($matches[0][1] != $nums['waiting']) return $this->failed('未开始任务数目错误'); + if($matches[0][2] != $nums['doing']) return $this->failed('进行中任务数目错误'); + preg_match_all('/\d+(?:\.\d+)?/', $form->dom->time->getText(), $params); + if($params[0][0] != $nums['estimates']) return $this->failed('总预计工时错误'); + if($params[0][1] != $nums['cost']) return $this->failed('已消耗工时错误'); + if($params[0][2] != $nums['left']) return $this->failed('剩余工时错误'); + return $this->success('数据正确'); + } + + /** + * 检查折叠后的数据统计。 + * Check the data of the group. + * + * @param array $nums + * @access public + * @return void + */ + public function checkCollapse($nums) + { + $form = $this->initForm('execution', 'grouptask', array('execution' => '2', 'groupBy' => 'story' ), 'appIframe-project'); + $form->dom->collapseBtn->click(); + $form->wait(1); + if($form->dom->rtask->getText() != $nums['tasks']) return $this->failed('总任务数目错误'); + if($form->dom->rdoing->getText() != $nums['doing']) return $this->failed('进行中任务数目错误'); + if($form->dom->rwaiting->getText() != $nums['waiting']) return $this->failed('未开始任务数目错误'); + if($form->dom->restimates->getText() != $nums['estimates']) return $this->failed('总预计工时错误'); + if($form->dom->rcost->getText() != $nums['cost']) return $this->failed('已消耗工时错误'); + if($form->dom->rleft->getText() != $nums['left']) return $this->failed('剩余工时错误'); + return $this->success('数据正确'); + } +} diff --git a/module/execution/test/ui/grouptaskinlite.php b/module/execution/test/ui/grouptaskinlite.php new file mode 100644 index 0000000000..c17cb14488 --- /dev/null +++ b/module/execution/test/ui/grouptaskinlite.php @@ -0,0 +1,239 @@ +#!/usr/bin/env php +id->range('1-100'); +$user->account->range('admin, user1, user2, user3, user4, user5'); +$user->realname->range('admin, USER1, USER2, USER3, USER4, USER5'); +$user->password->range($config->uitest->defaultPassword)->format('md5'); +$user->visions->range('`rnd,lite`'); +$user->gen(6); + +$product = zenData('product'); +$product->id->range('1-100'); +$product->name->range('运营'); +$product->shadow->range('1'); +$product->bind->range('1'); +$product->type->range('normal'); +$product->vision->range('lite'); +$product->gen(1); + +$project = zenData('project'); +$project->id->range('1-100'); +$project->project->range('0, 1'); +$project->model->range('kanban, []'); +$project->type->range('project, kanban'); +$project->auth->range('[]'); +$project->storyType->range('[]'); +$project->parent->range('0, 1'); +$project->path->range('`,1,`, `,1,2,`'); +$project->grade->range('1'); +$project->name->range('运营项目, 看板'); +$project->begin->range('(-2M)-(-M):1D')->type('timestamp')->format('YY/MM/DD'); +$project->end->range('(+2M)-(+3M):1D')->type('timestamp')->format('YY/MM/DD'); +$project->openedBy->range('user1'); +$project->acl->range('open'); +$project->status->range('doing'); +$project->vision->range('lite'); +$project->gen(2); + +$projectProduct = zenData('projectproduct'); +$projectProduct->project->range('1, 2'); +$projectProduct->product->range('1'); +$projectProduct->branch->range('0'); +$projectProduct->plan->range('0'); +$projectProduct->gen(2); + +$story = zenData('story'); +$story->id->range('1-100'); +$story->vision->range('lite'); +$story->parent->range('0'); +$story->isParent->range('0'); +$story->root->range('1-100'); +$story->path->range('`,1,`, `,2,`, `,3,`'); +$story->grade->range('1'); +$story->product->range('1'); +$story->module->range('0'); +$story->plan->range('0'); +$story->title->range('1-100'); +$story->type->range('story'); +$story->estimate->range('0'); +$story->status->range('active'); +$story->stage->range('projected'); +$story->assignedTo->range('[]'); +$story->version->range('1'); +$story->gen(2); + +$storySpec = zenData('storyspec'); +$storySpec->story->range('1-100'); +$storySpec->version->range('1'); +$storySpec->title->range('1-100'); +$storySpec->gen(2); + +$projectStory = zenData('projectstory'); +$projectStory->project->range('1{2}, 2'); +$projectStory->product->range('1'); +$projectStory->branch->range('0'); +$projectStory->story->range('1, 2, 1'); +$projectStory->version->range('1'); +$projectStory->order->range('1, 2, 1'); +$projectStory->gen(3); + +$task = zenData('task'); +$task->id->range('1-100'); +$task->project->range('1'); +$task->execution->range('2'); +$task->story->range('1{5}, 0{99}'); +$task->storyVersion->range('1'); +$task->name->range('1-100'); +$task->type->range('devel, study, affair{100}'); +$task->estimate->range('1'); +$task->consumed->range('0{3}, 1-100'); +$task->left->range('1{3}, 2{3}, 0{2}, 2{100}'); +$task->deadline->range(' (-5D)-(-4D):1D, []{11}')->type('timestamp')->format('YY/MM/DD'); +$task->status->range('wait{3}, doing{3}, done{2}, cancel, closed{3}'); +$task->openedBy->range('admin{6}, user1{6}'); +$task->assignedTo->range('[]{2}, user1{5}, admin{2}, closed{3}'); +$task->finishedBy->range('[]{6}, admin, user1{2}, admin, user1{2}'); +$task->canceledBy->range('[]{8}, admin, []{3}'); +$task->closedBy->range('[]{9}, admin{2}, user1'); +$task->deleted->range('0{11}, 1'); +$task->vision->range('lite'); +$task->gen(12); + +$taskSpec = zenData('taskspec'); +$taskSpec->task->range('1-100'); +$taskSpec->version->range('0'); +$taskSpec->name->range('1-100'); +$taskSpec->gen(12); + +zenData('taskteam')->gen(0); + +$tester = new grouptaskTester(); +$tester->login(); + +$nums = array( + 'story' => array( + 'tasks' => '6', + 'waiting' => '0', + 'doing' => '1', + 'estimates' => '6', + 'cost' => '33', + 'left' => '2', + ), + 'status' => array( + 'tasks' => '3', + 'waiting' => '3', + 'doing' => '0', + 'estimates' => '3', + 'cost' => '0', + 'left' => '3', + ), + 'pri' => array( + 'tasks' => '3', + 'waiting' => '1', + 'doing' => '1', + 'estimates' => '3', + 'cost' => '8', + 'left' => '3', + ), + 'assignedTo' => array( + 'tasks' => '2', + 'waiting' => '2', + 'doing' => '0', + 'estimates' => '2', + 'cost' => '0', + 'left' => '2', + ), + 'finishedBy' => array( + 'tasks' => '6', + 'waiting' => '3', + 'doing' => '3', + 'estimates' => '6', + 'cost' => '6', + 'left' => '9', + ), + 'closedBy' => array( + 'tasks' => '9', + 'waiting' => '3', + 'doing' => '3', + 'estimates' => '9', + 'cost' => '21', + 'left' => '9', + ), + 'type' => array( + 'tasks' => '9', + 'waiting' => '1', + 'doing' => '3', + 'estimates' => '9', + 'cost' => '36', + 'left' => '7', + ), + 'linked' => array( + 'tasks' => '5', + 'waiting' => '3', + 'doing' => '2', + 'estimates' => '5', + 'cost' => '3', + 'left' => '7', + ), + 'collapse' => array( + 'tasks' => '6', + 'waiting' => '0', + 'doing' => '1', + 'estimates' => '6h', + 'cost' => '33h', + 'left' => '2h', + ) +); + +r($tester->checkGroupData('story',$nums['story'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('status',$nums['status'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('pri',$nums['pri'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('assignedTo',$nums['assignedTo'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('finishedBy',$nums['finishedBy'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('closedBy',$nums['closedBy'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkGroupData('type',$nums['type'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkTaskLinkedStory($nums['linked'])) && p('status,message') && e('SUCCESS,数据正确'); +r($tester->checkCollapse($nums['collapse'])) && p('status,message') && e('SUCCESS,数据正确'); +$tester->closeBrowser();