API Spec 상태 조회 및 관리 기능 추가

- ApiSpecStatusRepository 신규 추가
- 스펙 상태 검색 조건/그룹 조회 및 UI 반영
This commit is contained in:
Rinjae
2026-09-09 11:05:46 +09:00
parent 145ad37499
commit 2a9dfaa093
8 changed files with 267 additions and 2 deletions
@@ -0,0 +1,84 @@
package com.eactive.eai.rms.data.entity.onl.apim.apispec;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.stream.Collectors;
import javax.persistence.EntityManager;
import com.eactive.apim.portal.apispec.entity.ApiSpecInfo;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
class ApiSpecStatusRepositoryTest {
private static SessionFactory sessionFactory;
private static EntityManager entityManager;
private static ApiSpecStatusRepository repository;
@BeforeAll
static void setUp() {
sessionFactory = new Configuration()
.addAnnotatedClass(ApiSpecInfo.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect")
.setProperty("hibernate.connection.driver_class", "org.h2.Driver")
.setProperty("hibernate.connection.url", "jdbc:h2:mem:apiSpecStatus;DB_CLOSE_DELAY=-1")
.setProperty("hibernate.hbm2ddl.auto", "create-drop")
.buildSessionFactory();
entityManager = sessionFactory.createEntityManager();
repository = new JpaRepositoryFactory(entityManager).getRepository(ApiSpecStatusRepository.class);
entityManager.getTransaction().begin();
save("PUBLISHED1", "Y");
save("REGISTERED1", "N");
save("LEGACY2", null);
entityManager.getTransaction().commit();
entityManager.clear();
}
private static void save(String apiId, String displayYn) {
ApiSpecInfo spec = new ApiSpecInfo();
spec.setApiId(apiId);
spec.setDisplayYn(displayYn);
entityManager.persist(spec);
}
@AfterAll
static void tearDown() {
if (entityManager != null) entityManager.close();
if (sessionFactory != null) sessionFactory.close();
}
@Test
void publishedIncludesOnlyDisplayedSpecs() {
assertEquals(Arrays.asList("PUBLISHED1"), repository.findApiIdsByStatus("PUBLISHED"));
}
@Test
void registeredIncludesNonDisplayedAndLegacyNullSpecs() {
assertEquals(new HashSet<>(Arrays.asList("REGISTERED1", "LEGACY2")),
new HashSet<>(repository.findApiIdsByStatus("REGISTERED")));
}
@Test
void statusProjectionIncludesOnlyRequestedExistingSpecs() {
Map<String, String> statuses = repository.findStatusesByApiIds(
Arrays.asList("PUBLISHED1", "LEGACY2", "MISSING2")).stream()
.collect(Collectors.toMap(ApiSpecStatusRepository.SpecStatus::getApiId,
spec -> "Y".equals(spec.getDisplayYn()) ? "PUBLISHED" : "REGISTERED"));
assertEquals(2, statuses.size());
assertEquals("PUBLISHED", statuses.get("PUBLISHED1"));
assertEquals("REGISTERED", statuses.get("LEGACY2"));
assertEquals("UNREGISTERED", statuses.getOrDefault("MISSING2", "UNREGISTERED"));
}
@Test
void missingApiHasNoSpecStatus() {
assertTrue(repository.findStatusesByApiIds(Arrays.asList("MISSING2")).isEmpty());
}
}