SupportLab is a server-rendered IT support ticket system and a controlled environment for demonstrating application maintenance, SQL troubleshooting, regression testing, incident documentation, CI, and a future Java runtime upgrade. It is designed around the day-to-day responsibilities of an entry-level Applications Support Specialist rather than as a generic CRUD demo.
The current supported runtime is Java 17. The JDK 21 migration is documented but intentionally not implemented.
End-to-end browser regression coverage is implemented in the separate automated-regression-testing-suite repository. That project runs 42 Playwright test scenarios against this application using TypeScript, the Page Object Model, reusable fixtures, test-data factories, HTML and Allure reporting, failure screenshots/video/traces, and a two-repository GitHub Actions workflow.
- Operational dashboard for total, open, resolved, and critical ticket counts.
- Case-insensitive title search plus exact priority and status filters.
- Newest, oldest, severity-priority, and workflow-status sorting.
- Server-side pagination at 10 tickets per page with filter preservation.
- Ticket creation, detail review, lifecycle status updates, and audit timestamps.
- Layered validation, friendly 400/404/500 pages, and success/error toast feedback.
- Responsive, accessible server-rendered interface with no front-end framework dependency.
- In-memory H2 database with startup seed data and a browser troubleshooting console.
- Unit and persistence-backed MVC integration tests executed by GitHub Actions.
- A separate Playwright regression suite covering dashboard, filtering, creation, validation, workflow, error handling, and responsive behavior.
Displays live ticket metrics, search, filtering, sorting, pagination, and the current support queue.
Demonstrates viewing ticket details and updating workflow status through the service layer.
Shows server-side validation preventing invalid support tickets from being submitted.
Confirms successful persistence and retrieval of support tickets in the H2 database during testing.
flowchart LR
Browser[Browser / Thymeleaf UI] --> Controller[MVC controllers]
Controller --> Service[SupportTicketService]
Service --> Repository[Spring Data JPA repository]
Repository --> H2[(H2 database)]
Config[Sample data configuration] --> Repository
Advice[Global exception handler] -. error views .-> Browser
Tests[JUnit 5 + MockMvc] -. verifies .-> Controller
Actions[GitHub Actions] -. runs Maven tests .-> Tests
Controllers bind HTTP input and select views. The service owns ticket operations, filter composition, dashboard metrics, sorting rules, and pagination policy. The repository supplies JPA persistence and specifications. JPA lifecycle callbacks populate createdDate and refresh updatedDate when records change.
| Area | Technology |
|---|---|
| Runtime | Java 17 |
| Framework | Spring Boot 3.3, Spring MVC |
| View layer | Thymeleaf, HTML5, responsive CSS |
| Persistence | Spring Data JPA, Hibernate, H2 |
| Validation | Jakarta Bean Validation |
| Testing | JUnit 5, AssertJ, Mockito, MockMvc |
| Build and CI | Maven, GitHub Actions |
| Version control | Git and GitHub |
com.portfolio.supportlab
├── configuration startup sample-data configuration
├── controller routes, form binding, and global exception handling
├── model JPA ticket entity, enums, and dashboard metric record
├── repository Spring Data repository and specification support
└── service business operations, search, sorting, and pagination
Supporting directories:
.github/workflows/ continuous integration
.azuredevops/ reusable Azure Boards/Test Plans/PR templates
azure-pipelines.yml Azure Pipelines readiness definition
docs/ project and architecture documentation
test-documentation/ regression plan, manual cases, and defect register
upgrade-playbook/ Java baseline and JDK 21 migration controls
src/main/resources/ configuration, templates, and CSS
src/test/ unit and integration tests
Prerequisites:
- Temurin or another supported JDK 17 distribution
- Maven 3.9+
- Git
Verify Maven is using Java 17:
java -version
mvn -versionOn this Windows environment, select the installed JDK explicitly if necessary:
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-17.0.20.8-hotspot"
$env:Path = "$env:JAVA_HOME\bin;$env:Path"mvn spring-boot:runOpen http://localhost:8080/tickets. Stop the server with Ctrl+C.
The H2 console is available for local troubleshooting at http://localhost:8080/h2-console:
JDBC URL: jdbc:h2:mem:supportlab
Username: sa
Password: [blank]
Useful diagnostic query:
SELECT * FROM SUPPORT_TICKET ORDER BY ID;The database is in memory and resets on restart. Local defaults can be overridden with SERVER_PORT, DB_URL, DB_USERNAME, DB_PASSWORD, H2_CONSOLE_ENABLED, and H2_CONSOLE_PATH. Set H2_CONSOLE_ENABLED=false outside local development.
mvn clean testTo build and run the executable artifact:
mvn clean package
java -jar target\java-upgrade-regression-lab-0.0.1-SNAPSHOT.jarSurefire reports are written to target/surefire-reports.
- Service unit tests: mock persistence to verify ticket creation, status changes, missing records, dashboard aggregation, and pagination policy.
- MVC integration tests: load the Spring context with MockMvc and H2 to verify rendered endpoints, combined filtering, operational sorting, pagination, validation boundaries, persistence, timestamps, redirects, and error responses.
- End-to-end browser regression: the companion Playwright automation repository exercises 42 traceable UI scenarios and starts this application as part of its GitHub Actions workflow.
- Manual regression: exercise browser usability, responsive behavior, toast feedback, H2 inspection, and end-to-end workflows using the documented test cases.
- CI regression: run
mvn teston JDK 17 for every push and pull request tomain.
See regression-test-plan.md for scope, evidence, entry/exit criteria, and ownership.
The repository includes a portable Agile delivery pack designed for a two-week sprint cadence and a small Product Owner, Developer, QA, and Application Support team. It defines a prioritized backlog, work-item acceptance criteria, estimates and dependencies, a historical Sprint 1 plan/review/retrospective, a shared Definition of Done, working agreement, and release roadmap.
- Product backlog
- Sprint 1 plan, review, and retrospective
- Definition of Done
- Working agreement
- Release plan
Completed stories are marked Done. Browser automation is now implemented in the companion Playwright regression suite; audit history, CSV export, production-profile hardening, and execution of the JDK 21 upgrade remain explicitly planned or in the backlog.
SupportLab is documented for potential management through Azure Boards, Azure Repos or an external GitHub connection, Azure Pipelines, Azure Test Plans, and Pipeline Artifacts. The guidance covers project setup, board states, work-item hierarchy, test-suite mapping, source-control choices, evidence, and branch policies.
- Azure DevOps project setup
- Boards workflow
- Work-item mapping
- Test Plan mapping
- Pipeline guide
- Requirements traceability matrix
- Azure DevOps templates
This repository does not claim to be connected to a live Azure DevOps organization or project. The files are implementation-ready governance and configuration examples.
GitHub Actions is the currently active CI workflow and runs the Maven test suite on JDK 17 for pushes and pull requests to main.
The root azure-pipelines.yml is provided to demonstrate Azure Pipelines readiness. It selects JDK 17 on a Microsoft-hosted agent, caches Maven dependencies, runs mvn clean test, publishes JUnit results, packages the application, and publishes the executable JAR as a pipeline artifact. It has not been connected to or run in a live Azure DevOps project.
Deployment is intentionally outside the current pipeline. A deployment stage requires persistent storage, secure profiles/secrets, health checks, and rollback design.
Portable IDs such as US-101, TASK-110, and MT-002 connect backlog requirements to source areas, unit/integration tests, manual Test Cases, and implementation status. The traceability matrix can be extended with Azure DevOps numeric IDs after real work items are created. The manual regression cases include preconditions, steps, expected/actual result, outcome, and evidence fields suitable for Azure Test Plans migration.
Java 17 is the approved baseline. A later milestone will capture baseline evidence, update Maven and CI in a focused branch, run the complete automated and manual regression pack on JDK 21, compare results, document defects, and preserve a tested rollback path. See jdk-17-to-21-plan.md.
- Persistence: PostgreSQL, Flyway migrations, and environment-specific profiles.
- Support workflow: assignment, comments, categories, SLA targets, and audit history.
- Security: authenticated users, role-based authorization, and CSRF-protected production configuration.
- Operations: Actuator health checks, structured logs, correlation IDs, and production error telemetry.
- Quality: extend the existing Playwright browser automation with accessibility audits, additional browser coverage, code coverage reporting, and test containers.
- Upgrade: controlled Java 17-to-21 migration with recorded regression evidence.
Treat features, defects, test improvements, and upgrades as small tracked issues with acceptance criteria. Use focused branches and pull requests, attach test evidence, update the defect register during triage and retest, and require a green CI result before merging.



