Skip to content

Commit

Permalink
Added new object annotation from the checker framework. Also added wh…
Browse files Browse the repository at this point in the history
…atsapp specific tests.
  • Loading branch information
nandita727 committed Jan 25, 2024
1 parent 77b091f commit f586eff
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 22 deletions.
4 changes: 3 additions & 1 deletion src/main/java/com/meta/cp4m/message/FBMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
package com.meta.cp4m.message;

import com.meta.cp4m.Identifier;
import org.checkerframework.checker.lock.qual.NewObject;

import java.time.Instant;

public record FBMessage(
Expand All @@ -21,7 +23,7 @@ public record FBMessage(
Message parentMessage)
implements Message {
@Override
public Message withParentMessage(Message parentMessage) {
public @NewObject Message withParentMessage(Message parentMessage) {
return new FBMessage(timestamp(),instanceId(),senderId(),recipientId(),message(), role(), parentMessage);
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/meta/cp4m/message/Message.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
package com.meta.cp4m.message;

import com.meta.cp4m.Identifier;
import org.checkerframework.checker.lock.qual.NewObject;
import org.checkerframework.checker.nullness.qual.Nullable;

import java.time.Instant;
Expand All @@ -21,7 +22,7 @@ private static Identifier threadId(Identifier id1, Identifier id2) {
return Identifier.from(id2.toString() + '|' + id1);
}

public <T extends Message> T withParentMessage(Message parentMessage);
public <T extends Message> @NewObject T withParentMessage(Message parentMessage);

Instant timestamp();

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/meta/cp4m/message/WAMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
package com.meta.cp4m.message;

import com.meta.cp4m.Identifier;
import org.checkerframework.checker.lock.qual.NewObject;

import java.time.Instant;

public record WAMessage(
Expand All @@ -21,7 +23,7 @@ public record WAMessage(
Message parentMessage)
implements Message {
@Override
public Message withParentMessage(Message parentMessage) {
public @NewObject Message withParentMessage(Message parentMessage) {
return new WAMessage(timestamp(),instanceId(),senderId(),recipientId(),message(), role(), parentMessage);
}
}
72 changes: 53 additions & 19 deletions src/test/java/com/meta/cp4m/store/ThreadStateTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,21 @@
import static org.assertj.core.api.Assertions.*;

import com.meta.cp4m.Identifier;
import com.meta.cp4m.message.FBMessage;
import com.meta.cp4m.message.Message;
import com.meta.cp4m.message.MessageFactory;
import com.meta.cp4m.message.ThreadState;
import com.meta.cp4m.message.*;

import java.time.Instant;
import org.junit.jupiter.api.Test;

class ThreadStateTest {

private static final MessageFactory<FBMessage> FACTORY = MessageFactory.instance(FBMessage.class);
private static final MessageFactory<FBMessage> FB_FACTORY = MessageFactory.instance(FBMessage.class);
private static final MessageFactory<WAMessage> WA_FACTORY = MessageFactory.instance(WAMessage.class);

@Test
void orderPreservation() {
Instant start = Instant.now();
FBMessage message1 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"sample message",
Identifier.random(),
Expand All @@ -53,7 +52,7 @@ void orderPreservation() {
void orderCorrection() {
Instant start = Instant.now();
FBMessage message2 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"sample message",
Identifier.random(),
Expand All @@ -80,7 +79,7 @@ void orderCorrection() {
void botAndUserId() {
Instant start = Instant.now();
FBMessage message1 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"sample message",
Identifier.random(),
Expand All @@ -90,7 +89,7 @@ void botAndUserId() {

ThreadState<FBMessage> ms = ThreadState.of(message1);
FBMessage message2 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"sample message",
message1.recipientId(),
Expand All @@ -108,7 +107,7 @@ void botAndUserId() {
assertThat(ms.userId()).isEqualTo(message1.senderId());
assertThat(ms.botId()).isEqualTo(message1.recipientId());
FBMessage mDifferentSenderId =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"",
Identifier.random(),
Expand All @@ -121,7 +120,7 @@ void botAndUserId() {
.isInstanceOf(IllegalArgumentException.class);

FBMessage mDifferentRecipientId =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"",
message1.senderId(),
Expand All @@ -132,7 +131,7 @@ void botAndUserId() {
.isInstanceOf(IllegalArgumentException.class);

FBMessage illegalSenderId =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"",
message1.recipientId(),
Expand All @@ -143,7 +142,7 @@ void botAndUserId() {
.isInstanceOf(IllegalArgumentException.class);

FBMessage illegalRecipientId =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"",
message1.senderId(),
Expand All @@ -159,7 +158,7 @@ void systemMessageForbidden() {
assertThatThrownBy(
() ->
ThreadState.of(
FACTORY.newMessage(
FB_FACTORY.newMessage(
Instant.now(),
"",
Identifier.random(),
Expand All @@ -170,7 +169,7 @@ void systemMessageForbidden() {

ThreadState<FBMessage> threadState =
ThreadState.of(
FACTORY.newMessage(
FB_FACTORY.newMessage(
Instant.now(),
"",
Identifier.random(),
Expand All @@ -180,7 +179,7 @@ void systemMessageForbidden() {
assertThatThrownBy(
() ->
threadState.with(
FACTORY.newMessage(
FB_FACTORY.newMessage(
Instant.now(),
"",
Identifier.random(),
Expand All @@ -191,12 +190,12 @@ void systemMessageForbidden() {
}

@Test
void orderPreservationWhenUserSendsTwoMessagesInARow() {
void orderPreservationWhenUserSendsTwoMessagesInARowFBMessage() {
Instant start = Instant.now();
Identifier senderId= Identifier.random();
Identifier recipientId = Identifier.random();
FBMessage userMessage1 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start,
"sample message 1",
senderId,
Expand All @@ -205,7 +204,7 @@ void orderPreservationWhenUserSendsTwoMessagesInARow() {
Message.Role.USER);
ThreadState<FBMessage> ms = ThreadState.of(userMessage1);
FBMessage userMessage2 =
FACTORY.newMessage(
FB_FACTORY.newMessage(
start.plusSeconds(1),
"sample message 2",
senderId,
Expand All @@ -224,4 +223,39 @@ void orderPreservationWhenUserSendsTwoMessagesInARow() {
assertThat(ms.messages().get(2).instanceId()).isSameAs(userMessage2.instanceId());
assertThat(ms.messages().get(3).instanceId()).isSameAs(botMessage2.instanceId());
}

@Test
void orderPreservationWhenUserSendsTwoMessagesInARowWAMessage() {
Instant start = Instant.now();
Identifier senderId= Identifier.random();
Identifier recipientId = Identifier.random();
WAMessage userMessage1 =
WA_FACTORY.newMessage(
start,
"sample message 1",
senderId,
recipientId,
Identifier.random(),
Message.Role.USER);
ThreadState<WAMessage> ms = ThreadState.of(userMessage1);
WAMessage userMessage2 =
WA_FACTORY.newMessage(
start.plusSeconds(1),
"sample message 2",
senderId,
recipientId,
Identifier.random(),
Message.Role.USER);
ThreadState<WAMessage> finalMs = ms;
ms = ms.with(userMessage2);
WAMessage botMessage1 = finalMs.newMessageFromBot(start.plusSeconds(4), "bot sample message 1");
ms = ms.with(botMessage1);
WAMessage botMessage2 = ms.newMessageFromBot(start.plusSeconds(8), "bot sample message 2");
ms = ms.with(botMessage2);
assertThat(ms.messages()).hasSize(4);
assertThat(ms.messages().get(0).instanceId()).isSameAs(userMessage1.instanceId());
assertThat(ms.messages().get(1).instanceId()).isSameAs(botMessage1.instanceId());
assertThat(ms.messages().get(2).instanceId()).isSameAs(userMessage2.instanceId());
assertThat(ms.messages().get(3).instanceId()).isSameAs(botMessage2.instanceId());
}
}

0 comments on commit f586eff

Please sign in to comment.