- AppRequestRepository에 findAllByOrgAndClientName 메서드 추가
eapim-portal CI / build (push) Has been cancelled
eapim-portal Test / test (push) Has been cancelled

- 클라이언트 신청 해지 프로세스 및 테스트 클린업 로직 구현
- Playwright API 키 관리/클라이언트 관리 경로 및 셀렉터 업데이트
This commit is contained in:
Rinjae
2026-08-24 15:25:18 +09:00
parent c223fa3124
commit 05e0599b26
4 changed files with 162 additions and 2 deletions
@@ -14,6 +14,11 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import com.eactive.apim.portal.app.repository.CredentialRepository;
import com.eactive.apim.portal.apprequest.entity.AppRequest;
import com.eactive.apim.portal.apprequest.repository.AppRequestRepository;
import com.eactive.apim.portal.approval.entity.Approval;
import com.eactive.apim.portal.approval.statemachine.RequestedState;
import com.eactive.apim.portal.apps.approval.service.ApprovalService;
import com.eactive.apim.portal.apps.community.partnership.repository.PartnershipApplicationRepository;
import com.eactive.apim.portal.apps.community.qna.repository.InquiryRepository;
import com.eactive.apim.portal.apps.user.repository.PortalOrgRepository;
@@ -58,6 +63,8 @@ class TestCleanupServiceTest {
@Mock private UserPasswordHistoryRepository userPasswordHistoryRepository;
@Mock private UserLogRepository userLogRepository;
@Mock private CredentialRepository credentialRepository;
@Mock private AppRequestRepository appRequestRepository;
@Mock private ApprovalService approvalService;
@Mock private WebhookRequestRepository webhookRequestRepository;
@Mock private WebhookRequestApiRepository webhookRequestApiRepository;
@Mock private WebhookRequestEventRepository webhookRequestEventRepository;
@@ -78,7 +85,8 @@ class TestCleanupServiceTest {
service = new TestCleanupService(environment, portalOrgRepository, portalUserRepository,
inquiryRepository, inquiryCommentRepository, partnershipApplicationRepository,
userRoleHistoryRepository, portalUserPrivacyAgreementRepository, userPasswordHistoryRepository,
userLogRepository, credentialRepository, webhookRequestRepository, webhookRequestApiRepository,
userLogRepository, credentialRepository, appRequestRepository, approvalService,
webhookRequestRepository, webhookRequestApiRepository,
webhookRequestEventRepository, webhookService, userInvitationRepository, nativeQueries);
when(environment.acceptsProfiles(Profiles.of("stage", "prod"))).thenReturn(false);
}
@@ -226,6 +234,36 @@ class TestCleanupServiceTest {
verify(portalUserRepository, never()).delete(target);
}
@Test
void cancelPendingTestAppRequests_cancelsOnlyExactTestAppRequest() {
PortalUser target = user();
PortalOrg org = org();
target.setPortalOrg(org);
AppRequest request = new AppRequest();
request.setId("APP_REQ_1");
request.setClientName("단위테스트앱-20260824-144907");
Approval approval = new Approval();
approval.setApprovalStatus(new RequestedState());
request.setApproval(approval);
when(portalUserRepository.findPortalUserByEmailAddr(EMAIL)).thenReturn(Optional.of(target));
when(appRequestRepository.findAllByOrgAndClientName(org, request.getClientName()))
.thenReturn(Collections.singletonList(request));
TestCleanupResult result = service.cancelPendingTestAppRequests(EMAIL, request.getClientName());
assertTrue(result.isFound());
assertEquals("APP_REQ_1", result.getTargetId());
assertEquals(1L, result.getDeletedCounts().get("PTL_APP_REQUEST_CANCELLED"));
verify(approvalService).cancelAppApproval(request);
}
@Test
void cancelPendingTestAppRequests_rejectsNonTestName() {
assertThrows(IllegalArgumentException.class,
() -> service.cancelPendingTestAppRequests(EMAIL, "운영앱"));
verifyNoInteractions(appRequestRepository, approvalService);
}
@Test
void deleteUserCascade_found_deletesOrphanDataAndUser() {
PortalUser target = user();