# Testing Guide - Multi-Tenancy with Laravel Valet

## Setup Complete! ✅

Semua error sudah diperbaiki:
- ✅ Enum casting issue di `LbbSelectionController.php`
- ✅ Enum casting issue di `SetLbbContextFromSubdomain.php`
- ✅ HTTPS redirect diubah ke HTTP untuk local development

## Cara Testing dengan Valet

### 1. Link Project ke Valet

```bash
valet link cbtq
```

### 2. Cek Subdomain di Database

```bash
php artisan tinker
```

```php
App\Models\Lbb::all(['id', 'name', 'subdomain']);
```

Contoh output:
```
id  | name         | subdomain
----|--------------|----------
1   | LBB Jakarta  | jakarta
2   | LBB Bandung  | bandung
```

### 3. Akses Aplikasi

**Central Domain:**
- http://cbtq.test

**Subdomain LBB:**
- http://jakarta.cbtq.test
- http://bandung.cbtq.test

## Testing Flow

### Step 1: Login di Central Domain

1. Buka browser: http://cbtq.test
2. Login sebagai user yang ada di database

### Step 2: Pilih LBB

1. Buka: http://cbtq.test/select-lbb
2. Pilih LBB dari list yang muncul
3. Klik LBB yang dipilih

### Step 3: Redirect ke Subdomain

1. Otomatis redirect ke subdomain (misal: http://jakarta.cbtq.test)
2. Session `current_lbb_id` sudah set

### Step 4: Cek Data Isolation

1. Buka http://jakarta.cbtq.test/admin/students
2. Pastikan hanya data LBB Jakarta yang muncul
3. Coba akses data LBB lain (seharusnya tidak muncul)

## Test Checklist

- [ ] Login di central domain (http://cbtq.test)
- [ ] Akses halaman pilih LBB (/select-lbb)
- [ ] List LBB muncul sesuai role
- [ ] Pilih LBB dan redirect ke subdomain
- [ ] Data terfilter otomatis di subdomain
- [ ] Tidak bisa akses subdomain LBB lain (akses denied)
- [ ] Session `current_lbb_id` ter-set dengan benar

## Testing Berbagai Role

### 1. Super Admin

```php
// Seharusnya: Bisa akses SEMUA LBB
// Halaman: http://cbtq.test/select-lbb
// Result: List semua LBB di database
```

### 2. Sales

```php
// Seharusnya: Hanya LBB yang ditugaskan
// Halaman: http://cbtq.test/select-lbb
// Result: Hanya 1 LBB (sesuai user.lbb_id)
```

### 3. Admin

```php
// Seharusnya: Hanya LBB mereka sendiri
// Halaman: http://cbtq.test/select-lbb
// Result: Hanya 1 LBB (sesuai user.lbb_id)
```

### 4. Student (Siswa)

```php
// Seharusnya: Semua LBB di mana mereka terdaftar
// Halaman: http://cbtq.test/select-lbb
// Result: List LBB di mana ada Student record aktif
```

## Verifikasi Data Isolation

### Cara 1: Via Database

```bash
php artisan tinker
```

```php
// Cek data student di subdomain jakarta
$students = App\Models\Student::all();
dd($students);
```

Seharusnya hanya students dengan `lbb_id` LBB Jakarta.

### Cara 2: Via Browser

1. Login dan pilih LBB Jakarta
2. Buka http://jakarta.cbtq.test/admin/students
3. Lihat list students
4. Logout, pilih LBB Bandung
5. Buka http://bandung.cbtq.test/admin/students
6. List students harus berbeda

## Debugging

### Cek Session

Tambahkan di controller untuk debug:

```php
public function index()
{
    dd(session('current_lbb_id'));
    
    // ... code lainnya
}
```

### Cek Log

```bash
tail -f storage/logs/laravel.log
```

### Cek Query

Gunakan Laravel Telescope atau Debugbar untuk lihat query:

```php
// Di .env
TELESCOPE_ENABLED=true

// Install jika belum ada
composer require laravel/telescope --dev
php artisan telescope:install
```

Lalu buka: http://cbtq.test/telescope/queries

## Troubleshooting

### Masalah: Halaman /select-lbb blank/error

**Cek:**
```bash
# View Laravel log
tail -f storage/logs/laravel.log

# Clear cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
```

### Masalah: Subdomain tidak redirect

**Cek:**
1. Apakah subdomain di database benar?
2. Apakah LBB dengan subdomain tersebut ada?
3. Cek network tab di browser dev tools

### Masalah: Data tidak terfilter

**Cek:**
```php
// Di controller
dd(session('current_lbb_id'));

// Harusnya: ID LBB yang dipilih
// Jika null: Session tidak ter-set
```

### Masalah: 404 di subdomain

**Cek:**
```bash
# Restart Valet
valet restart

# Cek link
valet links

# Harusnya: cbtq.test dan subdomain.cbtq.test
```

## Commands Berguna

```bash
# Clear semua cache
php artisan optimize:clear

# Clear config
php artisan config:clear

# Clear route
php artisan route:clear

# Clear view
php artisan view:clear

# Restart Valet
valet restart

# Cek Valet status
valet status

# Lihat semua link Valet
valet links

# Unlink project
valet unlink
valet link cbtq
```

## Production Deployment

Kalau mau deploy ke production:

1. Ubah `redirect()->route()` kembali ke `redirect()->secure()->route()` di:
   - `SetLbbContextFromSubdomain.php`
   - `LbbSelectionController.php`

2. Atau set `APP_URL` dengan HTTPS:
   ```env
   APP_URL=https://domain.com
   ```

3. Pastikan SSL certificate terinstall untuk subdomain

## Next Steps

1. **Link ke Valet**: `valet link cbtq`
2. **Cek subdomain**: `php artisan tinker`
3. **Test flow**: Login → Pilih LBB → Redirect → Cek data
4. **Verify isolation**: Pastikan data ter-filter per LBB
5. **Test semua role**: Super Admin, Admin, Sales, Student

Happy Testing! 🚀