# Feature 003: Manual Testing Checklist

> **Status:** Reference  
> **Last reviewed:** 2026-04-30  
> **Use for:** Manual verification scenarios for Spec 003 if that surface needs targeted re-checks  
> **Do not use for:** Proof that manual testing was executed or passed in the current branch

## Prerequisites

1. **Start the application:**
   ```bash
   ./vendor/bin/sail up -d
   ./vendor/bin/sail artisan serve
   ```

2. **Access Filament admin:** http://localhost/admin

3. **Create test tenant with Settings Catalog policy** (or use existing)

---

## T023: Verify JSON Tab Still Works

**Task:** Ensure JSON tab navigation and functionality from Feature 002 is intact

### Steps:
1. Navigate to `/admin/policies`
2. Click on a **Settings Catalog** policy
3. Verify **two tabs** are visible: "Settings" and "JSON"
4. Click "JSON" tab
5. Verify JSON viewer renders the policy snapshot
6. Click copy button next to JSON content
7. Paste into text editor - should contain valid JSON

### ✅ Success Criteria:
- [ ] Both tabs render
- [ ] Tab switching works
- [ ] JSON content displays correctly
- [ ] Copy button functional
- [ ] No JavaScript errors in browser console

### ❌ Failure Handling:
If JSON tab is broken, check:
- Browser console for errors
- `pepperfm/filament-json` package installation
- PolicyResource.php tabs configuration

---

## T024: Verify Fallback for Uncached Definitions

**Task:** Check UI shows prettified labels when definitions are not cached

### Setup:
Create a policy with an unknown definition ID:
```php
php artisan tinker
$policy = Policy::factory()->create([
    'policy_type' => 'settingsCatalog',
    'display_name' => 'Fallback Test Policy',
]);

PolicyVersion::create([
    'policy_id' => $policy->id,
    'tenant_id' => $policy->tenant_id,
    'version_number' => 1,
    'policy_type' => 'settingsCatalog',
    'platform' => 'windows',
    'snapshot' => [
        '@odata.type' => '#microsoft.graph.deviceManagementConfigurationPolicy',
        'settings' => [[
            'settingInstance' => [
                'settingDefinitionId' => 'device_vendor_msft_uncached_test_setting',
                'simpleSettingValue' => ['value' => 123]
            ]
        ]]
    ],
    'created_by' => 'test@example.com',
    'captured_at' => now(),
]);
```

### Steps:
1. Navigate to the created policy view
2. Open Settings tab
3. Look for setting display

### ✅ Success Criteria:
- [ ] Page renders without crash
- [ ] Setting shows prettified label: "Device Vendor Msft Uncached Test Setting"
- [ ] No error messages displayed
- [ ] Value (123) displays correctly
- [ ] No JavaScript errors

### ❌ Failure Handling:
- If crash occurs, check SettingsCatalogDefinitionResolver fallback logic
- If raw ID shows, check PolicyNormalizer prettifyDefinitionId() method

---

## T025: JSON Viewer Scope

**Task:** Ensure JSON viewer only renders on Policy View page

### Steps:
1. Navigate to `/admin/policies` (list view)
2. **Verify:** No JSON viewer appears on list page
3. Navigate to `/admin/tenants`
4. **Verify:** No JSON viewer on tenant list
5. Click on a tenant detail page
6. **Verify:** No JSON viewer on tenant detail
7. Navigate back to **Policy View** page
8. **Verify:** JSON viewer present ONLY here

### ✅ Success Criteria:
- [ ] JSON viewer ONLY on Policy View page
- [ ] Not globally injected into all Filament pages
- [ ] No console errors on other pages

---

## T034: Display Names vs Raw IDs

**Task:** Verify Settings tab shows human-readable names, not definition IDs

### Steps:
1. Warm cache for a policy:
   ```bash
   ./vendor/bin/sail artisan app:warm-settings-catalog-definitions
   ```

2. Navigate to Settings Catalog policy view
3. Open Settings tab
4. Inspect setting labels

### ✅ Success Criteria:
- [ ] Labels show display names: "Allow Real-time Monitoring"
- [ ] Raw definition IDs NOT visible: `device_vendor_msft_policy_config_defender_allowrealtimemonitoring`
- [ ] Help text appears below labels (if available)
- [ ] Category grouping visible (e.g., "Windows Defender Antivirus")

---

## T035: Value Formatting

**Task:** Verify setting values are formatted appropriately

### Test Cases:

#### Boolean Values:
- [ ] `true` shows as "Enabled" or badge
- [ ] `false` shows as "Disabled" or badge

#### Integer Values:
- [ ] Large numbers formatted: `12345` → `12,345`
- [ ] Small numbers display as-is: `5` → `5`

#### String Values:
- [ ] Short strings display fully
- [ ] Long strings truncated with "..." (hover for full text)

#### Choice/Enum Values:
- [ ] Shows human-readable label (if available)
- [ ] Falls back to choice value if label missing

### ✅ Success Criteria:
All value types render clearly and are visually distinct

---

## T036: Search/Filter Functionality

**Task:** Test client-side search filtering

### Steps:
1. Navigate to Settings Catalog policy with **multiple settings** (10+)
2. Locate search box above settings list
3. Type "defender" in search box
4. **Verify:** Only settings with "defender" in name/description remain visible
5. Clear search box
6. **Verify:** All settings reappear
7. Test case-insensitive search: "DEFENDER"
8. **Verify:** Still filters correctly

### ✅ Success Criteria:
- [ ] Search box present
- [ ] Instant filtering (no page reload)
- [ ] Case-insensitive matching
- [ ] Clear/reset works
- [ ] No JavaScript errors during search

---

## T042: Full QA Walkthrough

### Complete User Journey:

1. **Login** to Filament admin
2. **Navigate** to Policies list
3. **Select** Settings Catalog policy
4. **Verify** Settings tab active by default
5. **Scroll** through grouped settings
6. **Expand/Collapse** accordion groups
7. **Hover** over truncated values (tooltips)
8. **Click** copy buttons
9. **Use** search filter
10. **Switch** to JSON tab
11. **Switch** back to Settings tab
12. **Test** dark mode toggle (if applicable)

### ✅ Success Criteria:
- [ ] Smooth navigation throughout
- [ ] No visual glitches
- [ ] No console errors
- [ ] Responsive layout on different screen sizes
- [ ] Accessible keyboard navigation

---

## Sign-off

**Tester:** _________________  
**Date:** _________________  
**Result:** ☐ PASS  ☐ FAIL (document issues below)

### Issues Found:
_____________________________________________
_____________________________________________
_____________________________________________

### Recommendations:
_____________________________________________
_____________________________________________
_____________________________________________
