fix(subscription): retain yank visibility context

Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
This commit is contained in:
XiaoSeS 2026-08-27 16:50:37 +08:00
parent 1331667496
commit 126f01d75e
3 changed files with 28 additions and 3 deletions

View file

@ -1,3 +1,3 @@
package com.iflytek.skillhub.domain.event;
public record SkillVersionYankedEvent(Long skillId, Long versionId, String actorUserId) {}
public record SkillVersionYankedEvent(Long skillId, Long versionId, String actorUserId, boolean wasPublished) {}

View file

@ -281,7 +281,7 @@ public class SkillGovernanceService {
});
auditLogService.record(actorUserId, "YANK_SKILL_VERSION", "SKILL_VERSION", versionId, null, clientIp, userAgent, jsonReason(reason));
eventPublisher.publishEvent(new com.iflytek.skillhub.domain.event.SkillVersionYankedEvent(
version.getSkillId(), versionId, actorUserId));
version.getSkillId(), versionId, actorUserId, true));
return saved;
}

View file

@ -86,6 +86,7 @@ class SkillReviewSubmitServiceTest {
assertEquals(SkillVersionStatus.PENDING_REVIEW, version.getStatus());
assertEquals(SkillVisibility.PUBLIC, version.getRequestedVisibility());
verify(reviewTaskRepository).save(any(ReviewTask.class));
verify(eventPublisher, never()).publishEvent(any());
}
@Test
@ -186,7 +187,7 @@ class SkillReviewSubmitServiceTest {
ArgumentCaptor<SkillPublishedEvent> eventCaptor =
ArgumentCaptor.forClass(SkillPublishedEvent.class);
verify(eventPublisher).publishEvent(eventCaptor.capture());
verify(eventPublisher, times(1)).publishEvent(eventCaptor.capture());
SkillPublishedEvent event = eventCaptor.getValue();
assertEquals(skillId, event.skillId());
assertEquals(versionId, event.versionId());
@ -258,6 +259,30 @@ class SkillReviewSubmitServiceTest {
verify(eventPublisher, never()).publishEvent(any());
}
@Test
@DisplayName("should not publish event when version persistence fails")
void shouldNotPublishEventWhenVersionPersistenceFails() {
// Given
Long skillId = 1L;
Long versionId = 100L;
String userId = "user-1";
Skill skill = createSkill(skillId, userId, 10L, SkillVisibility.PRIVATE);
SkillVersion version = createVersion(versionId, skillId, SkillVersionStatus.UPLOADED);
RuntimeException persistenceFailure = new RuntimeException("version save failed");
when(skillRepository.findById(skillId)).thenReturn(Optional.of(skill));
when(skillVersionRepository.findById(versionId)).thenReturn(Optional.of(version));
when(skillVersionRepository.save(version)).thenThrow(persistenceFailure);
// When/Then
RuntimeException thrown = assertThrows(RuntimeException.class,
() -> service.confirmPublish(skillId, versionId, userId, Map.of()));
assertSame(persistenceFailure, thrown);
verify(skillRepository, never()).save(any());
verify(eventPublisher, never()).publishEvent(any());
}
@Test
@DisplayName("should not publish event when skill persistence fails")
void shouldNotPublishEventWhenSkillPersistenceFails() {