1
1
package org .togetherjava .tjbot .commands .reminder ;
2
2
3
3
import net .dv8tion .jda .api .entities .Member ;
4
- import net .dv8tion .jda .api .entities .TextChannel ;
5
4
import net .dv8tion .jda .api .events .interaction .SlashCommandEvent ;
6
5
import org .jetbrains .annotations .NotNull ;
7
6
import org .junit .jupiter .api .Assertions ;
11
10
import org .junit .jupiter .api .function .Executable ;
12
11
import org .togetherjava .tjbot .commands .SlashCommand ;
13
12
import org .togetherjava .tjbot .db .Database ;
14
- import org .togetherjava .tjbot .db .generated .Tables ;
15
- import org .togetherjava .tjbot .db .generated .tables .records .PendingRemindersRecord ;
16
13
import org .togetherjava .tjbot .jda .JdaTester ;
17
14
18
15
import java .time .Instant ;
26
23
import static org .togetherjava .tjbot .db .generated .tables .PendingReminders .PENDING_REMINDERS ;
27
24
28
25
final class RemindCommandTest {
29
- private Database database ;
30
26
private SlashCommand command ;
31
27
private JdaTester jdaTester ;
28
+ private RawReminderTestHelper rawReminders ;
32
29
33
30
@ BeforeEach
34
31
void setUp () {
35
- database = Database .createMemoryDatabase (PENDING_REMINDERS );
32
+ Database database = Database .createMemoryDatabase (PENDING_REMINDERS );
36
33
command = new RemindCommand (database );
37
34
jdaTester = new JdaTester ();
35
+ rawReminders = new RawReminderTestHelper (database , jdaTester );
38
36
}
39
37
40
38
private @ NotNull SlashCommandEvent triggerSlashCommand (int timeAmount , @ NotNull String timeUnit ,
@@ -55,43 +53,6 @@ void setUp() {
55
53
return event ;
56
54
}
57
55
58
- private void insertReminderRaw (@ NotNull String content , @ NotNull Instant remindAt ) {
59
- insertReminderRaw (content , remindAt , jdaTester .getMemberSpy ());
60
- }
61
-
62
- private void insertReminderRaw (@ NotNull String content , @ NotNull Instant remindAt ,
63
- @ NotNull Member author ) {
64
- TextChannel channel = jdaTester .getTextChannelSpy ();
65
- long channelId = channel .getIdLong ();
66
- long guildId = channel .getGuild ().getIdLong ();
67
- long authorId = author .getIdLong ();
68
-
69
- database .write (context -> context .newRecord (Tables .PENDING_REMINDERS )
70
- .setCreatedAt (Instant .now ())
71
- .setGuildId (guildId )
72
- .setChannelId (channelId )
73
- .setAuthorId (authorId )
74
- .setRemindAt (remindAt )
75
- .setContent (content )
76
- .insert ());
77
- }
78
-
79
- private List <String > readRemindersRaw () {
80
- return readRemindersRaw (jdaTester .getMemberSpy ());
81
- }
82
-
83
- private List <String > readRemindersRaw (@ NotNull Member author ) {
84
- long guildId = jdaTester .getTextChannelSpy ().getGuild ().getIdLong ();
85
- long authorId = author .getIdLong ();
86
-
87
- return database .read (context -> context .selectFrom (PENDING_REMINDERS )
88
- .where (PENDING_REMINDERS .AUTHOR_ID .eq (authorId )
89
- .and (PENDING_REMINDERS .GUILD_ID .eq (guildId )))
90
- .stream ()
91
- .map (PendingRemindersRecord ::getContent )
92
- .toList ());
93
- }
94
-
95
56
@ Test
96
57
@ DisplayName ("Throws an exception if the time unit is not supported, i.e. not part of the actual choice dialog" )
97
58
void throwsWhenGivenUnsupportedUnit () {
@@ -101,7 +62,7 @@ void throwsWhenGivenUnsupportedUnit() {
101
62
102
63
// THEN command throws, no reminder was created
103
64
Assertions .assertThrows (IllegalArgumentException .class , triggerRemind );
104
- assertTrue (readRemindersRaw ().isEmpty ());
65
+ assertTrue (rawReminders . readReminders ().isEmpty ());
105
66
}
106
67
107
68
@ Test
@@ -113,7 +74,7 @@ void doesNotSupportDatesTooFarInFuture() {
113
74
114
75
// THEN rejects and responds accordingly, no reminder was created
115
76
verify (event ).reply (startsWith ("The reminder is set too far in the future" ));
116
- assertTrue (readRemindersRaw ().isEmpty ());
77
+ assertTrue (rawReminders . readReminders ().isEmpty ());
117
78
}
118
79
119
80
@ Test
@@ -122,7 +83,7 @@ void userIsLimitedIfTooManyPendingReminders() {
122
83
// GIVEN a user with too many reminders still pending
123
84
Instant remindAt = Instant .now ().plus (100 , ChronoUnit .DAYS );
124
85
for (int i = 0 ; i < RemindCommand .MAX_PENDING_REMINDERS_PER_USER ; i ++) {
125
- insertReminderRaw ("foo " + i , remindAt );
86
+ rawReminders . insertReminder ("foo " + i , remindAt );
126
87
}
127
88
128
89
// WHEN triggering another reminder
@@ -131,7 +92,8 @@ void userIsLimitedIfTooManyPendingReminders() {
131
92
// THEN rejects and responds accordingly, no new reminder was created
132
93
verify (event )
133
94
.reply (startsWith ("You have reached the maximum amount of pending reminders per user" ));
134
- assertEquals (RemindCommand .MAX_PENDING_REMINDERS_PER_USER , readRemindersRaw ().size ());
95
+ assertEquals (RemindCommand .MAX_PENDING_REMINDERS_PER_USER ,
96
+ rawReminders .readReminders ().size ());
135
97
}
136
98
137
99
@ Test
@@ -142,7 +104,7 @@ void userIsNotLimitedIfOtherUserHasTooManyPendingReminders() {
142
104
Member firstUser = jdaTester .createMemberSpy (1 );
143
105
Instant remindAt = Instant .now ().plus (100 , ChronoUnit .DAYS );
144
106
for (int i = 0 ; i < RemindCommand .MAX_PENDING_REMINDERS_PER_USER ; i ++) {
145
- insertReminderRaw ("foo " + i , remindAt , firstUser );
107
+ rawReminders . insertReminder ("foo " + i , remindAt , firstUser );
146
108
}
147
109
148
110
Member secondUser = jdaTester .createMemberSpy (2 );
@@ -153,7 +115,7 @@ void userIsNotLimitedIfOtherUserHasTooManyPendingReminders() {
153
115
// THEN accepts the reminder and responds accordingly
154
116
verify (event ).reply ("Will remind you about 'foo' in 5 minutes." );
155
117
156
- List <String > remindersOfSecondUser = readRemindersRaw (secondUser );
118
+ List <String > remindersOfSecondUser = rawReminders . readReminders (secondUser );
157
119
assertEquals (1 , remindersOfSecondUser .size ());
158
120
assertEquals ("foo" , remindersOfSecondUser .get (0 ));
159
121
}
@@ -168,7 +130,7 @@ void canCreateReminders() {
168
130
// THEN accepts the reminder and responds accordingly
169
131
verify (event ).reply ("Will remind you about 'foo' in 5 minutes." );
170
132
171
- List <String > pendingReminders = readRemindersRaw ();
133
+ List <String > pendingReminders = rawReminders . readReminders ();
172
134
assertEquals (1 , pendingReminders .size ());
173
135
assertEquals ("foo" , pendingReminders .get (0 ));
174
136
}
0 commit comments