mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-28 08:38:52 +00:00
[AB-203] restructuring listeners to use more common code and common interfaces for listeners and models
restructuring entity listener to be async and added models fixing usage of repository save method adding interface dependencies to bundle dependency management
This commit is contained in:
@@ -2,9 +2,9 @@ package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncEmoteCreatedListener;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteCreatedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingMode;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||
@@ -28,24 +28,20 @@ public class CreateTrackedEmoteListener implements AsyncEmoteCreatedListener {
|
||||
@Autowired
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Override
|
||||
public void emoteCreated(CachedEmote createdEmote) {
|
||||
log.info("Creating tracked emote {} in server {}.", createdEmote.getServerId(), createdEmote.getEmoteId());
|
||||
trackedEmoteManagementService.createTrackedEmote(createdEmote);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return StatisticFeatureDefinition.EMOTE_TRACKING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return ListenerPriority.MEDIUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getFeatureModeLimitations() {
|
||||
return Arrays.asList(EmoteTrackingMode.AUTO_TRACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultListenerResult execute(EmoteCreatedModel model) {
|
||||
log.info("Creating tracked emote {} in server {}.", model.getServerId(), model.getEmote().getIdLong());
|
||||
trackedEmoteManagementService.createTrackedEmote(model.getEmote());
|
||||
return DefaultListenerResult.PROCESSED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncEmoteDeletedListener;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteDeletedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingMode;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||
@@ -17,7 +17,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This listener listens for deleted {@link Emote} in a {@link net.dv8tion.jda.api.entities.Guild} and markes respective
|
||||
* This listener listens for deleted {@link Emote} in a {@link net.dv8tion.jda.api.entities.Guild} and marks respective
|
||||
* {@link dev.sheldan.abstracto.statistic.emote.model.database.TrackedEmote} as deleted, if the EMOTE_TRACKING feature is enabled and the AUTO_TRACK
|
||||
* feature mode as well.
|
||||
*/
|
||||
@@ -28,24 +28,21 @@ public class DeleteTrackedEmoteListener implements AsyncEmoteDeletedListener {
|
||||
@Autowired
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Override
|
||||
public void emoteDeleted(CachedEmote deletedEmote) {
|
||||
log.info("Marking tracked emote {} in gild {} as deleted.", deletedEmote.getEmoteId(), deletedEmote.getServerId());
|
||||
trackedEmoteManagementService.markAsDeleted(deletedEmote.getServerId(), deletedEmote.getEmoteId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return StatisticFeatureDefinition.EMOTE_TRACKING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return ListenerPriority.MEDIUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getFeatureModeLimitations() {
|
||||
return Arrays.asList(EmoteTrackingMode.AUTO_TRACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultListenerResult execute(EmoteDeletedModel model) {
|
||||
log.info("Marking tracked emote {} in gild {} as deleted.", model.getEmote().getIdLong(), model.getServerId());
|
||||
trackedEmoteManagementService.markAsDeleted(model.getEmote());
|
||||
return DefaultListenerResult.PROCESSED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncMessageReceivedListener;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.listener.MessageReceivedModel;
|
||||
import dev.sheldan.abstracto.core.service.GuildService;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.TrackedEmoteService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -27,17 +28,17 @@ public class EmoteTrackingListener implements AsyncMessageReceivedListener {
|
||||
@Autowired
|
||||
private GuildService guildService;
|
||||
|
||||
@Override
|
||||
public void execute(CachedMessage message) {
|
||||
Map<Long, List<CachedEmote>> collect = message.getEmotes().stream().collect(Collectors.groupingBy(CachedEmote::getEmoteId));
|
||||
collect.values().forEach(groupedEmotes ->
|
||||
trackedEmoteService.addEmoteToRuntimeStorage(groupedEmotes.get(0), guildService.getGuildById(message.getServerId()), (long) groupedEmotes.size())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return StatisticFeatureDefinition.EMOTE_TRACKING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultListenerResult execute(MessageReceivedModel model) {
|
||||
Map<Long, List<Emote>> collect = model.getMessage().getEmotesBag().stream().collect(Collectors.groupingBy(Emote::getIdLong));
|
||||
collect.values().forEach(groupedEmotes ->
|
||||
trackedEmoteService.addEmoteToRuntimeStorage(groupedEmotes.get(0), guildService.getGuildById(model.getServerId()), (long) groupedEmotes.size())
|
||||
);
|
||||
return DefaultListenerResult.PROCESSED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncEmoteUpdatedListener;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncEmoteNameUpdatedListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteNameUpdatedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingMode;
|
||||
import dev.sheldan.abstracto.statistic.emote.model.database.TrackedEmote;
|
||||
@@ -20,29 +20,25 @@ import java.util.List;
|
||||
* if the emote is tracked. This is only executed if the EMOTE_TRACKING feature is enabled,and if the AUTO_TRACK feature mode is enabled.
|
||||
*/
|
||||
@Component
|
||||
public class UpdateTrackedEmoteListener implements AsyncEmoteUpdatedListener {
|
||||
public class UpdateTrackedEmoteNameListener implements AsyncEmoteNameUpdatedListener {
|
||||
|
||||
@Autowired
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Override
|
||||
public void emoteUpdated(CachedEmote updatedEmote, String oldValue, String newValue) {
|
||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByEmoteId(updatedEmote.getEmoteId(), updatedEmote.getServerId());
|
||||
trackedEmoteManagementService.changeName(trackedEmote, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return StatisticFeatureDefinition.EMOTE_TRACKING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return ListenerPriority.MEDIUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getFeatureModeLimitations() {
|
||||
return Arrays.asList(EmoteTrackingMode.AUTO_TRACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultListenerResult execute(EmoteNameUpdatedModel model) {
|
||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByEmote(model.getEmote());
|
||||
trackedEmoteManagementService.changeName(trackedEmote, model.getNewValue());
|
||||
return DefaultListenerResult.PROCESSED;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import dev.sheldan.abstracto.core.metric.service.CounterMetric;
|
||||
import dev.sheldan.abstracto.core.metric.service.MetricService;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.service.CacheEntityService;
|
||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||
import dev.sheldan.abstracto.core.service.FeatureModeService;
|
||||
import dev.sheldan.abstracto.core.service.GuildService;
|
||||
@@ -54,6 +55,9 @@ public class TrackedEmoteServiceBean implements TrackedEmoteService {
|
||||
@Autowired
|
||||
private MetricService metricService;
|
||||
|
||||
@Autowired
|
||||
private CacheEntityService cacheEntityService;
|
||||
|
||||
public static final String EMOTE_USAGES_TRACKED_METRIC = "emote.usages";
|
||||
private static final CounterMetric EMOTE_USAGES_TRACKED =
|
||||
CounterMetric
|
||||
@@ -82,6 +86,11 @@ public class TrackedEmoteServiceBean implements TrackedEmoteService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addEmoteToRuntimeStorage(Emote emote, Guild guild, Long count) {
|
||||
addEmoteToRuntimeStorage(cacheEntityService.getCachedEmoteFromEmote(emote, guild), guild, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void storeEmoteStatistics(Map<Long, List<PersistingEmote>> usagesToStore) {
|
||||
|
||||
@@ -38,6 +38,11 @@ public class TrackedEmoteManagementServiceBean implements TrackedEmoteManagement
|
||||
return createTrackedEmote(emote.getIdLong(), emote.getName(), emote.isAnimated(), true, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedEmote createTrackedEmote(Emote emote) {
|
||||
return createTrackedEmote(emote, emote.getGuild());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedEmote createTrackedEmote(CachedEmote emote) {
|
||||
AServer server = serverManagementService.loadServer(emote.getServerId());
|
||||
@@ -109,6 +114,11 @@ public class TrackedEmoteManagementServiceBean implements TrackedEmoteManagement
|
||||
markAsDeleted(emote);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAsDeleted(Emote emote) {
|
||||
markAsDeleted(emote.getGuild().getIdLong(), emote.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAsDeleted(TrackedEmote trackedemote) {
|
||||
log.info("Marking tracked emote {} in server {} as deleted.", trackedemote.getTrackedEmoteId().getId(), trackedemote.getTrackedEmoteId().getServerId());
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteCreatedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -23,14 +23,19 @@ public class CreateTrackedEmoteListenerTest {
|
||||
@Mock
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Mock
|
||||
private EmoteCreatedModel model;
|
||||
|
||||
private static final Long SERVER_ID = 4L;
|
||||
private static final Long EMOTE_ID = 4L;
|
||||
|
||||
@Test
|
||||
public void testEmoteCreated() {
|
||||
Long serverId = 4L;
|
||||
Long emoteId = 5L;
|
||||
CachedEmote emote = Mockito.mock(CachedEmote.class);
|
||||
when(emote.getEmoteId()).thenReturn(emoteId);
|
||||
when(emote.getServerId()).thenReturn(serverId);
|
||||
testUnit.emoteCreated(emote);
|
||||
Emote emote = Mockito.mock(Emote.class);
|
||||
when(emote.getIdLong()).thenReturn(EMOTE_ID);
|
||||
when(model.getEmote()).thenReturn(emote);
|
||||
when(model.getServerId()).thenReturn(SERVER_ID);
|
||||
testUnit.execute(model);
|
||||
verify(trackedEmoteManagementService, times(1)).createTrackedEmote(emote);
|
||||
}
|
||||
|
||||
@@ -39,8 +44,4 @@ public class CreateTrackedEmoteListenerTest {
|
||||
Assert.assertEquals(StatisticFeatureDefinition.EMOTE_TRACKING, testUnit.getFeature());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPriority() {
|
||||
Assert.assertEquals(ListenerPriority.MEDIUM, testUnit.getPriority());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteDeletedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -23,15 +23,20 @@ public class DeleteTrackedEmoteListenerTest {
|
||||
@Mock
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Mock
|
||||
private EmoteDeletedModel model;
|
||||
|
||||
private static final Long SERVER_ID = 4L;
|
||||
private static final Long EMOTE_ID = 4L;
|
||||
|
||||
@Test
|
||||
public void testEmoteDeleted() {
|
||||
Long serverId = 4L;
|
||||
Long emoteId = 5L;
|
||||
CachedEmote emote = Mockito.mock(CachedEmote.class);
|
||||
when(emote.getEmoteId()).thenReturn(emoteId);
|
||||
when(emote.getServerId()).thenReturn(serverId);
|
||||
testUnit.emoteDeleted(emote);
|
||||
verify(trackedEmoteManagementService, times(1)).markAsDeleted(serverId, emoteId);
|
||||
Emote emote = Mockito.mock(Emote.class);
|
||||
when(emote.getIdLong()).thenReturn(EMOTE_ID);
|
||||
when(model.getEmote()).thenReturn(emote);
|
||||
when(model.getServerId()).thenReturn(SERVER_ID);
|
||||
testUnit.execute(model);
|
||||
verify(trackedEmoteManagementService, times(1)).markAsDeleted(SERVER_ID, EMOTE_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -39,8 +44,4 @@ public class DeleteTrackedEmoteListenerTest {
|
||||
Assert.assertEquals(StatisticFeatureDefinition.EMOTE_TRACKING, testUnit.getFeature());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPriority() {
|
||||
Assert.assertEquals(ListenerPriority.MEDIUM, testUnit.getPriority());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.listener.MessageReceivedModel;
|
||||
import dev.sheldan.abstracto.core.service.GuildService;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.TrackedEmoteService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -31,13 +33,16 @@ public class EmoteTrackingListenerTest {
|
||||
private GuildService guildService;
|
||||
|
||||
@Mock
|
||||
private CachedMessage message;
|
||||
private Message message;
|
||||
|
||||
@Mock
|
||||
private CachedEmote emote1;
|
||||
private MessageReceivedModel messageReceivedModel;
|
||||
|
||||
@Mock
|
||||
private CachedEmote emote2;
|
||||
private Emote emote1;
|
||||
|
||||
@Mock
|
||||
private Emote emote2;
|
||||
|
||||
@Mock
|
||||
private Guild guild;
|
||||
@@ -47,40 +52,43 @@ public class EmoteTrackingListenerTest {
|
||||
|
||||
@Test
|
||||
public void testExecuteOneEmote() {
|
||||
List<CachedEmote> emotesBag = new ArrayList<>();
|
||||
List<Emote> emotesBag = new ArrayList<>();
|
||||
emotesBag.add(emote1);
|
||||
when(guildService.getGuildById(SERVER_ID)).thenReturn(guild);
|
||||
when(message.getServerId()).thenReturn(SERVER_ID);
|
||||
when(messageReceivedModel.getMessage()).thenReturn(message);
|
||||
when(messageReceivedModel.getServerId()).thenReturn(SERVER_ID);
|
||||
when(message.getEmotes()).thenReturn(emotesBag);
|
||||
testUnit.execute(message);
|
||||
testUnit.execute(messageReceivedModel);
|
||||
verify(trackedEmoteService, times(1)).addEmoteToRuntimeStorage(emote1, guild, 1L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteOneEmoteMultipleTimes() {
|
||||
List<CachedEmote> emotesBag = new ArrayList<>();
|
||||
when(emote1.getEmoteId()).thenReturn(EMOTE_ID);
|
||||
when(emote2.getEmoteId()).thenReturn(EMOTE_ID);
|
||||
List<Emote> emotesBag = new ArrayList<>();
|
||||
when(emote1.getIdLong()).thenReturn(EMOTE_ID);
|
||||
when(emote2.getIdLong()).thenReturn(EMOTE_ID);
|
||||
emotesBag.add(emote1);
|
||||
emotesBag.add(emote2);
|
||||
when(guildService.getGuildById(SERVER_ID)).thenReturn(guild);
|
||||
when(message.getServerId()).thenReturn(SERVER_ID);
|
||||
when(messageReceivedModel.getServerId()).thenReturn(SERVER_ID);
|
||||
when(messageReceivedModel.getMessage()).thenReturn(message);
|
||||
when(message.getEmotes()).thenReturn(emotesBag);
|
||||
testUnit.execute(message);
|
||||
testUnit.execute(messageReceivedModel);
|
||||
verify(trackedEmoteService, times(1)).addEmoteToRuntimeStorage(any(CachedEmote.class), eq(guild), eq(2L));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteMultipleEmotes() {
|
||||
List<CachedEmote> emotesBag = new ArrayList<>();
|
||||
when(emote1.getEmoteId()).thenReturn(EMOTE_ID);
|
||||
when(emote2.getEmoteId()).thenReturn(EMOTE_ID + 1);
|
||||
List<Emote> emotesBag = new ArrayList<>();
|
||||
when(emote1.getIdLong()).thenReturn(EMOTE_ID);
|
||||
when(emote2.getIdLong()).thenReturn(EMOTE_ID + 1);
|
||||
emotesBag.add(emote1);
|
||||
emotesBag.add(emote2);
|
||||
when(guildService.getGuildById(SERVER_ID)).thenReturn(guild);
|
||||
when(message.getServerId()).thenReturn(SERVER_ID);
|
||||
when(messageReceivedModel.getServerId()).thenReturn(SERVER_ID);
|
||||
when(messageReceivedModel.getMessage()).thenReturn(message);
|
||||
when(message.getEmotes()).thenReturn(emotesBag);
|
||||
testUnit.execute(message);
|
||||
testUnit.execute(messageReceivedModel);
|
||||
verify(trackedEmoteService, times(1)).addEmoteToRuntimeStorage(emote1, guild, 1L);
|
||||
verify(trackedEmoteService, times(1)).addEmoteToRuntimeStorage(emote2, guild, 1L);
|
||||
}
|
||||
@@ -88,8 +96,9 @@ public class EmoteTrackingListenerTest {
|
||||
@Test
|
||||
public void testExecuteNoEmote() {
|
||||
when(message.getEmotes()).thenReturn(new ArrayList<>());
|
||||
testUnit.execute(message);
|
||||
verify(trackedEmoteService, times(0)).addEmoteToRuntimeStorage(any(), any(), anyLong());
|
||||
when(messageReceivedModel.getMessage()).thenReturn(message);
|
||||
testUnit.execute(messageReceivedModel);
|
||||
verify(trackedEmoteService, times(0)).addEmoteToRuntimeStorage(any(Emote.class), any(), anyLong());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package dev.sheldan.abstracto.statistic.emote.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedEmote;
|
||||
import dev.sheldan.abstracto.core.models.listener.EmoteNameUpdatedModel;
|
||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||
import dev.sheldan.abstracto.statistic.emote.model.database.TrackedEmote;
|
||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -19,22 +19,26 @@ import static org.mockito.Mockito.*;
|
||||
public class UpdateTrackedEmoteListenerTest {
|
||||
|
||||
@InjectMocks
|
||||
private UpdateTrackedEmoteListener testUnit;
|
||||
private UpdateTrackedEmoteNameListener testUnit;
|
||||
|
||||
@Mock
|
||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||
|
||||
@Mock
|
||||
private EmoteNameUpdatedModel model;
|
||||
|
||||
@Test
|
||||
public void testEmoteUpdated() {
|
||||
Long serverId = 1L;
|
||||
Long emoteId = 2L;
|
||||
CachedEmote changedEmote = Mockito.mock(CachedEmote.class);
|
||||
when(changedEmote.getServerId()).thenReturn(serverId);
|
||||
when(changedEmote.getEmoteId()).thenReturn(emoteId);
|
||||
Emote changedEmote = Mockito.mock(Emote.class);
|
||||
when(changedEmote.getIdLong()).thenReturn(emoteId);
|
||||
TrackedEmote trackedEmote = Mockito.mock(TrackedEmote.class);
|
||||
when(trackedEmoteManagementService.loadByEmoteId(emoteId, serverId)).thenReturn(trackedEmote);
|
||||
String newValue = "AFTER";
|
||||
testUnit.emoteUpdated(changedEmote, "BEFORE", newValue);
|
||||
when(model.getEmote()).thenReturn(changedEmote);
|
||||
when(model.getNewValue()).thenReturn(newValue);
|
||||
testUnit.execute(model);
|
||||
verify(trackedEmoteManagementService, times(1)).changeName(trackedEmote, newValue);
|
||||
}
|
||||
|
||||
@@ -43,8 +47,4 @@ public class UpdateTrackedEmoteListenerTest {
|
||||
Assert.assertEquals(StatisticFeatureDefinition.EMOTE_TRACKING, testUnit.getFeature());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPriority() {
|
||||
Assert.assertEquals(ListenerPriority.MEDIUM, testUnit.getPriority());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,14 @@ public interface TrackedEmoteService {
|
||||
*/
|
||||
void addEmoteToRuntimeStorage(CachedEmote emote, Guild guild, Long count);
|
||||
|
||||
/**
|
||||
* Adds the given {@link Emote} with the given amount to the runtime storage for the given {@link Guild}
|
||||
* @param emote The {@link Emote} to add to the runtime storage
|
||||
* @param guild The {@link Guild} in which the {@link Emote} was used and in which the usage should be added
|
||||
* @param count The amount of times which the {@link Emote} has been used and should be reflected in the runtime storage
|
||||
*/
|
||||
void addEmoteToRuntimeStorage(Emote emote, Guild guild, Long count);
|
||||
|
||||
/**
|
||||
* Takes the given map of server_ids with the list of {@link PersistingEmote} and stores the objects in the database
|
||||
* Non existing {@link TrackedEmote} for the server will be created. Depending on the feature mode external emotes will be created.
|
||||
|
||||
@@ -34,6 +34,15 @@ public interface TrackedEmoteManagementService {
|
||||
*/
|
||||
TrackedEmote createTrackedEmote(Emote emote, Guild guild);
|
||||
|
||||
/**
|
||||
* Creates and persists a {@link TrackedEmote} for which tracking is enabled based on the given {@link Emote}.
|
||||
* The emote used here must contain a {@link Guild guild} instance, emotes created from {@link net.dv8tion.jda.api.entities.Message messages}
|
||||
* do not.
|
||||
* @param emote The {@link Emote} to be used to create a {@link TrackedEmote}
|
||||
* @return The created {@link TrackedEmote} instance in the database
|
||||
*/
|
||||
TrackedEmote createTrackedEmote(Emote emote);
|
||||
|
||||
/**
|
||||
* Creates and persists a {@link TrackedEmote} for which tracking is enabled based on the given {@link Emote} and {@link Guild}
|
||||
* @param emote The {@link CachedEmote} to be used to create a {@link TrackedEmote}
|
||||
@@ -106,6 +115,14 @@ public interface TrackedEmoteManagementService {
|
||||
*/
|
||||
void markAsDeleted(Long serverId, Long emoteId);
|
||||
|
||||
/**
|
||||
* Marks the {@link Emote emote} as deleted in the database. This {@link Emote emote} must
|
||||
* not come from a {@link net.dv8tion.jda.api.entities.Message message}, because then the {@link Guild guild}
|
||||
* is null.
|
||||
* @throws TrackedEmoteNotFoundException if no {@link TrackedEmote} with the given IDs can be found
|
||||
*/
|
||||
void markAsDeleted(Emote emote);
|
||||
|
||||
/**
|
||||
* Marks the given {@link TrackedEmote} as deleted
|
||||
* @param trackedEmote The {@link TrackedEmote} which should be marked as deleted
|
||||
|
||||
Reference in New Issue
Block a user