1616
1717package org .springframework .ai .chat .memory .jdbc ;
1818
19- import java .sql .Timestamp ;
20- import java .util .List ;
21- import java .util .UUID ;
22-
23- import javax .sql .DataSource ;
24-
2519import org .junit .jupiter .api .BeforeAll ;
2620import org .junit .jupiter .api .Test ;
2721import org .junit .jupiter .params .ParameterizedTest ;
2822import org .junit .jupiter .params .provider .CsvSource ;
29- import org .testcontainers .containers .PostgreSQLContainer ;
30- import org .testcontainers .junit .jupiter .Container ;
31- import org .testcontainers .junit .jupiter .Testcontainers ;
32- import org .testcontainers .utility .MountableFile ;
33-
3423import org .springframework .ai .chat .memory .ChatMemory ;
35- import org .springframework .ai .chat .messages .AssistantMessage ;
36- import org .springframework .ai .chat .messages .Message ;
37- import org .springframework .ai .chat .messages .MessageType ;
38- import org .springframework .ai .chat .messages .SystemMessage ;
39- import org .springframework .ai .chat .messages .UserMessage ;
24+ import org .springframework .ai .chat .messages .*;
4025import org .springframework .boot .SpringBootConfiguration ;
4126import org .springframework .boot .autoconfigure .EnableAutoConfiguration ;
4227import org .springframework .boot .autoconfigure .jdbc .DataSourceAutoConfiguration ;
4631import org .springframework .context .annotation .Bean ;
4732import org .springframework .context .annotation .Primary ;
4833import org .springframework .jdbc .core .JdbcTemplate ;
34+ import org .testcontainers .containers .PostgreSQLContainer ;
35+ import org .testcontainers .junit .jupiter .Container ;
36+ import org .testcontainers .junit .jupiter .Testcontainers ;
37+ import org .testcontainers .utility .MountableFile ;
38+
39+ import javax .sql .DataSource ;
40+ import java .sql .Timestamp ;
41+ import java .util .List ;
42+ import java .util .UUID ;
4943
5044import static org .assertj .core .api .Assertions .assertThat ;
5145
@@ -147,10 +141,11 @@ void get_shouldReturnMessages() {
147141 this .contextRunner .run (context -> {
148142 var chatMemory = context .getBean (ChatMemory .class );
149143 var conversationId = UUID .randomUUID ().toString ();
150- var messages = List .<Message >of (new AssistantMessage ("Message from assistant 1 - " + conversationId ),
151- new AssistantMessage ("Message from assistant 2 - " + conversationId ),
152- new UserMessage ("Message from user - " + conversationId ),
153- new SystemMessage ("Message from system - " + conversationId ));
144+ var messages = List .<Message >of (new SystemMessage ("Message from system - " + conversationId ),
145+ new UserMessage ("Message from user 1 - " + conversationId ),
146+ new AssistantMessage ("Message from assistant 1 - " + conversationId ),
147+ new UserMessage ("Message from user 2 - " + conversationId ),
148+ new AssistantMessage ("Message from assistant 2 - " + conversationId ));
154149
155150 chatMemory .add (conversationId , messages );
156151
@@ -161,6 +156,24 @@ void get_shouldReturnMessages() {
161156 });
162157 }
163158
159+ @ Test
160+ void get_afterMultipleAdds_shouldReturnMessagesInSameOrder () {
161+ this .contextRunner .run (context -> {
162+ var chatMemory = context .getBean (ChatMemory .class );
163+ var conversationId = UUID .randomUUID ().toString ();
164+ var userMessage = new UserMessage ("Message from user - " + conversationId );
165+ var assistantMessage = new AssistantMessage ("Message from assistant - " + conversationId );
166+
167+ chatMemory .add (conversationId , userMessage );
168+ chatMemory .add (conversationId , assistantMessage );
169+
170+ var results = chatMemory .get (conversationId , Integer .MAX_VALUE );
171+
172+ assertThat (results .size ()).isEqualTo (2 );
173+ assertThat (results ).isEqualTo (List .of (userMessage , assistantMessage ));
174+ });
175+ }
176+
164177 @ Test
165178 void clear_shouldDeleteMessages () {
166179 this .contextRunner .run (context -> {
0 commit comments