From 374cb5b727912017ab40c49d41cb94792bbf434f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 20 Sep 2024 15:06:06 -0400 Subject: [PATCH 1/2] FOUR-18636 --- .../Http/Controllers/Api/TaskController.php | 55 +++++++++++++++ routes/api.php | 1 + tests/Feature/Api/TaskControllerTest.php | 67 +++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 tests/Feature/Api/TaskControllerTest.php diff --git a/ProcessMaker/Http/Controllers/Api/TaskController.php b/ProcessMaker/Http/Controllers/Api/TaskController.php index 2b25834bd5..99ca6acea9 100644 --- a/ProcessMaker/Http/Controllers/Api/TaskController.php +++ b/ProcessMaker/Http/Controllers/Api/TaskController.php @@ -53,6 +53,15 @@ class TaskController extends Controller 'Completed' => 'CLOSED', ]; + protected $defaultCase = [ + 'id', // Task # + 'element_name', // Task Name + 'user_id', // Participant + 'process_id', // Process + 'due_at', // Due At + 'process_request_id', // Request Id # + ]; + /** * Display a listing of the resource. * @@ -149,6 +158,52 @@ public function index(Request $request, $getTotal = false, User $user = null) return new TaskCollection($response); } + /** + * Get the task list related to the case + * @param Request $request + * @param User $user used by Saved Search package to return accurate counts + * @return array + */ + public function indexCase(Request $request, User $user = null) + { + if (!$user) { + $user = Auth::user(); + } + + // Review the 'case_number' + $request->validate([ + 'case_number' => 'required|integer', + ]); + $caseNumber = $request->input('case_number'); + + // Get only the columns defined + $query = ProcessRequestToken::select($this->defaultCase); + // Filter by case_number + $query->whereHas('processRequest', function ($query) use ($caseNumber) { + $query->where('case_number', $caseNumber); + }); + // Filter the status + $query->where('status', 'ACTIVE'); + // Return the process information + $query->with(['process' => function ($query) { + $query->select('id', 'name'); + }]); + // Return the user information + $query->with(['user' => function ($query) { + $query->select('id', 'firstname', 'lastname', 'username', 'avatar'); + }]); + // Filter only the task related to the user + $this->applyForCurrentUser($query, $user); + try { + $response = $query->paginate($request->input('per_page', 10)); + $response->inOverdue = 0; + } catch (QueryException $e) { + return $this->handleQueryException($e); + } + + return new TaskCollection($response); + } + /** * Display the specified resource. * @TODO remove this method,view and route this is not a used file diff --git a/routes/api.php b/routes/api.php index 4e55539bbe..488f90df4d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -189,6 +189,7 @@ // Tasks Route::get('tasks', [TaskController::class, 'index'])->name('tasks.index'); // Already filtered in controller + Route::get('tasks-by-case', [TaskController::class, 'indexCase'])->name('tasks.indexCase'); Route::get('tasks/{task}', [TaskController::class, 'show'])->name('tasks.show')->middleware('can:view,task'); Route::get('tasks/{task}/screen_fields', [TaskController::class, 'getScreenFields'])->name('getScreenFields.show')->middleware('can:view,task'); Route::get('tasks/{task}/screens/{screen}', [TaskController::class, 'getScreen'])->name('tasks.get_screen')->middleware('can:viewScreen,task,screen'); diff --git a/tests/Feature/Api/TaskControllerTest.php b/tests/Feature/Api/TaskControllerTest.php new file mode 100644 index 0000000000..bdc651776e --- /dev/null +++ b/tests/Feature/Api/TaskControllerTest.php @@ -0,0 +1,67 @@ +create(); + Auth::login($user); + + // Call the endpoint without the 'case_number' parameter + $response = $this->apiCall('GET', self::API_TASK_BY_CASE); + + // Check if the response returns a 400 error due to missing 'case_number' + $response->assertStatus(422) + ->assertJson(['message' => 'The Case number field is required.']); + } + + /** + * Test indexCase returns tasks related to the case_number. + * + * @return void + */ + public function test_index_case_returns_tasks_for_case_number() + { + // Simulate an authenticated user + $user = User::factory()->create(); + Auth::login($user); + + // Create a ProcessRequestToken associated with a specific case_number + $processRequest = ProcessRequest::factory()->create([ + 'case_number' => 81, + ]); + $processRequestToken = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'status' => 'ACTIVE', + 'process_request_id' => $processRequest->id, // id del ProcessRequest + ]); + + // Call the endpoint with the 'case_number' parameter + $response = $this->apiCall('GET', self::API_TASK_BY_CASE . '?case_number=81'); + print_r($response); + + // Check if the response is successful and contains the expected tasks + $response->assertStatus(200); + $this->assertCount(0, $response->json('data')); + } +} From 82bc42140640f06a65da5c254fef244ea42e77c4 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 20 Sep 2024 15:43:48 -0400 Subject: [PATCH 2/2] observations --- tests/Feature/Api/TaskControllerTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Feature/Api/TaskControllerTest.php b/tests/Feature/Api/TaskControllerTest.php index bdc651776e..5022b999a8 100644 --- a/tests/Feature/Api/TaskControllerTest.php +++ b/tests/Feature/Api/TaskControllerTest.php @@ -58,7 +58,6 @@ public function test_index_case_returns_tasks_for_case_number() // Call the endpoint with the 'case_number' parameter $response = $this->apiCall('GET', self::API_TASK_BY_CASE . '?case_number=81'); - print_r($response); // Check if the response is successful and contains the expected tasks $response->assertStatus(200);