diff --git a/docs/tests/web/project-intern-picker.md b/docs/tests/web/project-intern-picker.md index 36f96af..3682dda 100644 --- a/docs/tests/web/project-intern-picker.md +++ b/docs/tests/web/project-intern-picker.md @@ -46,3 +46,7 @@ No browser loop or Impeccable detector is run on this branch; the root owner per After merging exact reviewed `main` `32c8a2d315d2175760c5d4792988cd0aa5ab6dd0`, `npm ci`, the 1/1 UI test, frontend build, compile, Project-scoped Javadoc/doclint, and diff check all succeeded. The first affected Java command added the updated shared `UiContractWebTest` and passed 45/45 tests with no failures, errors, or skips. The bounded post-review affected command reran `ProjectControllerTest,ProjectEntityTest,ProjectPersistenceStructureTest,ProjectServiceIntegrationTest,ProjectTaskMutationContextTest,LayerStructureTest,UiContractWebTest` and passed 47/47 with no failures, errors, or skips, including 9/9 Project service tests against PostgreSQL 18.4. The UI test remained 1/1; frontend build, compile, Project-scoped Javadoc/doclint, and `git diff --check` also succeeded. + +The root-owned final full suite then exposed a branch-induced MVC-slice fixture RED: 213 tests ran with 0 failures and 3 errors, all `ProjectTaskFormAccessibilityWebTest` context errors because the slice did not provide the new ProjectController AccountService dependency. A focused reproduction ran the class at 3 tests, 0 failures, 3 errors and reported the same missing AccountService constructor dependency. + +The smallest test-only correction supplies the controller's AccountService and Clock dependencies and the existing ProjectQueryService mock's authenticated Mentor response. The intermediate focused runs exposed each dependency in order; no production code changed. Final focused GREEN: `env JAVA_HOME=/opt/homebrew/opt/openjdk@25 PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ./mvnw '-Dtest=ProjectTaskFormAccessibilityWebTest' test` passed 3/3 with no failures, errors, or skips. The root owner retains the broader rerun. diff --git a/src/test/java/com/lab/labtimesheet/feature/reporting/controller/ProjectTaskFormAccessibilityWebTest.java b/src/test/java/com/lab/labtimesheet/feature/reporting/controller/ProjectTaskFormAccessibilityWebTest.java index 97d40fb..2896c11 100644 --- a/src/test/java/com/lab/labtimesheet/feature/reporting/controller/ProjectTaskFormAccessibilityWebTest.java +++ b/src/test/java/com/lab/labtimesheet/feature/reporting/controller/ProjectTaskFormAccessibilityWebTest.java @@ -8,14 +8,20 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.lab.labtimesheet.feature.account.service.AccountService; import com.lab.labtimesheet.feature.integration.service.SmtpConfigurationService; import com.lab.labtimesheet.feature.project.controller.ProjectController; +import com.lab.labtimesheet.feature.project.model.dto.ProjectActorView; import com.lab.labtimesheet.feature.project.service.ProjectQueryService; import com.lab.labtimesheet.feature.project.service.ProjectService; import com.lab.labtimesheet.feature.task.controller.TaskController; import com.lab.labtimesheet.feature.task.model.dto.TaskAssigneeChoice; import com.lab.labtimesheet.feature.task.service.TaskService; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest; @@ -34,12 +40,26 @@ class ProjectTaskFormAccessibilityWebTest { @MockitoBean private ProjectService projects; + @MockitoBean + private AccountService accounts; + + @MockitoBean + private Clock clock; + @MockitoBean private TaskService tasks; @MockitoBean private SmtpConfigurationService smtpConfiguration; + @BeforeEach + void mentorActor() { + given(projectQueries.authenticatedActor("mentor@example.test")) + .willReturn(new ProjectActorView(10L, "MENTOR")); + given(clock.instant()).willReturn(Instant.parse("2026-08-15T01:00:00Z")); + given(clock.getZone()).willReturn(ZoneId.of("Asia/Ho_Chi_Minh")); + } + @Test void projectFieldErrorsHaveStableIdsAndInputAssociations() throws Exception { mvc.perform(post("/projects")