From 0a07adab26b528db55963967fb92be3a0f1ecd6a Mon Sep 17 00:00:00 2001 From: hwanvely <990706leo@gmail.com> Date: Fri, 11 Jul 2025 18:11:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=95=84=EC=9D=B4=ED=85=9C=EC=9D=80=20?= =?UTF-8?q?=EB=A7=A4=EC=9D=BC=2000=EC=8B=9C=20=EA=B8=B0=EC=A4=80=20?= =?UTF-8?q?=ED=95=9C=EB=B2=88=20=EB=B0=9C=EA=B8=89=EB=B0=9B=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/item/policy/DailyGrantPolicy.kt | 5 ++-- .../snackgame/core/service/ItemServiceTest.kt | 25 ++++++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) 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