92 lines
3.6 KiB
Markdown
92 lines
3.6 KiB
Markdown
# Test Evidence: Project layer and JPA structure
|
||
|
||
- **Test type:** Unit
|
||
- **Requirement IDs:** `ARC-002`, `ARC-005`–`ARC-007`, `OPS-018`–`OPS-020`, `TST-001`–`TST-010`
|
||
- **Scenario IDs:** `I1-PRJ-01`–`I1-PRJ-05`
|
||
- **Test class/method:** `com.lab.labtimesheet.feature.project.repository.ProjectPersistenceStructureTest#projectPersistenceUsesTheRequiredLayerPackagesAndSpringDataJpa`
|
||
- **Implementation commits:** `25a855e`, `af0eb3c`
|
||
|
||
## Protected behavior
|
||
|
||
Project-owned production code follows the authoritative feature-first package layout, persists aggregate entities through Spring Data JPA, keeps JDBC operations out of Project business services, and does not shadow Account or Task persistence.
|
||
|
||
## Test method
|
||
|
||
Plain JUnit inspects the public Project entity, repository, and service types. It verifies their exact feature/layer packages, the entity's JPA mapping, the repository's `JpaRepository` contract, the absence of JDBC service dependencies, and the absence of foreign-table Account/Task shadow entities.
|
||
|
||
## Hand-derived expected result
|
||
|
||
The Project aggregate is under `feature.project.model.entity`, persistence under `feature.project.repository`, business logic under `feature.project.service`, the service has zero JDBC collaborators, and Account/Task persistence remains owned by those features.
|
||
|
||
## RED
|
||
|
||
**Command**
|
||
|
||
```text
|
||
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
||
export PATH="$JAVA_HOME/bin:$PATH"
|
||
./mvnw -Dtest=ProjectPersistenceStructureTest test
|
||
```
|
||
|
||
**Observed result**
|
||
|
||
```text
|
||
[ERROR] cannot find symbol: class ProjectUserRepository
|
||
[ERROR] cannot find symbol: class ProjectInternProfileRepository
|
||
[ERROR] cannot find symbol: class ProjectTaskRepository
|
||
[INFO] BUILD FAILURE
|
||
```
|
||
|
||
The RED was observed after removing Project-owned shadow mappings of Account and Task tables. It proves the service still required cross-feature dependencies and could not be made green by retaining forbidden repositories.
|
||
|
||
## GREEN
|
||
|
||
**Command**
|
||
|
||
```text
|
||
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
||
export PATH="$JAVA_HOME/bin:$PATH"
|
||
./mvnw -Dtest=ProjectPersistenceStructureTest test
|
||
```
|
||
|
||
**Observed result**
|
||
|
||
```text
|
||
[INFO] Running com.lab.labtimesheet.feature.project.repository.ProjectPersistenceStructureTest
|
||
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
|
||
[INFO] BUILD SUCCESS
|
||
```
|
||
|
||
## Affected suite
|
||
|
||
**Command and result**
|
||
|
||
```text
|
||
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
||
export PATH="$JAVA_HOME/bin:$PATH"
|
||
./mvnw -Dtest=LayerStructureTest,ProjectPersistenceStructureTest,ProjectEntityTest test
|
||
|
||
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
|
||
[INFO] BUILD SUCCESS
|
||
```
|
||
|
||
## Iteration 1 Javadoc retrofit verification
|
||
|
||
No behavioral RED was manufactured for documentation. The initial Project-scoped doclint run
|
||
reported 29 warnings for missing type comments, an implicit public advice constructor, and
|
||
accessor comments without main descriptions. After documenting every Project-owned production
|
||
type and declared public/protected API, the same scoped command passed:
|
||
|
||
```text
|
||
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
||
export PATH="$JAVA_HOME/bin:$PATH"
|
||
./mvnw -DskipTests -Dmaven.javadoc.failOnWarnings=true -Ddoclint=all -Dsubpackages=com.lab.labtimesheet.feature.project javadoc:javadoc
|
||
|
||
[INFO] BUILD SUCCESS
|
||
[INFO] Total time: 2.579 s
|
||
```
|
||
|
||
## External-test boundaries
|
||
|
||
This check does not prove database mappings, transaction behavior, MVC routing, or runtime authorization; those remain covered by PostgreSQL and MockMvc tests. Whole-application fail-on-warning Javadoc remains an integration responsibility after every feature owner completes the approved Iteration 1 retrofit; this evidence deliberately scopes generation to the Project-owned package.
|