@ExtendWith(MockitoExtension.class)
public classCategoryServiceTest {
@Mock
private CategoryRepository categoryRepository;

@Mock
private StoreRepository storeRepository;

@InjectMocks
private CategoryServiceImpl categoryService;

private Store store;
private User user;

private Category category;

private CategoryRequest categoryRequest;

@Autowired
private MockMvc mockMvc;
@BeforeEach
void setUp() {
        categoryService =new CategoryServiceImpl(categoryRepository,storeRepository);
        user = User.builder()
                .username("admin")
                .password("admi
                .name("관리자")
                .phoneNum("01090551111")
                .birth(null)
                .type("admin")
                .build();

//        UUID storeId = UUID.randomUUID();
store = Store.builder()
                .user(user)
                .storeName("starbucks")
                .build();

        storeRepository.save(store);

        category = Category.builder()
                .categoryName("coffee")
                .store(store)
                .build();

        categoryRepository.save(category);

        categoryRequest = CategoryRequest.builder()
                .storeId(store.getId())
                .categoryName("coffee")
                .build();

        Category category =newCategory(categoryRequest.getCategoryName(), store);
        categoryRepository.save(category);

    }

@DisplayName("카테고리 생성 테스트")
@Test
void When_Create_NewCategory()throwsException {
// given
CategoryRequest categoryRequest =new CategoryRequest(store.getId(), "coffee");
        when(categoryRepository.save(any(Category.class))).thenReturn(category);

// when
Category createNewCategory = categoryService.createNewCategory(categoryRequest);

// then
verify(categoryRepository, atLeastOnce()).save(any(Category.class));
        assertEquals(createNewCategory, category.getId());

    }

@DisplayName("카테고리 1건 조회 테스트")
@Test
void findCategoryById() {
// given
UUID testId = UUID.randomUUID();
        given(categoryRepository.findById(any())).willReturn(Optional.empty());

        assertThrows(CategoryNotFoundException.class,() -> categoryService.findCategoryById(testId));

        verify(categoryRepository).findById(any());
    }

@DisplayName("카테고리 전체 조회 테스트")
@Test
void findCategoryList() {
        List<Category> categories =newArrayList<>();

        categories.add(new Category("coffee", store));
        given(categoryRepository.findAll()).willReturn(categories);

        List<Category> expected = categoryService.searchCategories(store.getId(),"coffee");

        assertEquals(expected, categories);
        verify(categoryRepository.findAll());
    }

@Test
void check() {
        System.out.println(category);
        System.out.println(store.getId());
        System.out.println(category.getStore());
        System.out.println(categoryRequest.getStoreId());
        System.out.println(categoryRequest.getStoreId());
    }
}