diff --git a/ProcessMaker/Repositories/CaseRepository.php b/ProcessMaker/Repositories/CaseRepository.php index 3bdd35d65e..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; } @@ -72,15 +72,19 @@ 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; - $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/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 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); + } +}