TIF_Nganjuk_E41220879/tests/Feature/DashboardTest.php

106 lines
3.5 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Kategori;
use App\Models\ObatMasuk;
use App\Models\Satuan;
use App\Models\User;
use Tests\DatabaseTestCase;
class DashboardTest extends DatabaseTestCase
{
private User $user;
protected function setUp(): void
{
parent::setUp();
$this->user = User::factory()->create(['role' => 'apoteker']);
$this->actingAs($this->user);
}
// ─────────────────────────────────────────
// index
// ─────────────────────────────────────────
public function test_dashboard_returns_200_for_authenticated_user(): void
{
$response = $this->get(route('dashboard'));
$response->assertStatus(200);
}
public function test_dashboard_redirects_guest_to_login(): void
{
auth()->logout();
$response = $this->get(route('dashboard'));
$response->assertRedirect(route('login'));
}
public function test_dashboard_passes_required_variables_to_view(): void
{
$response = $this->get(route('dashboard'));
$response->assertViewHas('totalJenisObat');
$response->assertViewHas('obatMasukBulanIni');
$response->assertViewHas('obatKeluarBulanIni');
$response->assertViewHas('kadaluarsaDekat');
$response->assertViewHas('labels');
$response->assertViewHas('obatMasukData');
$response->assertViewHas('obatKeluarData');
$response->assertViewHas('monthOptions');
$response->assertViewHas('filterMonth');
$response->assertViewHas('filterYear');
}
public function test_dashboard_total_jenis_obat_counts_correctly(): void
{
$kategori = Kategori::create(['nama' => 'Antibiotik']);
$satuan = Satuan::create(['nama' => 'Tablet']);
ObatMasuk::create([
'nama_obat' => 'Obat A',
'kategori_id' => $kategori->id,
'satuan_id' => $satuan->id,
'kode_batch' => 'B1',
'stok' => 10,
'tanggal_penerimaan' => now()->toDateString(),
'tanggal_kadaluarsa' => now()->addYear()->toDateString(),
'user_id' => $this->user->id,
]);
ObatMasuk::create([
'nama_obat' => 'Obat B',
'kategori_id' => $kategori->id,
'satuan_id' => $satuan->id,
'kode_batch' => 'B2',
'stok' => 20,
'tanggal_penerimaan' => now()->toDateString(),
'tanggal_kadaluarsa' => now()->addYear()->toDateString(),
'user_id' => $this->user->id,
]);
$response = $this->get(route('dashboard'));
$response->assertViewHas('totalJenisObat', 2);
}
public function test_dashboard_month_options_has_12_entries(): void
{
$response = $this->get(route('dashboard'));
$monthOptions = $response->viewData('monthOptions');
$this->assertCount(12, $monthOptions);
}
public function test_dashboard_filter_by_chart_month_and_year(): void
{
$response = $this->get(route('dashboard', [
'chart_month' => 1,
'chart_year' => 2025,
]));
$response->assertStatus(200);
$response->assertViewHas('filterMonth', '1');
$response->assertViewHas('filterYear', '2025');
}
}