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);
}
}

View File

@@ -0,0 +1,77 @@
package com.ruoyi.cms.service.impl;
import com.ruoyi.cms.domain.AppUserNoticeSetting;
import com.ruoyi.cms.domain.dto.NoticeSettingRequest;
import com.ruoyi.cms.domain.vo.NoticeSettingVO;
import com.ruoyi.cms.mapper.AppUserNoticeSettingMapper;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class AppUserNoticeSettingServiceImplTest
{
@Test
void returnsAllEnabledDefaultsWhenUserHasNotSavedSettings()
{
AppUserNoticeSettingMapper mapper = mock(AppUserNoticeSettingMapper.class);
when(mapper.selectOne(any())).thenReturn(null);
AppUserNoticeSettingServiceImpl service = new AppUserNoticeSettingServiceImpl(mapper);
NoticeSettingVO result = service.getSettings(12L);
assertTrue(result.getJobUpdateEnabled());
assertTrue(result.getAppointmentReminderEnabled());
assertTrue(result.getSystemNotificationEnabled());
assertTrue(result.getInterviewNotificationEnabled());
}
@Test
void returnsPersistedSettingsForCurrentUser()
{
AppUserNoticeSettingMapper mapper = mock(AppUserNoticeSettingMapper.class);
AppUserNoticeSetting setting = new AppUserNoticeSetting();
setting.setJobUpdateEnabled(false);
setting.setAppointmentReminderEnabled(true);
setting.setSystemNotificationEnabled(false);
setting.setInterviewNotificationEnabled(true);
when(mapper.selectOne(any())).thenReturn(setting);
AppUserNoticeSettingServiceImpl service = new AppUserNoticeSettingServiceImpl(mapper);
NoticeSettingVO result = service.getSettings(12L);
assertFalse(result.getJobUpdateEnabled());
assertTrue(result.getAppointmentReminderEnabled());
assertFalse(result.getSystemNotificationEnabled());
assertTrue(result.getInterviewNotificationEnabled());
}
@Test
void savesAllFourSettingsForTheAuthenticatedUser()
{
AppUserNoticeSettingMapper mapper = mock(AppUserNoticeSettingMapper.class);
AppUserNoticeSettingServiceImpl service = new AppUserNoticeSettingServiceImpl(mapper);
NoticeSettingRequest request = new NoticeSettingRequest();
request.setJobUpdateEnabled(true);
request.setAppointmentReminderEnabled(false);
request.setSystemNotificationEnabled(true);
request.setInterviewNotificationEnabled(false);
service.saveSettings(12L, request);
ArgumentCaptor<AppUserNoticeSetting> captor = ArgumentCaptor.forClass(AppUserNoticeSetting.class);
verify(mapper).upsert(captor.capture());
AppUserNoticeSetting saved = captor.getValue();
assertEquals(12L, saved.getUserId());
assertTrue(saved.getJobUpdateEnabled());
assertFalse(saved.getAppointmentReminderEnabled());
assertTrue(saved.getSystemNotificationEnabled());
assertFalse(saved.getInterviewNotificationEnabled());
}
}