/ tests / Services / TaskServiceTest.php
TaskServiceTest.php
  1  <?php
  2  
  3  namespace Tests\Services;
  4  
  5  use App\Enums\StatusEnum;
  6  use App\Http\Services\TaskService;
  7  use App\Models\Notification;
  8  use App\Models\Stage;
  9  use App\Models\Task;
 10  use App\Notifications\TaskAssigned;
 11  use Illuminate\Support\Facades\DB;
 12  use Tests\TestCase;
 13  
 14  class TaskServiceTest extends TestCase
 15  {
 16      public function testSearchInStage()
 17      {
 18          $query = TaskService::searchInStage(1, '', 'id', 'asc', []);
 19  
 20          $this->assertInstanceOf(\Illuminate\Database\Eloquent\Builder::class, $query);
 21      }
 22  
 23      public function testFind()
 24      {
 25          $task = Task::factory()->create();
 26          $this->assertInstanceOf(Task::class, TaskService::find($task->id));
 27      }
 28  
 29      public function testSearchTasks()
 30      {
 31          $query = TaskService::searchTasks('', 'id', 'asc', []);
 32  
 33          $this->assertInstanceOf(\Illuminate\Database\Eloquent\Builder::class, $query);
 34      }
 35  
 36      /**
 37       * @throws \Throwable
 38       */
 39      public function testCreate()
 40      {
 41          $taskData = $this->exampleDataArray();
 42  
 43          $created = TaskService::create($taskData['task'], $taskData['relation']);
 44          $this->assertTrue($created);
 45      }
 46  
 47      /**
 48       * @throws \Throwable
 49       */
 50      public function testUpdate()
 51      {
 52          $task = Task::factory()->create();
 53  
 54          $newData = $this->exampleDataArray();
 55  
 56          $updated = TaskService::update($newData, $task->id);
 57  
 58          $this->assertTrue($updated);
 59      }
 60  
 61      /**
 62       * @throws \Throwable
 63       */
 64      public function testRemove()
 65      {
 66          $task = Task::factory()->create();
 67          TaskService::remove($task->id);
 68          $this->assertSoftDeleted($task->getTable(), ['id' => $task->id]);
 69      }
 70  
 71      /**
 72       * @throws \Throwable
 73       */
 74      public function testChangeStatus()
 75      {
 76          $stage=Stage::factory()->create();
 77          $task = Task::factory()->create(
 78              ['task_status_id' => StatusEnum::pending()->value]
 79          );
 80  
 81          $task->stage_id=$stage->id;
 82          $task->save();
 83  
 84          $this->assertTrue(TaskService::changeStatus($task->id));
 85      }
 86  
 87      public function testGetStatusMessage()
 88      {
 89          $task = Task::factory()->create();
 90          $expectedMessage = __('tasks.task.cards.actions.statuses.in_process');
 91          $statusMessage = TaskService::getStatusMessage($task->id);
 92          $this->assertEquals($expectedMessage, $statusMessage);
 93      }
 94  
 95      public function testIsCompleted()
 96      {
 97          $task = Task::factory()->create(['task_status_id' => StatusEnum::finished()->value]);
 98          $this->assertTrue(TaskService::isCompleted($task->id));
 99      }
100  
101      private function exampleDataArray() : array
102      {
103          return [
104              'task' => [
105                  'title' => 'New title',
106                  'description' => 'New description',
107                  'task_status_id' => StatusEnum::pending()->value,
108                  'start_date' => '2021-01-01',
109                  'end_date' => '2021-01-01',
110              ],
111              'relation' => [
112                  'user_id' => $this->getAdminUser()->id
113              ]
114          ];
115      }
116  }