diff --git a/src/main/java/com/snackgame/server/game/snackgame/core/domain/item/policy/DailyGrantPolicy.kt b/src/main/java/com/snackgame/server/game/snackgame/core/domain/item/policy/DailyGrantPolicy.kt index 0af1f60..6075814 100644 --- a/src/main/java/com/snackgame/server/game/snackgame/core/domain/item/policy/DailyGrantPolicy.kt +++ b/src/main/java/com/snackgame/server/game/snackgame/core/domain/item/policy/DailyGrantPolicy.kt @@ -3,7 +3,7 @@ package com.snackgame.server.game.snackgame.core.domain.item.policy import com.snackgame.server.game.snackgame.core.domain.item.ItemGrantHistory import com.snackgame.server.game.snackgame.core.domain.item.ItemType import org.springframework.stereotype.Component -import java.time.LocalDateTime +import java.time.LocalDate @Component class DailyGrantPolicy : ItemGrantPolicy { @@ -14,7 +14,8 @@ class DailyGrantPolicy : ItemGrantPolicy { ): Boolean { val latest = histories.filter { it.grantType == GrantType.DAILY } .maxByOrNull { it.grantedAt } ?: return true - return latest.grantedAt.plusDays(1).isBefore(LocalDateTime.now()) + + return latest.grantedAt.toLocalDate().isBefore(LocalDate.now()) } } \ No newline at end of file diff --git a/src/test/java/com/snackgame/server/game/snackgame/core/service/ItemServiceTest.kt b/src/test/java/com/snackgame/server/game/snackgame/core/service/ItemServiceTest.kt index 2d3693d..cafa188 100644 --- a/src/test/java/com/snackgame/server/game/snackgame/core/service/ItemServiceTest.kt +++ b/src/test/java/com/snackgame/server/game/snackgame/core/service/ItemServiceTest.kt @@ -3,22 +3,23 @@ package com.snackgame.server.game.snackgame.core.service - -import com.snackgame.server.fixture.SeasonFixture -import com.snackgame.server.game.snackgame.core.domain.item.Item +import com.snackgame.server.game.snackgame.core.domain.item.ItemGrantHistories +import com.snackgame.server.game.snackgame.core.domain.item.ItemGrantHistory import com.snackgame.server.game.snackgame.core.domain.item.ItemRepository import com.snackgame.server.game.snackgame.core.domain.item.ItemService import com.snackgame.server.game.snackgame.core.domain.item.ItemType import com.snackgame.server.game.snackgame.core.domain.item.policy.GrantType - +import com.snackgame.server.game.snackgame.exception.ItemNotReadyException import com.snackgame.server.game.snackgame.fixture.ItemFixture import com.snackgame.server.member.fixture.MemberFixture.땡칠 import com.snackgame.server.member.fixture.MemberFixture.정환 import com.snackgame.server.support.general.ServiceTest import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.assertThatThrownBy import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired +import java.time.LocalDateTime @ServiceTest class ItemServiceTest { @@ -29,6 +30,9 @@ class ItemServiceTest { @Autowired private lateinit var itemRepository: ItemRepository + @Autowired + private lateinit var itemGrantHistories: ItemGrantHistories + @BeforeEach fun setUp() { ItemFixture.saveAll() @@ -64,4 +68,17 @@ class ItemServiceTest { assertThat(checked.items.size).isEqualTo(ItemType.entries.size) } + @Test + fun `아이템은 하루에 한번만 발급받을 수 있다`() { + itemGrantHistories.save( + ItemGrantHistory( + 땡칠().id, ItemType.BOMB, + GrantType.DAILY, LocalDateTime.now() + ) + ) + + assertThatThrownBy { itemService.issueItem(땡칠().id, ItemType.BOMB, GrantType.DAILY) } + .isInstanceOf(ItemNotReadyException::class.java) + } + } \ No newline at end of file