78 lines
3.4 KiB
Markdown
78 lines
3.4 KiB
Markdown
# Test Evidence: Project and Task shared-shell integration
|
|
|
|
- **Test type:** Web
|
|
- **Requirement IDs:** `UI-003`, `UI-004`, `UI-007`, `UI-009`, `UI-013`, `I1-UI-04`
|
|
- **Scenario IDs:** `AC-UI-002`, `AC-UI-003`, `AC-UI-005`
|
|
- **Test class/method:** `com.lab.labtimesheet.feature.reporting.controller.ProjectTaskShellContractTest#projectAndTaskPageUsesSharedDesktopShell`, `com.lab.labtimesheet.feature.project.controller.ProjectControllerTest`, `com.lab.labtimesheet.feature.task.controller.TaskControllerTest`
|
|
- **Implementation commit:** `pending`
|
|
|
|
## Protected behavior
|
|
|
|
Every Iteration 1 Project and Task page uses the same authenticated desktop shell, local assets, role-aware Project navigation, table containment, form controls, empty states, status badges, and `dd/MM/yyyy` date presentation. Existing capability-gated actions, server routes, validation, authentication, and CSRF contracts remain unchanged.
|
|
|
|
## Test method
|
|
|
|
The focused parameterized contract checks all five Project and three Task production templates for shared-shell composition and the active Project navigation marker. The affected Project and Task MVC slices then render the production templates through their real controllers while mocking only their feature service boundary, exercising route selection, authorization, form binding, validation, and action visibility.
|
|
|
|
## Hand-derived expected result
|
|
|
|
All eight templates reference `fragments/layout :: shell`, identify `projects` as the active navigation section, and contain no duplicate page `<head>`. Mentor-only Project and Task creation controls remain capability-gated; Project members and leadership management stay hidden from non-managers; Task status/comment controls stay hidden when their capability flag is false. Empty Task progress remains `N/A`.
|
|
|
|
## RED
|
|
|
|
**Command**
|
|
|
|
```text
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
|
export PATH="/opt/homebrew/opt/node@24/bin:$JAVA_HOME/bin:$PATH"
|
|
./mvnw -Dtest=ProjectTaskShellContractTest test
|
|
```
|
|
|
|
**Observed result**
|
|
|
|
```text
|
|
Tests run: 8, Failures: 8, Errors: 0, Skipped: 0
|
|
Each standalone Project and Task template was missing "fragments/layout :: shell(".
|
|
BUILD FAILURE
|
|
Total time: 3.455 s
|
|
```
|
|
|
|
## GREEN
|
|
|
|
**Command**
|
|
|
|
```text
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
|
export PATH="/opt/homebrew/opt/node@24/bin:$JAVA_HOME/bin:$PATH"
|
|
npm run build
|
|
./mvnw -Dtest=ProjectTaskShellContractTest test
|
|
```
|
|
|
|
**Observed result**
|
|
|
|
```text
|
|
Tailwind CSS v4.3.3: Done in 63ms
|
|
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
|
|
BUILD SUCCESS
|
|
```
|
|
|
|
## Affected suite
|
|
|
|
**Command and result**
|
|
|
|
```text
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
|
export PATH="/opt/homebrew/opt/node@24/bin:$JAVA_HOME/bin:$PATH"
|
|
./mvnw -Dtest=ProjectTaskShellContractTest,ProjectControllerTest,TaskControllerTest test
|
|
|
|
Tests run: 25, Failures: 0, Errors: 0, Skipped: 0
|
|
BUILD SUCCESS
|
|
Total time: 4.020 s
|
|
```
|
|
|
|
The first affected attempt additionally caught Thymeleaf trying to resolve a `null` action fragment on five pages. Replacing `null` with Thymeleaf's empty fragment token made the identical 25-test command green.
|
|
|
|
## External-test boundaries
|
|
|
|
The MVC slices verify server-rendered markup and security/control contracts but do not emulate a browser viewport or visually compare illustrative mockups. PostgreSQL query and mutation behavior remains covered by the feature-owned integration suites; final asset reproducibility and the full PostgreSQL suite are separate delivery gates.
|