feat: add job seeker notice settings API

This commit is contained in:
2026-07-22 20:29:59 +08:00
parent 0dc3ff96fc
commit c8c70652ac
13 changed files with 546 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.dto.NoticeSettingRequest;
import com.ruoyi.cms.domain.vo.NoticeSettingVO;
import com.ruoyi.cms.service.IAppUserNoticeSettingService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.model.LoginSiteUser;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import java.lang.reflect.Field;
import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
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 AppNoticeInfoControllerTest
{
@AfterEach
void clearSecurityContext()
{
SecurityContextHolder.clearContext();
}
@Test
void jobSeekerCanReadOwnSettings() throws Exception
{
IAppUserNoticeSettingService service = mock(IAppUserNoticeSettingService.class);
NoticeSettingVO expected = new NoticeSettingVO();
expected.setJobUpdateEnabled(true);
expected.setAppointmentReminderEnabled(true);
expected.setSystemNotificationEnabled(false);
expected.setInterviewNotificationEnabled(true);
when(service.getSettings(12L)).thenReturn(expected);
authenticateSiteUser(12L, "1");
AppNoticeInfoController controller = controllerWith(service);
AjaxResult result = controller.getSettings();
assertEquals(200, result.get(AjaxResult.CODE_TAG));
assertEquals(expected, result.get(AjaxResult.DATA_TAG));
verify(service).getSettings(12L);
}
@Test
void nonJobSeekerCannotSaveSettings() throws Exception
{
IAppUserNoticeSettingService service = mock(IAppUserNoticeSettingService.class);
authenticateSiteUser(12L, "0");
NoticeSettingRequest request = new NoticeSettingRequest();
request.setJobUpdateEnabled(true);
request.setAppointmentReminderEnabled(true);
request.setSystemNotificationEnabled(true);
request.setInterviewNotificationEnabled(true);
AppNoticeInfoController controller = controllerWith(service);
AjaxResult result = controller.saveSettings(request);
assertEquals(403, result.get(AjaxResult.CODE_TAG));
verify(service, never()).saveSettings(eq(12L), any(NoticeSettingRequest.class));
}
private AppNoticeInfoController controllerWith(IAppUserNoticeSettingService service) throws Exception
{
AppNoticeInfoController controller = new AppNoticeInfoController();
Field field = AppNoticeInfoController.class.getDeclaredField("appUserNoticeSettingService");
field.setAccessible(true);
field.set(controller, service);
return controller;
}
private void authenticateSiteUser(Long userId, String userType)
{
AppUser appUser = new AppUser();
appUser.setIsCompanyUser(userType);
LoginSiteUser loginUser = new LoginSiteUser(userId, appUser);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
loginUser, null, Collections.emptyList());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}