Files
labtimesheet/docs/tests/unit/projects-layer-structure.md
T

3.6 KiB
Raw Blame History

Test Evidence: Project layer and JPA structure

  • Test type: Unit
  • Requirement IDs: ARC-002, ARC-005ARC-007, OPS-018OPS-020, TST-001TST-010
  • Scenario IDs: I1-PRJ-01I1-PRJ-05
  • Test class/method: com.lab.labtimesheet.feature.project.repository.ProjectPersistenceStructureTest#projectPersistenceUsesTheRequiredLayerPackagesAndSpringDataJpa
  • Implementation commits: 25a855e, pending review-fix commit

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

export JAVA_HOME=/opt/homebrew/opt/openjdk@25
export PATH="$JAVA_HOME/bin:$PATH"
./mvnw -Dtest=ProjectPersistenceStructureTest test

Observed result

[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

export JAVA_HOME=/opt/homebrew/opt/openjdk@25
export PATH="$JAVA_HOME/bin:$PATH"
./mvnw -Dtest=ProjectPersistenceStructureTest test

Observed result

[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

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:

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.