Giant Update
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\BillingProfile;
|
||||
use App\Models\NasMikrotik;
|
||||
use App\Models\NasPackageProfile;
|
||||
use App\Models\Tenant;
|
||||
use App\Models\User;
|
||||
use App\Models\WilayahDesa;
|
||||
use App\Models\WilayahKabupaten;
|
||||
use App\Models\WilayahKecamatan;
|
||||
use App\Models\WilayahProvinsi;
|
||||
use App\Services\Customer\CustomerService;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CustomerWorkflowTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_customer_moves_through_order_active_inactive_and_trash_lifecycle(): void
|
||||
{
|
||||
$tenant = Tenant::create(['tenant_code' => 'CUST-A', 'tenant_name' => 'Customer Tenant']);
|
||||
$owner = User::factory()->create(['access_level' => 'tenant_owner']);
|
||||
$owner->userTenants()->create(['tenant_id' => $tenant->id, 'is_default' => true]);
|
||||
$provinsi = WilayahProvinsi::create(['kode' => '01', 'nama' => 'Provinsi']);
|
||||
$kabupaten = WilayahKabupaten::create(['provinsi_id' => $provinsi->id, 'kode' => '0101', 'nama' => 'Kabupaten']);
|
||||
$kecamatan = WilayahKecamatan::create(['kabupaten_id' => $kabupaten->id, 'kode' => '010101', 'nama' => 'Kecamatan']);
|
||||
$desa = WilayahDesa::create(['kecamatan_id' => $kecamatan->id, 'kode' => '01010101', 'nama' => 'Desa']);
|
||||
$profile = NasPackageProfile::create([
|
||||
'tenant_id' => $tenant->id,
|
||||
'name' => '10 Mbps',
|
||||
'service_type' => 'ppp',
|
||||
]);
|
||||
$nas = NasMikrotik::create([
|
||||
'tenant_id' => $tenant->id,
|
||||
'name' => 'Router Customer',
|
||||
'connection_type' => 'api',
|
||||
'host' => '10.0.0.1',
|
||||
]);
|
||||
$billingProfile = BillingProfile::create([
|
||||
'tenant_id' => $tenant->id,
|
||||
'name' => 'Tagihan Customer',
|
||||
'invoice_day' => 1,
|
||||
'send_day' => 2,
|
||||
'warning_day' => 10,
|
||||
'isolation_day' => 15,
|
||||
'tax_type' => 'non_tax',
|
||||
]);
|
||||
$service = app(CustomerService::class);
|
||||
|
||||
$customer = $service->create([
|
||||
'name' => 'Customer Satu',
|
||||
'installation_address' => 'Jalan Pengujian',
|
||||
'provinsi_id' => $provinsi->id,
|
||||
'kabupaten_id' => $kabupaten->id,
|
||||
'kecamatan_id' => $kecamatan->id,
|
||||
'desa_id' => $desa->id,
|
||||
], $owner, $tenant->id);
|
||||
|
||||
$this->assertSame('order', $customer->status);
|
||||
|
||||
$customer = $service->activate($customer, [
|
||||
'package_profile_id' => $profile->id,
|
||||
'nas_mikrotik_id' => $nas->id,
|
||||
'billing_profile_id' => $billingProfile->id,
|
||||
]);
|
||||
$this->assertSame('active', $customer->status);
|
||||
$this->assertNotNull($customer->activated_at);
|
||||
|
||||
$customer = $service->deactivate($customer);
|
||||
$this->assertSame('inactive', $customer->status);
|
||||
|
||||
$service->trash($customer);
|
||||
$this->assertNotNull($customer->fresh()->deleted_at);
|
||||
|
||||
$restored = $service->restore($service->find($customer->id, true));
|
||||
$this->assertNull($restored->deleted_at);
|
||||
$this->assertSame('inactive', $restored->status);
|
||||
}
|
||||
|
||||
public function test_customer_list_is_isolated_by_active_tenant(): void
|
||||
{
|
||||
$tenantA = Tenant::create(['tenant_code' => 'CUST-LA', 'tenant_name' => 'Tenant A']);
|
||||
$tenantB = Tenant::create(['tenant_code' => 'CUST-LB', 'tenant_name' => 'Tenant B']);
|
||||
$owner = User::factory()->create(['access_level' => 'tenant_owner']);
|
||||
$owner->userTenants()->create(['tenant_id' => $tenantA->id, 'is_default' => true]);
|
||||
$service = app(CustomerService::class);
|
||||
$service->create(['name' => 'Customer A'], $owner, $tenantA->id);
|
||||
$master = User::factory()->create(['is_master' => true, 'access_level' => 'master_admin']);
|
||||
$service->create(['tenant_id' => $tenantB->id, 'name' => 'Customer B'], $master, null);
|
||||
|
||||
$result = $service->list('orders', ['per_page' => 100], $owner, $tenantA->id);
|
||||
|
||||
$this->assertSame(['Customer A'], $result->getCollection()->pluck('name')->all());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user