11package org .togetherjava .tjbot .features .moderation .scam ;
22
3+ import net .dv8tion .jda .api .entities .Member ;
34import net .dv8tion .jda .api .entities .Message ;
5+ import net .dv8tion .jda .api .entities .Role ;
46import org .junit .jupiter .api .BeforeEach ;
57import org .junit .jupiter .api .DisplayName ;
68import org .junit .jupiter .api .Test ;
@@ -50,6 +52,8 @@ void setUp() {
5052 when (scamConfig .getSuspiciousAttachmentNamePattern ())
5153 .thenReturn (SUSPICIOUS_ATTACHMENT_NAME );
5254
55+ when (scamConfig .getTrustedUserRolePattern ()).thenReturn ("Moderator" );
56+
5357 scamDetector = new ScamDetector (config );
5458 }
5559
@@ -205,6 +209,23 @@ void ignoresHarmlessAttachments() {
205209 assertFalse (isScamResult );
206210 }
207211
212+ @ Test
213+ @ DisplayName ("Suspicious messages send by trusted users are not flagged" )
214+ void ignoreTrustedUser () {
215+ // GIVEN a scam message send by a trusted user
216+ String content = "Checkout https://bit.ly/3IhcLiO to get your free nitro !" ;
217+ Member trustedUser = createAuthorMock (List .of ("Moderator" ));
218+ Message message = createMessageMock (content , List .of ());
219+
220+ when (message .getMember ()).thenReturn (trustedUser );
221+
222+ // WHEN analyzing it
223+ boolean isScamResult = scamDetector .isScam (message );
224+
225+ // THEN flags it as harmless
226+ assertTrue (isScamResult );
227+ }
228+
208229 private static Message createMessageMock (String content , List <Message .Attachment > attachments ) {
209230 Message message = mock (Message .class );
210231 when (message .getContentRaw ()).thenReturn (content );
@@ -220,6 +241,19 @@ private static Message.Attachment createImageAttachmentMock(String name) {
220241 return attachment ;
221242 }
222243
244+ private static Member createAuthorMock (List <String > roleNames ) {
245+ List <Role > roles = new ArrayList <>();
246+ for (String roleName : roleNames ) {
247+ Role role = mock (Role .class );
248+ when (role .getName ()).thenReturn (roleName );
249+ roles .add (role );
250+ }
251+
252+ Member member = mock (Member .class );
253+ when (member .getRoles ()).thenReturn (roles );
254+ return member ;
255+ }
256+
223257 private static List <String > provideRealScamMessages () {
224258 return List .of ("""
225259 🤩bro steam gived nitro - https://nitro-ds.online/LfgUfMzqYyx12""" ,
0 commit comments