mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-09 01:04:04 +00:00
renamed template method to not rely on overloading
added test for scheduler service bean
This commit is contained in:
@@ -32,7 +32,7 @@ public class Ban extends AbstractConditionableCommand {
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||
Member member = (Member) parameters.get(0);
|
||||
String defaultReason = templateService.renderTemplate("ban_default_reason", null);
|
||||
String defaultReason = templateService.renderTemplateWithMap("ban_default_reason", null);
|
||||
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||
|
||||
BanLog banLogModel = (BanLog) ContextConverter.fromCommandContext(commandContext, BanLog.class);
|
||||
|
||||
@@ -29,7 +29,7 @@ public class BanId extends AbstractConditionableCommand {
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||
Long userId = (Long) parameters.get(0);
|
||||
String defaultReason = templateService.renderTemplate("ban_default_reason", null);
|
||||
String defaultReason = templateService.renderTemplateWithMap("ban_default_reason", null);
|
||||
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||
BanIdLog banLogModel = (BanIdLog) ContextConverter.fromCommandContext(commandContext, BanIdLog.class);
|
||||
banLogModel.setBannedUserId(userId);
|
||||
|
||||
@@ -31,7 +31,7 @@ public class Kick extends AbstractConditionableCommand {
|
||||
|
||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||
Member member = (Member) parameters.get(0);
|
||||
String defaultReason = templateService.renderTemplate("ban_default_reason", null);
|
||||
String defaultReason = templateService.renderTemplateWithMap("ban_default_reason", null);
|
||||
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||
|
||||
KickLogModel kickLogModel = (KickLogModel) ContextConverter.fromCommandContext(commandContext, KickLogModel.class);
|
||||
|
||||
@@ -36,7 +36,7 @@ public class Warn extends AbstractConditionableCommand {
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||
Member member = (Member) parameters.get(0);
|
||||
String defaultReason = templateService.renderTemplate("warn_default_reason", null);
|
||||
String defaultReason = templateService.renderTemplateWithMap("warn_default_reason", null);
|
||||
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||
WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class);
|
||||
warnLogModel.setWarnedUser(member);
|
||||
|
||||
@@ -43,7 +43,7 @@ public class JoinLogger implements JoinListener {
|
||||
@Override
|
||||
public void execute(Member member, Guild guild) {
|
||||
HashMap<String, Object> parameters = getUserParameter(member.getUser());
|
||||
String text = templateService.renderTemplate(USER_JOIN_TEMPLATE, parameters);;
|
||||
String text = templateService.renderTemplateWithMap(USER_JOIN_TEMPLATE, parameters);;
|
||||
postTargetService.sendTextInPostTarget(text, JOIN_LOG_TARGET, guild.getIdLong());
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class LeaveLogger implements LeaveListener {
|
||||
|
||||
@Override
|
||||
public void execute(Member member, Guild guild) {
|
||||
String text = templateService.renderTemplate(USER_LEAVE_TEMPLATE, getUserParameter(member.getUser()));
|
||||
String text = templateService.renderTemplateWithMap(USER_LEAVE_TEMPLATE, getUserParameter(member.getUser()));
|
||||
postTargetService.sendTextInPostTarget(text, LEAVE_LOG_TARGET, guild.getIdLong());
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ public class Help implements Command {
|
||||
if(templateKey == null || !commandConfiguration.isTemplated()) {
|
||||
return defaultText;
|
||||
} else {
|
||||
return templateService.renderTemplate(templateKey, null);
|
||||
return templateService.renderTemplateWithMap(templateKey, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,12 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<version>2.2.6.RELEASE</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
@@ -110,6 +115,12 @@
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,145 @@
|
||||
package dev.sheldan.abstracto.scheduling.factory;
|
||||
|
||||
import dev.sheldan.abstracto.scheduling.model.database.SchedulerJob;
|
||||
import dev.sheldan.abstracto.scheduling.service.SchedulerServiceBean;
|
||||
import dev.sheldan.abstracto.scheduling.service.management.SchedulerJobManagementServiceBean;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import org.quartz.*;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
|
||||
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
|
||||
import static org.quartz.TriggerBuilder.*;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class SchedulerServiceBeanTest {
|
||||
|
||||
public static final String JOB_CLASS = "dev.sheldan.abstracto.scheduling.factory.TestJob";
|
||||
public static final String JOB_NAME = "jobName";
|
||||
public static final String GROUP_NAME = "groupName";
|
||||
|
||||
@InjectMocks
|
||||
private SchedulerServiceBean classToTest;
|
||||
|
||||
@Mock
|
||||
private SchedulerFactoryBean schedulerFactoryBean;
|
||||
|
||||
@Mock
|
||||
private ApplicationContext context;
|
||||
|
||||
@Mock
|
||||
private QuartzConfigFactory scheduleCreator;
|
||||
|
||||
@Mock
|
||||
private SchedulerJobManagementServiceBean schedulerJobManagementServiceBean;
|
||||
|
||||
@Mock
|
||||
private Scheduler scheduler;
|
||||
|
||||
@Before
|
||||
public void setup() throws ClassNotFoundException {
|
||||
when(schedulerFactoryBean.getScheduler()).thenReturn(scheduler);
|
||||
when(scheduleCreator.createJob(eq(TestJob.class), anyBoolean(), any(), anyString(), anyString(), anyBoolean())).thenReturn(getJobDetail());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartingAllJobs() throws SchedulerException {
|
||||
when(schedulerJobManagementServiceBean.findAll()).thenReturn(allCronJobsActive());
|
||||
classToTest.startScheduledJobs();
|
||||
verify(scheduler, times(2)).checkExists(eq(new JobKey("jobName", "groupName")));
|
||||
verify(scheduler, times(2)).addJob(any(JobDetail.class), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartSomeJobs() throws SchedulerException {
|
||||
when(schedulerJobManagementServiceBean.findAll()).thenReturn(someCronJobsActive());
|
||||
classToTest.startScheduledJobs();
|
||||
verify(scheduler, times(1)).checkExists(eq(new JobKey("jobName", "groupName")));
|
||||
verify(scheduler, times(1)).addJob(any(JobDetail.class), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidClass() throws SchedulerException {
|
||||
when(schedulerJobManagementServiceBean.findAll()).thenReturn(Arrays.asList(SchedulerJob.builder().active(true).cronExpression("*").clazz("invalidJob").groupName(GROUP_NAME).name(JOB_NAME).build()));
|
||||
classToTest.startScheduledJobs();
|
||||
verify(scheduler, times(0)).checkExists(eq(new JobKey("jobName", "groupName")));
|
||||
verify(scheduler, times(0)).addJob(any(JobDetail.class), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void scheduleSingleJob() throws SchedulerException {
|
||||
classToTest.scheduleJob(activeJobCronJob());
|
||||
verify(scheduler, times(1)).checkExists(eq(new JobKey("jobName", "groupName")));
|
||||
verify(scheduler, times(1)).addJob(any(JobDetail.class), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void unScheduleSingleJob() throws SchedulerException {
|
||||
classToTest.unScheduleJob(JOB_NAME);
|
||||
verify(scheduler, times(1)).unscheduleJob(any(TriggerKey.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void executeJobOnce() throws SchedulerException {
|
||||
when(scheduleCreator.createOnceOnlyTriggerForJob(eq(JOB_NAME), eq(GROUP_NAME), any(Date.class), any(JobDataMap.class))).thenReturn(Mockito.mock(Trigger.class));
|
||||
classToTest.executeJobWithParametersOnce(JOB_NAME, GROUP_NAME, new JobDataMap(), new Date());
|
||||
verify(scheduler, times(1)).scheduleJob(any(Trigger.class));
|
||||
}
|
||||
|
||||
private List<SchedulerJob> allCronJobsActive() {
|
||||
List<SchedulerJob> jobs = new ArrayList<>();
|
||||
jobs.add(activeJobCronJob());
|
||||
jobs.add(activeJobCronJob());
|
||||
return jobs;
|
||||
}
|
||||
|
||||
private List<SchedulerJob> someCronJobsActive() {
|
||||
List<SchedulerJob> jobs = new ArrayList<>();
|
||||
jobs.add(activeJobCronJob());
|
||||
jobs.add(inactiveCronJob());
|
||||
return jobs;
|
||||
}
|
||||
|
||||
private SchedulerJob activeJobCronJob() {
|
||||
return SchedulerJob.builder().active(true).cronExpression("*").clazz(JOB_CLASS).groupName(GROUP_NAME).name(JOB_NAME).build();
|
||||
}
|
||||
|
||||
private SchedulerJob inactiveCronJob() {
|
||||
return SchedulerJob.builder().active(false).cronExpression("*").clazz(JOB_CLASS).groupName(GROUP_NAME).name(JOB_NAME).build();
|
||||
}
|
||||
|
||||
private JobDetail getJobDetail() throws ClassNotFoundException {
|
||||
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
|
||||
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(JOB_CLASS);
|
||||
factoryBean.setJobClass(jobClass);
|
||||
factoryBean.setDurability(true);
|
||||
factoryBean.setApplicationContext(context);
|
||||
factoryBean.setRequestsRecovery(false);
|
||||
factoryBean.setName(JOB_NAME);
|
||||
factoryBean.setGroup(GROUP_NAME);
|
||||
|
||||
JobDataMap jobDataMap = new JobDataMap();
|
||||
jobDataMap.put(JOB_NAME + GROUP_NAME, jobClass.getName());
|
||||
factoryBean.setJobDataMap(jobDataMap);
|
||||
|
||||
factoryBean.afterPropertiesSet();
|
||||
return factoryBean.getObject();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.scheduling.factory;
|
||||
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
import org.springframework.scheduling.quartz.QuartzJobBean;
|
||||
|
||||
public class TestJob extends QuartzJobBean {
|
||||
@Override
|
||||
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class TemplateServiceBean implements TemplateService {
|
||||
private String getPageString(Integer count) {
|
||||
HashMap<String, Object> params = new HashMap<>();
|
||||
params.put("count", count);
|
||||
return renderTemplate("embed_page_count", params);
|
||||
return renderTemplateWithMap("embed_page_count", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,7 +111,7 @@ public class TemplateServiceBean implements TemplateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String renderTemplate(String key, HashMap<String, Object> parameters) {
|
||||
public String renderTemplateWithMap(String key, HashMap<String, Object> parameters) {
|
||||
try {
|
||||
return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), parameters);
|
||||
} catch (IOException | TemplateException e) {
|
||||
|
||||
@@ -8,6 +8,6 @@ import java.util.HashMap;
|
||||
public interface TemplateService {
|
||||
String renderTemplate(Template template);
|
||||
MessageToSend renderEmbedTemplate(String key, Object model);
|
||||
String renderTemplate(String key, HashMap<String, Object> parameters);
|
||||
String renderTemplateWithMap(String key, HashMap<String, Object> parameters);
|
||||
String renderTemplate(String key, Object model);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user