How to test DevStackBox reliably without a formal test framework.
DevStackBox has no automated test suite. All testing is currently manual. This document defines what to test and how - and sets the roadmap for adding automated tests.
Goal: Verify UI components render correctly and respond to user actions.
Recommended tool: Vitest + React Testing Library
Priority components to test:
ServiceCard- renders correct status (running/stopped/unknown)ConfigEditor- loads config text, marks dirty on change, resets on cancelLogViewer- renders log lines, filters by search termPHPVersionSelector- lists versions, shows download state
Setup (when ready):
pnpm add -D vitest @testing-library/react @testing-library/user-event jsdomAdd to vite.config.ts:
test: {
environment: 'jsdom',
globals: true,
setupFiles: './src/test-setup.ts'
}Goal: Verify path resolution, config generation, and process utilities.
Priority functions to test:
get_installation_path()- returns a valid pathis_process_running()- returns true for running processes, false otherwisecreate_default_php_ini()/create_default_apache_config()- generates valid textvalidate_service_name()- allows onlymysql,apache,php
Example test location: src-tauri/src/utils/paths.rs (when module split is done)
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_installation_path_is_not_empty() {
let path = get_installation_path();
assert!(!path.as_os_str().is_empty());
}
}Run with:
cd src-tauri
cargo testRun this checklist on a fresh Windows 11 machine before publishing any release.
- MSI installs to default path without errors
- App appears in Start Menu
- App launches without being blocked by SmartScreen or Defender
- App opens to Dashboard
- Start MySQL: status changes to Running
- MySQL port 3306 is listening after start
- phpMyAdmin opens in default browser
- Stop MySQL: status changes to Stopped
- Port 3306 stops listening after stop
- MySQL re-starts after stop
- Start Apache: status changes to Running
-
http://localhostresponds in browser - Stop Apache: status changes to Stopped
-
http://localhostreturns connection refused after stop - Apache re-starts after stop
- PHP version shows correctly in UI
-
php --versionis callable from the PHP terminal button
- Opens
php.iniwith content visible - Edit content: "Save" button becomes enabled
- Save: file changes are written to disk
- "Backup" creates a file in
config-backups/ - "Restore" loads a backup
- Switch to Hindi: all labels update
- Switch back to English: all labels update
- No untranslated keys visible (no raw
key.pathstrings in UI)
- Dark mode: all pages are readable
- Light mode: all pages are readable
- Theme persists after app restart
- Start Apache when port 80 is already in use: error message shown (not a crash)
- Start MySQL when already running: graceful message
- Open config for a service with no binary: clear error, not a crash
Test both installer formats on a clean machine:
| Scenario | MSI | NSIS |
|---|---|---|
| First install (no previous version) | ||
| Upgrade over existing installation | ||
| Uninstall removes app directory | ||
| Uninstall removes Start Menu entry | ||
| Registry entries cleaned after uninstall |
This is the most common source of bugs. Test on:
| Environment | Path | Expected |
|---|---|---|
| MSI install (default path) | C:\Program Files\DevStackBox |
All binaries found |
| MSI install (custom path) | C:\dsb |
All binaries found |
| Dev mode | C:\xampp\htdocs\DevStackBox |
All binaries found |
| Portable (USB drive) | E:\DevStackBox |
Should degrade gracefully |
Use the DebugPanel (visible in dev builds only) to see what path was resolved.
After every bug fix, add the scenario to the manual test checklist so it never regresses.
Current regressions to watch:
- Version format: never use hyphens/letters in version strings
- Emoji in
.ymlfiles: re-check.github/workflows/after any GitHub Actions edit globals.cssandmain.tsxmust exist: verify before every buildSERVICE_STATUSremoved: never add a global state HashMap for service state
Test on these OS versions before each major release:
| OS | Required |
|---|---|
| Windows 11 (latest) | Must pass |
| Windows 10 22H2 | Should pass |
| Windows 10 older | Best effort |
| Windows Server | Not supported |
- No automated tests exist at all - all manual
- No CI test step after build - GitHub Actions only builds, not tests
- No portable mode tests - app behavior when run from USB is unknown
- No memory/resource leak tests - long-running sessions untested
- No concurrent operation tests - what happens if user starts MySQL twice simultaneously