createMock(GradeExistenceChecker::class); $checker->expects(self::once()) ->method('hasGradesInPeriod') ->with( self::callback(static fn (TenantId $t) => (string) $t === self::TENANT_ID), self::callback(static fn (AcademicYearId $a) => (string) $a === self::ACADEMIC_YEAR_ID), 1, ) ->willReturn(true); $handler = new HasGradesInPeriodHandler($checker); $query = new HasGradesInPeriodQuery( tenantId: self::TENANT_ID, academicYearId: self::ACADEMIC_YEAR_ID, periodSequence: 1, ); $result = ($handler)($query); self::assertTrue($result); } #[Test] public function returnsFalseWhenNoGrades(): void { $checker = $this->createMock(GradeExistenceChecker::class); $checker->method('hasGradesInPeriod')->willReturn(false); $handler = new HasGradesInPeriodHandler($checker); $query = new HasGradesInPeriodQuery( tenantId: self::TENANT_ID, academicYearId: self::ACADEMIC_YEAR_ID, periodSequence: 2, ); $result = ($handler)($query); self::assertFalse($result); } #[Test] public function passesCorrectPeriodSequence(): void { $checker = $this->createMock(GradeExistenceChecker::class); $checker->expects(self::once()) ->method('hasGradesInPeriod') ->with( self::anything(), self::anything(), 3, ) ->willReturn(false); $handler = new HasGradesInPeriodHandler($checker); $query = new HasGradesInPeriodQuery( tenantId: self::TENANT_ID, academicYearId: self::ACADEMIC_YEAR_ID, periodSequence: 3, ); ($handler)($query); } }