feat: add job seeker notice settings API
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user