Skip to content

Commit

Permalink
BS-232 Writing tests for SmsMessagesDao to test smpp message filtering.
Browse files Browse the repository at this point in the history
  • Loading branch information
hrosa committed Jun 8, 2018
1 parent 7394f86 commit a94bed4
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 33 deletions.
Expand Up @@ -19,12 +19,12 @@
*/
package org.restcomm.connect.dao.entities;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.restcomm.connect.commons.annotations.concurrency.Immutable;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
Expand All @@ -35,7 +35,7 @@
@Immutable
public class SmsMessageFilter {

public static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");

private String accountSid;
private List<String> accountSidSet; // if not-null we need the cdrs that belong to several accounts
Expand All @@ -49,7 +49,8 @@ public class SmsMessageFilter {
private String instanceid;
private String smppMessageId;

public SmsMessageFilter() {
private SmsMessageFilter() {

}

@Deprecated
Expand Down Expand Up @@ -149,6 +150,8 @@ public static class Builder {

private Builder() {
this.filter = new SmsMessageFilter();
this.filter.limit = 50;
this.filter.offset = 0;
}

public Builder accountSid(String accountSid) {
Expand All @@ -175,16 +178,16 @@ public Builder sender(String sender) {
return this;
}

public Builder startTime(Date startTime) {
public Builder startTime(DateTime startTime) {
if (startTime != null) {
this.filter.startTime = DATE_FORMAT.format(startTime);
this.filter.startTime = DATE_TIME_FORMATTER.print(startTime);
}
return this;
}

public Builder endTime(Date endTime) {
public Builder endTime(DateTime endTime) {
if (endTime != null) {
this.filter.endTime = DATE_FORMAT.format(endTime);
this.filter.endTime = DATE_TIME_FORMATTER.print(endTime);
}
return this;
}
Expand Down
Expand Up @@ -26,7 +26,9 @@
import java.math.BigDecimal;
import java.net.URI;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Currency;
import java.util.List;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
Expand All @@ -38,6 +40,7 @@
import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.SmsMessagesDao;
import org.restcomm.connect.dao.entities.SmsMessage;
import org.restcomm.connect.dao.entities.SmsMessageFilter;

/**
* @author quintana.thomas@gmail.com (Thomas Quintana)
Expand Down Expand Up @@ -120,24 +123,28 @@ private SmsMessage createSms() {
return createSms(Sid.generate(Sid.Type.ACCOUNT), SmsMessage.Direction.OUTBOUND_API, 0, DateTime.now());
}

private SmsMessage createSms(Sid account, SmsMessage.Direction direction, int i, DateTime date) {
private SmsMessage createSms(Sid account, SmsMessage.Direction direction, int index, DateTime date) {
return createSms(account, direction, index, date, null);
}

private SmsMessage createSms(Sid account, SmsMessage.Direction direction, int index, DateTime date, String smppMessageId) {
final Sid sid = Sid.generate(Sid.Type.SMS_MESSAGE);
final URI url = URI.create("2012-04-24/Accounts/Acoount/SMS/Messages/unique-id.json");
final SmsMessage.Builder builder = SmsMessage.builder();
builder.setSid(sid);
builder.setAccountSid(account);
builder.setApiVersion("2012-04-24");
builder.setRecipient("+12223334444");
builder.setSender("+17778889999");
builder.setBody("Hello World - "+i);
builder.setStatus(SmsMessage.Status.SENDING);
builder.setDirection(direction);
builder.setPrice(new BigDecimal("0.00"));
builder.setPriceUnit(Currency.getInstance("USD"));
builder.setUri(url);
builder.setDateCreated(date);
SmsMessage message = builder.build();
return message;
return SmsMessage.builder()
.setSid(sid)
.setAccountSid(account)
.setApiVersion("2012-04-24")
.setRecipient("+12223334444")
.setSender("+17778889999")
.setBody("Hello World - "+index)
.setStatus(SmsMessage.Status.SENDING)
.setDirection(direction)
.setPrice(new BigDecimal("0.00"))
.setPriceUnit(Currency.getInstance("USD"))
.setUri(url)
.setDateCreated(date)
.setSmppMessageId(smppMessageId)
.build();
}

@Test
Expand Down Expand Up @@ -234,4 +241,41 @@ public void testUpdateSmsMessageDateSentAndStatusAndGetBySmppMsgId(){
assertEquals(smsMessage.getDateSent(), resultantSmsMessage.getDateSent());
assertEquals(smsMessage.getStatus(), resultantSmsMessage.getStatus());
}

@Test
public void testGetSmsMessagesWithSmppMessageFromLastThreeDays() throws InterruptedException, ParseException {
// given
final SmsMessagesDao smsMessagesDao = manager.getSmsMessagesDao();
final Sid accountSid = Sid.generate(Sid.Type.ACCOUNT);
final String smppMessageId = "12345";

final DateTime fourDaysAgo = DateTime.now().minusDays(4);
final SmsMessage smsMessage1 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 0, fourDaysAgo, smppMessageId);
final SmsMessage smsMessage2 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 1, fourDaysAgo, smppMessageId);

final DateTime threeDaysAgo = DateTime.now().minusDays(3);
final SmsMessage smsMessage3 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 2, threeDaysAgo, smppMessageId);
final SmsMessage smsMessage4 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 3, threeDaysAgo, null);

final DateTime yesterdar = DateTime.now().minusDays(1);
final SmsMessage smsMessage5 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 4, threeDaysAgo, smppMessageId);

final DateTime today = DateTime.now();
final SmsMessage smsMessage6 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 5, today, smppMessageId);
final SmsMessage smsMessage7 = createSms(accountSid, SmsMessage.Direction.OUTBOUND_API, 6, today, null);

final SmsMessageFilter filter = SmsMessageFilter.builer().smppMessageId(smppMessageId).endTime(threeDaysAgo).build();

// when
final List<SmsMessage> messages = smsMessagesDao.getSmsMessages(filter);

try {
assertEquals(3, messages.size());
assertEquals(smsMessage6.getSid(), messages.get(0).getSid());
assertEquals(smsMessage5.getSid(), messages.get(1).getSid());
assertEquals(smsMessage3.getSid(), messages.get(2).getSid());
} finally {
smsMessagesDao.removeSmsMessages(accountSid);
}
}
}
Expand Up @@ -84,7 +84,6 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;

Expand Down Expand Up @@ -152,9 +151,7 @@ public void onReceive(Object message) throws Exception {
}

// Find all messages correlated with SMPP Message ID in last three days
final Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -3);
final SmsMessageFilter filter = SmsMessageFilter.builer().smppMessageId(deliveryReceipt.getId()).endTime(calendar.getTime()).build();
final SmsMessageFilter filter = SmsMessageFilter.builer().smppMessageId(deliveryReceipt.getId()).endTime(DateTime.now().minusDays(3)).build();
final List<SmsMessage> smsMessages = this.storage.getSmsMessagesDao().getSmsMessages(filter);

// Update status of messages and remove correlation with SMPP Message ID
Expand Down
Expand Up @@ -181,8 +181,8 @@ public Actor create() throws Exception {
final SmsMessageFilter filter = filterCaptor.getValue();
assertEquals(dlrPayload.getId(), filter.getSmppMessageId());

final Date endDate = SmsMessageFilter.DATE_FORMAT.parse(filter.getEndTime());
assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - endDate.getTime(), TimeUnit.MILLISECONDS));
final DateTime endDate = SmsMessageFilter.DATE_TIME_FORMATTER.parseDateTime(filter.getEndTime());
assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - endDate.toDate().getTime(), TimeUnit.MILLISECONDS));

final ArgumentCaptor<SmsMessage> smsCaptor = ArgumentCaptor.forClass(SmsMessage.class);
verify(smsMessagesDao, timeout(50).times(3)).updateSmsMessage(smsCaptor.capture());
Expand Down Expand Up @@ -237,8 +237,8 @@ public Actor create() throws Exception {
final SmsMessageFilter filter = filterCaptor.getValue();
assertEquals(dlrPayload.getId(), filter.getSmppMessageId());

final Date endDate = SmsMessageFilter.DATE_FORMAT.parse(filter.getEndTime());
assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - endDate.getTime(), TimeUnit.MILLISECONDS));
final DateTime endDate = SmsMessageFilter.DATE_TIME_FORMATTER.parseDateTime(filter.getEndTime());
assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - endDate.toDate().getTime(), TimeUnit.MILLISECONDS));

verify(smsMessagesDao, never()).updateSmsMessage(any(SmsMessage.class));
}
Expand Down

0 comments on commit a94bed4

Please sign in to comment.