package com.tourguide.modules.user.service; import com.tourguide.common.exception.BusinessException; import com.tourguide.modules.operation.mapper.OperationCityMapper; import com.tourguide.modules.operation.mapper.OperationScenicSpotMapper; import com.tourguide.modules.user.dto.GuideUserResponse; import com.tourguide.modules.user.entity.GuideUser; import com.tourguide.modules.user.mapper.GuideAutoDisableConfigMapper; import com.tourguide.modules.user.mapper.GuideApplicationMapper; import com.tourguide.modules.user.mapper.GuideScenicConfigMapper; import com.tourguide.modules.user.mapper.GuideTeamMapper; import com.tourguide.modules.user.mapper.GuideUserMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.security.crypto.password.PasswordEncoder; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class GuideUserServiceAdminAvatarTest { private GuideUserMapper userMapper; private GuideUserService service; @BeforeEach void setUp() { userMapper = mock(GuideUserMapper.class); service = new GuideUserService( userMapper, mock(GuideTeamMapper.class), mock(GuideApplicationMapper.class), mock(GuideScenicConfigMapper.class), mock(GuideAutoDisableConfigMapper.class), mock(OperationScenicSpotMapper.class), mock(OperationCityMapper.class), mock(PasswordEncoder.class)); } @Test void adminShouldUpdateAvatarForDisabledGuide() { GuideUser user = new GuideUser(); user.setId(12L); user.setStatus(GuideUserService.STATUS_DISABLED); when(userMapper.selectById(12L)).thenReturn(user); GuideUserResponse response = service.updateAvatarByAdmin(12L, "/uploads/avatars/guide.png"); assertThat(response.getAvatar()).isEqualTo("/uploads/avatars/guide.png"); verify(userMapper).updateById(user); } @Test void adminShouldUpdateDocumentForDisabledGuide() { GuideUser user = new GuideUser(); user.setId(12L); user.setStatus(GuideUserService.STATUS_DISABLED); when(userMapper.selectById(12L)).thenReturn(user); String url = service.updateDocumentByAdmin( 12L, "guideCertificateUrl", "/uploads/guide-applications/guide.png"); assertThat(url).isEqualTo("/uploads/guide-applications/guide.png"); assertThat(user.getGuideCertificateUrl()).isEqualTo(url); verify(userMapper).updateById(user); } @Test void adminShouldRejectUnsupportedDocumentType() { GuideUser user = new GuideUser(); user.setId(12L); when(userMapper.selectById(12L)).thenReturn(user); assertThat(service.supportsDocumentType("unknownUrl")).isFalse(); assertThatThrownBy(() -> service.updateDocumentByAdmin( 12L, "unknownUrl", "/uploads/guide-applications/unknown.png")) .isInstanceOf(BusinessException.class) .hasMessage("不支持的证件类型"); verify(userMapper, never()).updateById(user); } }