Skip to main content

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

picture 1

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',

]);