From 88a0f4af31a96214bd981553c24c2b8cdfd3ea0c Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Tue, 24 Sep 2024 08:07:44 -0400 Subject: [PATCH 1/4] test: cases main flow --- ProcessMaker/Repositories/CaseRepository.php | 4 +- tests/Feature/Cases/CaseParticipatedTest.php | 363 +++++++++++++++++ tests/Feature/Cases/CaseStartedTest.php | 393 +++++++++++++++++++ tests/Feature/Cases/CasesJobTest.php | 68 ++++ 4 files changed, 826 insertions(+), 2 deletions(-) create mode 100644 tests/Feature/Cases/CaseParticipatedTest.php create mode 100644 tests/Feature/Cases/CaseStartedTest.php create mode 100644 tests/Feature/Cases/CasesJobTest.php diff --git a/ProcessMaker/Repositories/CaseRepository.php b/ProcessMaker/Repositories/CaseRepository.php index 3bdd35d65e..795036811d 100644 --- a/ProcessMaker/Repositories/CaseRepository.php +++ b/ProcessMaker/Repositories/CaseRepository.php @@ -75,12 +75,12 @@ public function update(ExecutionInstanceInterface $instance, TokenInterface $tok $case->case_title = $instance->case_title; $case->case_status = $instance->status === 'ACTIVE' ? 'IN_PROGRESS' : $instance->status; - $case->request_tokens->push($token->getKey()) + $case->request_tokens = $case->request_tokens->push($token->getKey()) ->unique() ->values(); if (!in_array($token->element_type, ['scriptTask'])) { - $case->tasks->push([ + $case->tasks = $case->tasks->push([ 'id' => $token->getKey(), 'element_id' => $token->element_id, 'name' => $token->element_name, diff --git a/tests/Feature/Cases/CaseParticipatedTest.php b/tests/Feature/Cases/CaseParticipatedTest.php new file mode 100644 index 0000000000..d28e80c0dc --- /dev/null +++ b/tests/Feature/Cases/CaseParticipatedTest.php @@ -0,0 +1,363 @@ +create(); + $process = Process::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseHas('cases_started', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + ]); + + $this->assertDatabaseCount('cases_participated', 0); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + 'processes->[0]->id' => $process->id, + 'processes->[0]->name' => $process->name, + 'requests->[0]->id' => $instance->id, + 'requests->[0]->name' => $instance->name, + 'requests->[0]->parent_request_id' => $instance->parent_request_id ?? 0, + 'request_tokens->[0]' => $token->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + } + + public function test_create_multiple_case_participated() + { + $user = User::factory()->create(); + $process = Process::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseHas('cases_started', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + 'request_tokens->[1]' => $token2->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + 'tasks->[1]->id' => $token2->id, + 'tasks->[1]->element_id' => $token2->element_id, + 'tasks->[1]->name' => $token2->element_name, + 'tasks->[1]->process_id' => $token2->process_id, + ]); + } + + public function test_update_case_participated_users() + { + $user = User::factory()->create(); + $user2 = User::factory()->create(); + $process = Process::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseHas('cases_started', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user2->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user2->id, + 'case_number' => $instance->case_number, + 'case_title' => $instance->case_title, + 'case_title_formatted' => $instance->case_title_formatted, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token2->id, + 'tasks->[0]->id' => $token2->id, + 'tasks->[0]->element_id' => $token2->element_id, + 'tasks->[0]->name' => $token2->element_name, + 'tasks->[0]->process_id' => $token2->process_id, + ]); + } + + public function test_update_case_participated_user_tasks() + { + $user = User::factory()->create(); + $user2 = User::factory()->create(); + $process = Process::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'request_tokens->[0]' => $token->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user2->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user2->id, + 'case_number' => $instance->case_number, + 'request_tokens->[0]' => $token2->id, + 'tasks->[0]->id' => $token2->id, + 'tasks->[0]->element_id' => $token2->element_id, + 'tasks->[0]->name' => $token2->element_name, + 'tasks->[0]->process_id' => $token2->process_id, + ]); + + $token3 = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token3); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'request_tokens->[0]' => $token->id, + 'request_tokens->[1]' => $token3->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + 'tasks->[1]->id' => $token3->id, + 'tasks->[1]->element_id' => $token3->element_id, + 'tasks->[1]->name' => $token3->element_name, + 'tasks->[1]->process_id' => $token3->process_id, + ]); + } + + public function test_update_case_participated_completed() + { + $user = User::factory()->create(); + $user2 = User::factory()->create(); + $process = Process::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + + $this->assertDatabaseCount('cases_participated', 1); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user2->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user2->id, + 'case_number' => $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token2->id, + 'tasks->[0]->id' => $token2->id, + 'tasks->[0]->element_id' => $token2->element_id, + 'tasks->[0]->name' => $token2->element_name, + 'tasks->[0]->process_id' => $token2->process_id, + ]); + + $token3 = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token3); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'user_id' => $user->id, + 'case_number' => $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + 'request_tokens->[1]' => $token3->id, + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + 'tasks->[1]->id' => $token3->id, + 'tasks->[1]->element_id' => $token3->element_id, + 'tasks->[1]->name' => $token3->element_name, + 'tasks->[1]->process_id' => $token3->process_id, + ]); + + $instance->status = 'COMPLETED'; + $repo->updateStatus($instance); + + $this->assertDatabaseCount('cases_participated', 2); + $this->assertDatabaseHas('cases_participated', [ + 'case_number' => $instance->case_number, + 'case_status' => 'COMPLETED', + 'completed_at' => now(), + ]); + } +} diff --git a/tests/Feature/Cases/CaseStartedTest.php b/tests/Feature/Cases/CaseStartedTest.php new file mode 100644 index 0000000000..87a87067d0 --- /dev/null +++ b/tests/Feature/Cases/CaseStartedTest.php @@ -0,0 +1,393 @@ +create(); + $repoParticipant = Mockery::mock(CaseParticipatedRepository::class); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + } + + public function test_create_multiple_cases() + { + $user = User::factory()->create(); + $repoParticipant = Mockery::mock(CaseParticipatedRepository::class); + $instance1 = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + $instance2 = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance1); + $repo->create($instance2); + + $this->assertDatabaseCount('cases_started', 2); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance1->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance1->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance2->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance2->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + } + + public function test_create_case_started_processes() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + $repoParticipant = Mockery::mock(CaseParticipatedRepository::class); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'processes->[0]->id' => $process->id, + 'processes->[0]->name' => $process->name, + ]); + } + + public function test_create_case_started_requests() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + $repoParticipant = Mockery::mock(CaseParticipatedRepository::class); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'requests->[0]->id' => $instance->id, + 'requests->[0]->name' => $instance->name, + 'requests->[0]->parent_request_id' => $instance->parent_request_id ?? 0, + ]); + } + + public function test_update_case_started_request_tokens() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'request_tokens->[0]' => $token->id, + ]); + } + + public function test_update_case_started_tasks() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'tasks->[1]->id' => $token2->id, + 'tasks->[1]->element_id' => $token2->element_id, + 'tasks->[1]->name' => $token2->element_name, + 'tasks->[1]->process_id' => $token2->process_id, + ]); + } + + public function test_update_case_started_script_tasks() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + 'element_type' => 'scriptTask', + ]); + + $repo->update($instance, $token2); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'tasks->[1]->id' => null, + 'tasks->[1]->element_id' => null, + 'tasks->[1]->name' => null, + 'tasks->[1]->process_id' => null, + ]); + } + + public function test_update_case_started_participants() + { + $process = Process::factory()->create(); + + $user = User::factory()->create(); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'participants->[0]->id' => $user->id, + 'participants->[0]->name' => $user->fullName, + 'participants->[0]->title' => $user->title, + 'participants->[0]->avatar' => $user->avatar, + ]); + + $user2 = User::factory()->create(); + $token2 = ProcessRequestToken::factory()->create([ + 'user_id' => $user2->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token2); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'participants->[1]->id' => $user2->id, + 'participants->[1]->name' => $user2->fullName, + 'participants->[1]->title' => $user2->title, + 'participants->[1]->avatar' => $user2->avatar, + ]); + } + + public function test_update_case_started_status() + { + $process = Process::factory()->create(); + $user = User::factory()->create(); + + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + 'process_id' => $process->id, + ]); + + $repoParticipant = new CaseParticipatedRepository(); + + $repo = new CaseRepository($repoParticipant); + $repo->create($instance); + + $this->assertDatabaseCount('cases_started', 1); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + ]); + + $token = ProcessRequestToken::factory()->create([ + 'user_id' => $user->id, + 'process_request_id' => $instance->id, + ]); + + $repo->update($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'IN_PROGRESS', + 'completed_at' => null, + 'request_tokens->[0]' => $token->id, + ]); + + $instance->status = 'COMPLETED'; + $repo->updateStatus($instance, $token); + $this->assertDatabaseHas('cases_started', [ + 'case_number' => $instance->case_number, + 'user_id' => $user->id, + 'case_title' => 'Case #' . $instance->case_number, + 'case_status' => 'COMPLETED', + 'completed_at' => now(), + 'tasks->[0]->id' => $token->id, + 'tasks->[0]->element_id' => $token->element_id, + 'tasks->[0]->name' => $token->element_name, + 'tasks->[0]->process_id' => $token->process_id, + ]); + } +} diff --git a/tests/Feature/Cases/CasesJobTest.php b/tests/Feature/Cases/CasesJobTest.php new file mode 100644 index 0000000000..1f3783f773 --- /dev/null +++ b/tests/Feature/Cases/CasesJobTest.php @@ -0,0 +1,68 @@ +create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + + CaseStore::dispatch($instance); + + Queue::assertPushed(CaseStore::class, 1); + } + + public function test_handle_case_update_job() + { + Queue::fake(); + + $user = User::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + + $token = ProcessRequestToken::factory()->create([ + 'process_request_id' => $instance->id, + ]); + + CaseUpdate::dispatch($instance, $token); + + Queue::assertPushed(CaseUpdate::class, 1); + } + + public function test_handle_case_update_status_job() + { + Queue::fake(); + + $user = User::factory()->create(); + $instance = ProcessRequest::factory()->create([ + 'user_id' => $user->id, + ]); + + $token = ProcessRequestToken::factory()->create([ + 'process_request_id' => $instance->id, + ]); + + CaseUpdateStatus::dispatch($instance, $token); + + Queue::assertPushed(CaseUpdateStatus::class, 1); + } +} From 1031a8f40f5e888af3ceeec679169d5626863d71 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 25 Sep 2024 09:31:00 -0400 Subject: [PATCH 2/4] fix: handle null case started --- ProcessMaker/Repositories/CaseRepository.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ProcessMaker/Repositories/CaseRepository.php b/ProcessMaker/Repositories/CaseRepository.php index 795036811d..71ba8926c6 100644 --- a/ProcessMaker/Repositories/CaseRepository.php +++ b/ProcessMaker/Repositories/CaseRepository.php @@ -72,6 +72,10 @@ public function update(ExecutionInstanceInterface $instance, TokenInterface $tok try { $case = CaseStarted::where('case_number', $instance->case_number)->first(); + if (is_null($case)) { + return; + } + $case->case_title = $instance->case_title; $case->case_status = $instance->status === 'ACTIVE' ? 'IN_PROGRESS' : $instance->status; From 387cf7d7a8757af477858f715a37c715262ed7c1 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 25 Sep 2024 11:20:36 -0400 Subject: [PATCH 3/4] fix: update cases migrations, fix CaseController test --- .../2024_09_09_181717_create_cases_started_table.php | 2 +- .../2024_09_12_172734_create_cases_participated_table.php | 2 +- tests/Feature/Api/V1_1/CaseControllerTest.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/database/migrations/2024_09_09_181717_create_cases_started_table.php b/database/migrations/2024_09_09_181717_create_cases_started_table.php index 73f6b35db5..e2a380298e 100644 --- a/database/migrations/2024_09_09_181717_create_cases_started_table.php +++ b/database/migrations/2024_09_09_181717_create_cases_started_table.php @@ -28,7 +28,7 @@ public function up(): void $table->timestamps(); $table->text('keywords'); - $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->index(['case_number']); $table->index(['user_id', 'case_status', 'created_at']); diff --git a/database/migrations/2024_09_12_172734_create_cases_participated_table.php b/database/migrations/2024_09_12_172734_create_cases_participated_table.php index d6d9dd00b8..2d0eef7dc3 100644 --- a/database/migrations/2024_09_12_172734_create_cases_participated_table.php +++ b/database/migrations/2024_09_12_172734_create_cases_participated_table.php @@ -28,7 +28,7 @@ public function up(): void $table->timestamps(); $table->text('keywords'); - $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->index(['user_id', 'case_number']); $table->index(['user_id', 'case_status', 'created_at']); diff --git a/tests/Feature/Api/V1_1/CaseControllerTest.php b/tests/Feature/Api/V1_1/CaseControllerTest.php index f002e69643..31333a9316 100644 --- a/tests/Feature/Api/V1_1/CaseControllerTest.php +++ b/tests/Feature/Api/V1_1/CaseControllerTest.php @@ -177,12 +177,12 @@ public function test_get_all_cases_sort_by_completed_at(): void $response = $this->apiCall('GET', route('api.1.1.cases.all_cases', ['sortBy' => 'completed_at:asc'])); $response->assertStatus(200); $response->assertJsonCount($cases->count(), 'data'); - $response->assertJsonPath('data.0.completed_at', $casesSorted->first()->completed_at->format('Y-m-d\TH:i:s.u\Z')); + $response->assertJsonPath('data.0.completed_at', $casesSorted->first()->completed_at->format('Y-m-d H:i:s')); $response = $this->apiCall('GET', route('api.1.1.cases.all_cases', ['sortBy' => 'completed_at:desc'])); $response->assertStatus(200); $response->assertJsonCount($cases->count(), 'data'); - $response->assertJsonPath('data.0.completed_at', $casesSorted->last()->completed_at->format('Y-m-d\TH:i:s.u\Z')); + $response->assertJsonPath('data.0.completed_at', $casesSorted->last()->completed_at->format('Y-m-d H:i:s')); } public function test_get_all_cases_sort_by_invalid_field(): void From ef64c8f13a2e14bac54a95ffc7d5ea6cc978a641 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 25 Sep 2024 13:41:57 -0400 Subject: [PATCH 4/4] fix: handle null case number --- ProcessMaker/Repositories/CaseRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProcessMaker/Repositories/CaseRepository.php b/ProcessMaker/Repositories/CaseRepository.php index 71ba8926c6..e77f14665b 100644 --- a/ProcessMaker/Repositories/CaseRepository.php +++ b/ProcessMaker/Repositories/CaseRepository.php @@ -21,7 +21,7 @@ public function __construct(protected CaseParticipatedRepository $caseParticipat */ public function create(ExecutionInstanceInterface $instance): void { - if ($this->checkIfCaseStartedExist($instance->case_number)) { + if (is_null($instance->case_number) || $this->checkIfCaseStartedExist($instance->case_number)) { return; }