mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-04 16:45:44 +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) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
Member member = (Member) parameters.get(0);
|
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;
|
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||||
|
|
||||||
BanLog banLogModel = (BanLog) ContextConverter.fromCommandContext(commandContext, BanLog.class);
|
BanLog banLogModel = (BanLog) ContextConverter.fromCommandContext(commandContext, BanLog.class);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class BanId extends AbstractConditionableCommand {
|
|||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
Long userId = (Long) parameters.get(0);
|
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;
|
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||||
BanIdLog banLogModel = (BanIdLog) ContextConverter.fromCommandContext(commandContext, BanIdLog.class);
|
BanIdLog banLogModel = (BanIdLog) ContextConverter.fromCommandContext(commandContext, BanIdLog.class);
|
||||||
banLogModel.setBannedUserId(userId);
|
banLogModel.setBannedUserId(userId);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class Kick extends AbstractConditionableCommand {
|
|||||||
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
Member member = (Member) parameters.get(0);
|
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;
|
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||||
|
|
||||||
KickLogModel kickLogModel = (KickLogModel) ContextConverter.fromCommandContext(commandContext, KickLogModel.class);
|
KickLogModel kickLogModel = (KickLogModel) ContextConverter.fromCommandContext(commandContext, KickLogModel.class);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class Warn extends AbstractConditionableCommand {
|
|||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
Member member = (Member) parameters.get(0);
|
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;
|
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||||
WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class);
|
WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class);
|
||||||
warnLogModel.setWarnedUser(member);
|
warnLogModel.setWarnedUser(member);
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class JoinLogger implements JoinListener {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(Member member, Guild guild) {
|
public void execute(Member member, Guild guild) {
|
||||||
HashMap<String, Object> parameters = getUserParameter(member.getUser());
|
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());
|
postTargetService.sendTextInPostTarget(text, JOIN_LOG_TARGET, guild.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class LeaveLogger implements LeaveListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Member member, Guild guild) {
|
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());
|
postTargetService.sendTextInPostTarget(text, LEAVE_LOG_TARGET, guild.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class Help implements Command {
|
|||||||
if(templateKey == null || !commandConfiguration.isTemplated()) {
|
if(templateKey == null || !commandConfiguration.isTemplated()) {
|
||||||
return defaultText;
|
return defaultText;
|
||||||
} else {
|
} else {
|
||||||
return templateService.renderTemplate(templateKey, null);
|
return templateService.renderTemplateWithMap(templateKey, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,12 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<version>2.2.6.RELEASE</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
@@ -110,6 +115,12 @@
|
|||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-collections4</artifactId>
|
<artifactId>commons-collections4</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</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) {
|
private String getPageString(Integer count) {
|
||||||
HashMap<String, Object> params = new HashMap<>();
|
HashMap<String, Object> params = new HashMap<>();
|
||||||
params.put("count", count);
|
params.put("count", count);
|
||||||
return renderTemplate("embed_page_count", params);
|
return renderTemplateWithMap("embed_page_count", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -111,7 +111,7 @@ public class TemplateServiceBean implements TemplateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String renderTemplate(String key, HashMap<String, Object> parameters) {
|
public String renderTemplateWithMap(String key, HashMap<String, Object> parameters) {
|
||||||
try {
|
try {
|
||||||
return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), parameters);
|
return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), parameters);
|
||||||
} catch (IOException | TemplateException e) {
|
} catch (IOException | TemplateException e) {
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ import java.util.HashMap;
|
|||||||
public interface TemplateService {
|
public interface TemplateService {
|
||||||
String renderTemplate(Template template);
|
String renderTemplate(Template template);
|
||||||
MessageToSend renderEmbedTemplate(String key, Object model);
|
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);
|
String renderTemplate(String key, Object model);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user