Skip to content

Repository files navigation

Java Application Upgrade and Regression Testing Lab

Maven build and test Java 17 Spring Boot 3.3 Tests: 25 passing

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.

Companion browser automation project

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.

Highlights

  • 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.

Screenshots

Dashboard and filtered queue

Displays live ticket metrics, search, filtering, sorting, pagination, and the current support queue.

SupportLab ticket dashboard

Ticket details and status workflow

Demonstrates viewing ticket details and updating workflow status through the service layer.

Ticket details and status workflow

Validation feedback

Shows server-side validation preventing invalid support tickets from being submitted.

Ticket form validation feedback

Database persistence (H2)

Confirms successful persistence and retrieval of support tickets in the H2 database during testing.

H2 database verification showing persisted support ticket records

Architecture

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
Loading

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.

Technologies

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

Package structure

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

Local setup

Prerequisites:

  • Temurin or another supported JDK 17 distribution
  • Maven 3.9+
  • Git

Verify Maven is using Java 17:

java -version
mvn -version

On 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"

Run the application

mvn spring-boot:run

Open 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.

Build and test

mvn clean test

To build and run the executable artifact:

mvn clean package
java -jar target\java-upgrade-regression-lab-0.0.1-SNAPSHOT.jar

Surefire reports are written to target/surefire-reports.

Testing strategy

  • 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 test on JDK 17 for every push and pull request to main.

See regression-test-plan.md for scope, evidence, entry/exit criteria, and ownership.

Agile delivery model

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.

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.

Azure DevOps readiness

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.

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.

CI/CD options

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.

Work-item traceability

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.

JDK 17-to-21 upgrade

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.

Roadmap

  1. Persistence: PostgreSQL, Flyway migrations, and environment-specific profiles.
  2. Support workflow: assignment, comments, categories, SLA targets, and audit history.
  3. Security: authenticated users, role-based authorization, and CSRF-protected production configuration.
  4. Operations: Actuator health checks, structured logs, correlation IDs, and production error telemetry.
  5. Quality: extend the existing Playwright browser automation with accessibility audits, additional browser coverage, code coverage reporting, and test containers.
  6. Upgrade: controlled Java 17-to-21 migration with recorded regression evidence.

Project workflow

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.

About

Enterprise Java application demonstrating JDK upgrades, regression testing, Spring Boot, SQL, and application support best practices.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages