Testing Api
Untuk melakuakn testing api kita akan menggunakan apicall dengan cara integration testing dimana kita akan membuat feature test yang berguna untuk mempermudah kita untuk malakukan testing
bisa menggunakan command php artisan make:test CutiBpmnTest dimana akank membuatkan test bernama CutiBpmnTest
Untuk mempermudah kita bisa membuat base testcase untuk bpmn ini dengan isi seperti dibawah ini file tersebut bisa dibuka di file vendor/alurkerja-laravolt/crud/src/Tests/BaseLowcodeBpmnTest.php dan bisa langsung diextend dari sana
<?php
namespace Tests\Feature;
use App\Models\Bpmn\Cuti;
use App\Models\User;
use Carbon\Carbon;
use Database\Factories\UserFactory;
use Faker\Provider\Lorem;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\DB;
use Laravolt\Camunda\Http\TaskClient;
use Tests\TestCase;
class CutiBpmnTest extends TestCase
{
protected $processDefinitionKey = "Cuti";
protected $baseurl = "/api/bpmn/cuti";
use WithFaker;
/**
* A basic feature test example.
*/
// Your code here
public function createData($data)
{
$url = $this->baseurl;
$response = $this
->post($url, $data);
return $response->json("data.id");
}
public function submitUserTask($busniessKey, $id, $userTask, $data)
{
$url = $this->baseurl . '/' . $userTask . '/' . $busniessKey . '/task/' . $id . "/submit";
$response = $this
->post($url, $data);
return $response;
}
public function createProcessInstance($id, $variables)
{
$url = $this->baseurl . '/' . $id . "/start";
$data = $variables;
// dd($url);
$response = $this
->post($url, $data);
return $response->json("data.process_instance_id");
}
}
Contoh yang diextend dengan BaseLowcodeBpmnTest
class CutiBpmnTest extends BaseLowcodeBpmnTest
{
protected $processDefinitionKey = "Cuti";
protected $baseurl = "/api/bpmn/cuti";
use WithFaker;
}
Untuk Test kita akank melakukan testing dengan 2 flow
Testing Buat > Konfirmasi
public function testTerimaBpmn(){
$request = [
'user_id' => User::factory()->create()->first()->id,
'mulai_cuti' => Carbon::now()->add("day", 10)->format("Y-m-d"),
'selesai_cuti' => Carbon::now()->add("day", 12)->format("Y-m-d"),
'alasan_cuti' => Lorem::text(100)
];
$id = Cuti::create($request)->id;
$prc = $this->createProcessInstance($id, []);
$tasks = TaskClient::getByProcessInstanceId($prc);
$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-konfirmasi-cuti", [
'decision' => 'terima',
'keterangan_konfirmasi' => 'sudah oke lanjut aja',
]);
}
Dalam test diatas kita akan membuat instance cuti dengan code
$request = [
'user_id' => User::factory()->create()->first()->id,
'mulai_cuti' => Carbon::now()->add("day", 10)->format("Y-m-d"),
'selesai_cuti' => Carbon::now()->add("day", 12)->format("Y-m-d"),
'alasan_cuti' => Lorem::text(100)
];
$id = Cuti::create($request)->id;Lalu Buat Process Instance Dengan id yang dibuat
$tasks = TaskClient::getByProcessInstanceId($prc);Setelah itu kita submit user task dengan decision
terima$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-konfirmasi-cuti", [
'decision' => 'terima',
'keterangan_konfirmasi' => 'sudah oke lanjut aja',
]);
Testing Buat > Konfirmasi
public function testTolakBpmn()
{
$request = [
'user_id' => User::factory()->create()->first()->id,
'mulai_cuti' => Carbon::now()->add("day", 10)->format("Y-m-d"),
'selesai_cuti' => Carbon::now()->add("day", 12)->format("Y-m-d"),
'alasan_cuti' => Lorem::text(100)
];
$id = Cuti::create($request)->id;
$prc = $this->createProcessInstance($id, []);
$tasks = TaskClient::getByProcessInstanceId($prc);
$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-konfirmasi-cuti", [
'decision' => 'revisi',
'keterangan_konfirmasi' => 'ga oke direvisi dulu',
]);
$tasks = TaskClient::getByProcessInstanceId($prc);
$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-revisi-cuti", [
'keterangan_revisi' => 'ga oke direvisi dulu',
]);
$tasks = TaskClient::getByProcessInstanceId($prc);
$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-konfirmasi-cuti", [
'decision' => 'terima',
'keterangan_konfirmasi' => 'sudah oke lanjut aja',
]);
}
Sama dengan yang diatas namun decision dibuat revisi terlebih dahulu lalu kita lakukan revisi dengan code
$tasks = TaskClient::getByProcessInstanceId($prc);
$taskid = $tasks[0]->id;
$response = $this->submitUserTask($id, $taskid, "cuti-revisi-cuti", [
'keterangan_revisi' => 'ga oke direvisi dulu',
]);