Skip to content

Commit

Permalink
Merge pull request #178 from bucket-back/OMCT-351-inventory-appender-…
Browse files Browse the repository at this point in the history
…test

[OMCT-351] InventoryAppender 인벤토리 생성 테스트 구현
  • Loading branch information
HandmadeCloud authored Nov 29, 2023
2 parents 82f3bd1 + 4dc9a17 commit fc607a5
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.programmers.bucketback.domains.inventory.implementation;

import static org.assertj.core.api.Assertions.*;
import static org.mockito.BDDMockito.*;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import com.programmers.bucketback.common.model.Hobby;
import com.programmers.bucketback.common.model.ItemIdRegistry;
import com.programmers.bucketback.common.model.ItemIdRegistryBuilder;
import com.programmers.bucketback.domains.inventory.domain.Inventory;
import com.programmers.bucketback.domains.inventory.domain.InventoryBuilder;
import com.programmers.bucketback.domains.inventory.domain.InventoryItem;
import com.programmers.bucketback.domains.inventory.repository.InventoryRepository;
import com.programmers.bucketback.domains.item.domain.ItemBuilder;
import com.programmers.bucketback.domains.item.implementation.ItemReader;

@ExtendWith(MockitoExtension.class)
public class InventoryAppenderTest {

@Mock
private InventoryRepository inventoryRepository;

@Mock
private ItemReader itemReader;

@InjectMocks
private InventoryAppender inventoryAppender;

@Test
@DisplayName("인벤토리를 생성한다.")
void createInventory() {
//given
Long memberId = 1L;
Hobby hobby = Hobby.BASKETBALL;
ItemIdRegistry itemIdRegistry = ItemIdRegistryBuilder.build();

Inventory inventory = InventoryBuilder.buildExist(itemIdRegistry);
List<InventoryItem> inventoryItems = InventoryBuilder.buildInventoryItems(itemIdRegistry);

given(inventoryRepository.save(any(Inventory.class)))
.willReturn(inventory);
given(itemReader.read(anyLong()))
.willReturn(ItemBuilder.build());

//when
Long actualInventoryId = inventoryAppender.append(memberId, hobby, itemIdRegistry);

//then
assertThat(actualInventoryId).isEqualTo(inventory.getId());
assertThat(inventory.getInventoryItems())
.usingRecursiveComparison()
.ignoringFields("inventory")
.isEqualTo(inventoryItems);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.programmers.bucketback.domains.inventory.domain;

import java.util.List;

import org.springframework.test.util.ReflectionTestUtils;

import com.programmers.bucketback.common.model.Hobby;
import com.programmers.bucketback.common.model.ItemIdRegistry;
import com.programmers.bucketback.domains.item.domain.ItemBuilder;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class InventoryBuilder {

public static Inventory build() {
Long memberId = 1L;
Inventory inventory = new Inventory(memberId, Hobby.BASKETBALL);

setInventoryId(inventory);

return inventory;
}

public static Inventory buildExist(ItemIdRegistry itemIdRegistry) {
Long memberId = 1L;
Inventory inventory = new Inventory(memberId, Hobby.BASKETBALL);
List<InventoryItem> inventoryItems = buildInventoryItems(itemIdRegistry);
inventoryItems.forEach(inventory::addInventoryItem);

setInventoryId(inventory);

return inventory;
}

public static List<InventoryItem> buildInventoryItems(ItemIdRegistry itemIdRegistry) {
return itemIdRegistry.itemIds().stream()
.map(itemId -> new InventoryItem(ItemBuilder.build(itemId)))
.toList();
}

private static void setInventoryId(final Inventory inventory) {
ReflectionTestUtils.setField(
inventory,
"id",
1L
);
}
}

0 comments on commit fc607a5

Please sign in to comment.