From d930caf4c0bc47de67b21d1a9ce9a559d742c1d4 Mon Sep 17 00:00:00 2001 From: Truong Vo <41848815+vmtruong301296@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:18:30 +0700 Subject: [PATCH] =?UTF-8?q?hi=E1=BB=87u=20ch=E1=BB=89nh=20l=C3=B4i=20add?= =?UTF-8?q?=20test=20report?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/CriteriasController.php | 80 +------------------ .../TestCaseForSprintController.php | 17 +++- ..._083532_create_sprints_criterias_table.php | 3 +- ...955_create_test_cases_for_sprint_table.php | 3 +- ...12_084137_create_users_criterias_table.php | 3 +- FRONTEND/src/pages/TestReport/TestReport.tsx | 20 ++++- 6 files changed, 41 insertions(+), 85 deletions(-) diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php b/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php index 3f227fa..f63412e 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php @@ -220,90 +220,12 @@ class CriteriasController extends Controller return AbstractController::ResultSuccess($responseData); } - /** - * Update or create multiple SprintCriteria and UserCriteria records - * - * @param int $sprintId The id of the sprint - * @param array $criteriaData An array of criteria data. Each element of the array should be an associative array with the following keys: - * - criteria_id: The id of the criteria - * - point: The point of the criteria - * - expect_result: The expected result of the criteria - * - actual_result: The actual result of the criteria - * - note: The note of the criteria - * - user_id (optional): The id of the user - * - user_point (optional): The point of the user (default is the same as point) - * - user_note (optional): The note of the user (default is the same as note) - * @return bool True if successful, false otherwise - */ - public function updateCriteriasForSprint2($sprintId, Request $request) - { - $user = auth('admins')->user(); - - // Tạo hoặc lấy Sprint - $sprint = Sprint::firstOrCreate(['id' => $sprintId], [ - 'name' => 'Default Sprint Name', - 'start_date' => now(), - 'end_date' => now()->addDays(7), - 'project_id' => 1, - ]); - - $criteriaData = $request->criterias; - - foreach ($criteriaData as $data) { - // print_r($data); - $criteriaId = (int)$data['criteria_id']; - - // Kiểm tra xem criteria có tồn tại không - $criteria = Criteria::find($criteriaId); - if (!$criteria) { - // Nếu không tồn tại, có thể ném ra ngoại lệ hoặc trả về lỗi - return response()->json(['error' => 'Criteria ID ' . $criteriaId . ' does not exist'], 400); - } - - $point = $data['point']; - $expectResult = $data['expect_result']; - $actualResult = $data['actual_result']; - $note = $data['note']; - - // Cập nhật hoặc tạo mới SprintCriteria - SprintCriteria::updateOrCreate( - ['sprint_id' => $sprint->id, 'criteria_id' => $criteriaId], - ['point' => $point, 'expect_result' => $expectResult, 'actual_result' => $actualResult, 'note' => $note] - ); - - if (isset($data['users'])) { - // Xóa hết các bản ghi UserCriteria theo sprint_id và criteria_id - UserCriteria::where('criteria_id', $criteriaId) - ->where('sprint_id', $sprint->id) - ->delete(); - foreach ($data['users'] as $userData) { - $userId = $userData['user_id']; - $userPoint = $userData['point'] ?? $point; - $userNote = $userData['note'] ?? $note; - - // Chèn lại các bản ghi mới vào bảng UserCriteria - UserCriteria::create([ - 'user_id' => $userId, - 'criteria_id' => (int)$criteriaId, - 'sprint_id' => $sprint->id, - 'point' => $userPoint, - 'note' => $userNote, - 'created_by' => $user->name - ]); - } - } - } - - return AbstractController::ResultSuccess(""); - } - - public function updateCriteriasForSprint($sprintId, Request $request) { // Validate dữ liệu đầu vào $validated = $request->validate([ 'name' => 'required|string', - 'finalPoint' => 'required|string', + 'finalPoint' => 'string', 'project_id' => 'required|integer', 'criterias' => 'required|array', 'users' => 'required|array', diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TestCaseForSprintController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TestCaseForSprintController.php index ddb7df0..a66eaf1 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TestCaseForSprintController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TestCaseForSprintController.php @@ -8,6 +8,7 @@ use App\Traits\HasFilterRequest; use App\Traits\HasOrderByRequest; use App\Traits\HasSearchRequest; use Illuminate\Http\Request; +use Modules\Admin\app\Models\Sprint; use Modules\Admin\app\Models\TestCaseForSprint; class TestCaseForSprintController extends Controller @@ -29,7 +30,7 @@ class TestCaseForSprintController extends Controller $request->validate([ 'name' => 'required|string|max:255', - 'position' => 'required|integer', + 'position' => 'required|string', 'input' => 'required|string', 'expect_output' => 'required|string', 'actual_output' => 'required|string', @@ -38,6 +39,20 @@ class TestCaseForSprintController extends Controller 'bug_id_on_jira' => 'nullable|string', ]); + $sprint = Sprint::find($sprintId); + if (!$sprint) { + // Create new sprint + Sprint::create([ + 'id' => $sprintId, + 'name' => $request->sprint_name, + 'project_id' => $request->project_id, + 'point' => "", + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'complete_date' => $request->complete_date, + ]); + } + $testReport = TestCaseForSprint::create([ 'name' => $request->name, 'position' => $request->position, diff --git a/BACKEND/database/migrations/2024_09_12_083532_create_sprints_criterias_table.php b/BACKEND/database/migrations/2024_09_12_083532_create_sprints_criterias_table.php index fab0f99..7271b95 100644 --- a/BACKEND/database/migrations/2024_09_12_083532_create_sprints_criterias_table.php +++ b/BACKEND/database/migrations/2024_09_12_083532_create_sprints_criterias_table.php @@ -19,7 +19,8 @@ return new class extends Migration $table->string('actual_result'); $table->string('note')->nullable(); $table->string('created_by'); - + $table->timestamps(); + $table->foreign('sprint_id')->references('id')->on('sprint')->onDelete('cascade'); $table->foreign('criteria_id')->references('id')->on('criterias')->onDelete('cascade'); }); diff --git a/BACKEND/database/migrations/2024_09_12_083955_create_test_cases_for_sprint_table.php b/BACKEND/database/migrations/2024_09_12_083955_create_test_cases_for_sprint_table.php index 08eb19e..c95fcfe 100644 --- a/BACKEND/database/migrations/2024_09_12_083955_create_test_cases_for_sprint_table.php +++ b/BACKEND/database/migrations/2024_09_12_083955_create_test_cases_for_sprint_table.php @@ -23,7 +23,8 @@ return new class extends Migration $table->string('bug_id_on_jira')->nullable(); $table->unsignedBigInteger('sprint_id'); $table->string('created_by'); - + $table->timestamps(); + $table->foreign('sprint_id')->references('id')->on('sprint')->onDelete('cascade'); }); } diff --git a/BACKEND/database/migrations/2024_09_12_084137_create_users_criterias_table.php b/BACKEND/database/migrations/2024_09_12_084137_create_users_criterias_table.php index 53d276a..2b6acf6 100644 --- a/BACKEND/database/migrations/2024_09_12_084137_create_users_criterias_table.php +++ b/BACKEND/database/migrations/2024_09_12_084137_create_users_criterias_table.php @@ -18,7 +18,8 @@ return new class extends Migration $table->integer('point'); $table->string('note')->nullable(); $table->string('created_by'); - + $table->timestamps(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('criteria_id')->references('id')->on('criterias')->onDelete('cascade'); $table->foreign('sprint_id')->references('id')->on('sprint')->onDelete('cascade'); diff --git a/FRONTEND/src/pages/TestReport/TestReport.tsx b/FRONTEND/src/pages/TestReport/TestReport.tsx index 5a1913a..58f6468 100644 --- a/FRONTEND/src/pages/TestReport/TestReport.tsx +++ b/FRONTEND/src/pages/TestReport/TestReport.tsx @@ -35,6 +35,9 @@ type DataProject = { type DataSprint = { id: number name: string + startDate: string + endDate: string + completeDate: string } type DataTestCases = { @@ -48,6 +51,11 @@ type DataTestCases = { bug_id_on_jira: string note: string created_by?: string + project_id?: string + sprint_name?: string + start_date?: string + end_date?: string + complete_date?: string } const TestReport = () => { @@ -225,7 +233,15 @@ const TestReport = () => { const handleCreate = async (values: DataTestCases) => { try { + const dataSprintSearch = dataSprint.find( + (item: DataSprint) => item.id == Number(filter.sprint), + ) const { ...data } = values + data.sprint_name = dataSprintSearch?.name + data.project_id = filter.project + data.start_date = dataSprintSearch?.startDate + data.end_date = dataSprintSearch?.endDate + data.complete_date = dataSprintSearch?.completeDate delete data.id const res = await post(`${createTestCase}/${filter.sprint}`, data) @@ -496,9 +512,9 @@ const TestReport = () => { >
{ - setDisableBtn(true) + // setDisableBtn(true) await handleCreate(values) - setDisableBtn(false) + // setDisableBtn(false) })} >