# Frontend Testing Guide

## Prerequisites

### 1. Install Node.js

The frontend requires Node.js 18+ and npm. Install it using one of these methods:

**Option 1: Use the install script (Recommended)**
```bash
sudo ./scripts/install-requirements.sh
```

**Option 2: Install Node.js manually**
```bash
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
```

**Verify installation:**
```bash
node --version  # Should show v20.x or higher
npm --version   # Should show 10.x or higher
```

### 2. Start Backend API

The frontend needs the backend API running:

```bash
cd backend
export CALYPSO_DB_PASSWORD="calypso123"
export CALYPSO_JWT_SECRET="test-jwt-secret-key-minimum-32-characters-long"
go run ./cmd/calypso-api -config config.yaml.example
```

The backend should be running on `http://localhost:8080`

---

## Testing Steps

### Step 1: Install Frontend Dependencies

```bash
cd frontend
npm install
```

This will install all required packages (React, Vite, TypeScript, etc.)

### Step 2: Verify Build

Test that the project compiles without errors:

```bash
npm run build
```

This should complete successfully and create a `dist/` directory.

### Step 3: Start Development Server

```bash
npm run dev
```

The frontend will start on `http://localhost:3000`

### Step 4: Test in Browser

1. **Open Browser**: Navigate to `http://localhost:3000`

2. **Login Page**:
   - Should see the login form
   - Try logging in with test credentials:
     - Username: `admin`
     - Password: `admin123` (or whatever password you set)

3. **Dashboard**:
   - After login, should see the dashboard
   - Check system health status
   - Verify overview cards show data
   - Check quick actions work

4. **Storage Page**:
   - Navigate to Storage from sidebar
   - Should see repositories, disks, and volume groups
   - Verify data displays correctly
   - Check capacity bars render

5. **Alerts Page**:
   - Navigate to Alerts from sidebar
   - Should see alert list
   - Test filtering (All / Unacknowledged)
   - Try acknowledge/resolve actions

---

## Automated Testing Script

Use the provided test script:

```bash
./scripts/test-frontend.sh
```

This script will:
- ✅ Check Node.js installation
- ✅ Verify backend API is running
- ✅ Install dependencies (if needed)
- ✅ Test build
- ✅ Provide instructions for starting dev server

---

## Expected Behavior

### Login Flow
1. User enters credentials
2. On success: Redirects to dashboard, token stored
3. On failure: Shows error message

### Dashboard
- System health indicator (green/yellow/red)
- Overview cards with real data:
  - Storage repositories count
  - Active alerts count
  - iSCSI targets count
  - Running tasks count
- Quick action buttons
- Recent alerts preview

### Storage Page
- Repository list with:
  - Name and description
  - Capacity usage bars
  - Status indicators
- Physical disks list
- Volume groups list

### Alerts Page
- Alert cards with severity colors
- Filter buttons (All / Unacknowledged)
- Acknowledge and Resolve buttons
- Relative time display

---

## Troubleshooting

### Issue: "Node.js not found"
**Solution**: Install Node.js using the install script or manually (see Prerequisites)

### Issue: "Cannot connect to API"
**Solution**: 
- Ensure backend is running on `http://localhost:8080`
- Check backend logs for errors
- Verify database is running and accessible

### Issue: "401 Unauthorized" errors
**Solution**:
- Check if user exists in database
- Verify password is correct (may need to update with Argon2id hash)
- Check JWT secret is set correctly

### Issue: "Build fails with TypeScript errors"
**Solution**:
- Check TypeScript version: `npm list typescript`
- Verify all imports are correct
- Check for missing dependencies

### Issue: "Blank page after login"
**Solution**:
- Check browser console for errors
- Verify API responses are correct
- Check network tab for failed requests

---

## Manual Testing Checklist

- [ ] Login page displays correctly
- [ ] Login with valid credentials works
- [ ] Login with invalid credentials shows error
- [ ] Dashboard loads after login
- [ ] System health status displays
- [ ] Overview cards show data
- [ ] Navigation sidebar works
- [ ] Storage page displays repositories
- [ ] Storage page displays disks
- [ ] Storage page displays volume groups
- [ ] Alerts page displays alerts
- [ ] Alert filtering works
- [ ] Alert acknowledge works
- [ ] Alert resolve works
- [ ] Logout works
- [ ] Protected routes redirect to login when not authenticated

---

## Next Steps After Testing

Once basic functionality is verified:
1. Continue building remaining pages (Tape Libraries, iSCSI, Tasks, System, IAM)
2. Add WebSocket integration for real-time updates
3. Enhance UI with more components
4. Add error boundaries
5. Implement loading states
6. Add toast notifications

---

## Quick Test Commands

```bash
# Check Node.js
node --version && npm --version

# Install dependencies
cd frontend && npm install

# Test build
npm run build

# Start dev server
npm run dev

# In another terminal, check backend
curl http://localhost:8080/api/v1/health
```

---

## Notes

- The frontend dev server proxies API requests to `http://localhost:8080`
- WebSocket connections will use `ws://localhost:8080/ws`
- Authentication tokens are stored in localStorage
- The frontend will automatically redirect to login on 401 errors

