assertNull(config('ecommerce.review.write_deadline_days')); $this->assertNotNull(config('sirsoft-ecommerce.review.write_deadline_days')); } /** * 설정 미지정 시 config 기본값을 사용한다. */ public function test_deadline_days_falls_back_to_module_config(): void { $this->assertSame( (int) config('sirsoft-ecommerce.review.write_deadline_days'), ReviewWritePolicy::deadlineDays() ); } /** * 기한 내 구매확정은 통과한다. */ public function test_deadline_not_passed_within_period(): void { $this->assertFalse(ReviewWritePolicy::isDeadlinePassed(now()->subDay())); } /** * 기한을 넘긴 구매확정은 차단된다. */ public function test_deadline_passed_after_period(): void { $days = ReviewWritePolicy::deadlineDays(); $this->assertTrue(ReviewWritePolicy::isDeadlinePassed(now()->subDays($days + 1))); } /** * 미확정(null)은 기한 판정 대상이 아니다. */ public function test_null_confirmed_at_is_not_deadline_passed(): void { $this->assertFalse(ReviewWritePolicy::isDeadlinePassed(null)); } /** * 판정이 인자를 변형하지 않는다. (copy 누락 시 호출자의 시각이 밀린다) */ public function test_confirmed_at_is_not_mutated(): void { $confirmedAt = now()->subDay(); $snapshot = $confirmedAt->copy(); ReviewWritePolicy::isDeadlinePassed($confirmedAt); $this->assertTrue($snapshot->equalTo($confirmedAt)); } }