package net.frontlinesms.messaging; import java.util.ArrayList; import java.util.List; import net.frontlinesms.data.domain.FrontlineMessage.Type; import net.frontlinesms.data.domain.FrontlineMultimediaMessage; import net.frontlinesms.data.domain.FrontlineMultimediaMessagePart; import net.frontlinesms.junit.BaseTestCase; public class FrontlineMultimediaMessageTest extends BaseTestCase { public void testExtractPartsFromContent() { final String contentOne = "\"Librarians in DC\"; File: IMG_3057.JPG"; FrontlineMultimediaMessage multimediaMessage = FrontlineMultimediaMessage.createMessageFromContentString(contentOne, false); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(false, "Librarians in DC"))); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(true, "IMG_3057.JPG"))); final String contentTwo = "File: IMG_6807.jpg; Subject: Sub!; \"My dog wants to hel...\""; multimediaMessage = FrontlineMultimediaMessage.createMessageFromContentString(contentTwo, false); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(false, "My dog wants to hel..."))); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(true, "IMG_6807.jpg"))); assertEquals("Sub!", multimediaMessage.getSubject()); final String contentThree = "File: 08-08-09_1601.jpg"; multimediaMessage = FrontlineMultimediaMessage.createMessageFromContentString(contentThree, false); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(true, "08-08-09_1601.jpg"))); final String contentFour = "\"The first batch of ...\"; File: IMG_0615.JPG"; multimediaMessage = FrontlineMultimediaMessage.createMessageFromContentString(contentFour, false); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(false, "The first batch of ..."))); assertTrue(partsContain(multimediaMessage.getMultimediaParts(), new FrontlineMultimediaMessagePart(true, "IMG_0615.JPG"))); final String contentFive = "Subject: My \"Sub\""; multimediaMessage = FrontlineMultimediaMessage.createMessageFromContentString(contentFive, false); assertTrue(multimediaMessage.getMultimediaParts().isEmpty()); assertEquals("My \"Sub\"", multimediaMessage.getSubject()); } private boolean partsContain(List<FrontlineMultimediaMessagePart> parts, FrontlineMultimediaMessagePart expectedPart) { for (FrontlineMultimediaMessagePart part : parts) { if (expectedPart.isBinary()) { if (part.isBinary() && part.getFilename().equals(expectedPart.getFilename())) { return true; } } else if (!part.isBinary() && part.getTextContent().equals(expectedPart.getTextContent())) { return true; } } return false; } public void testGetFullContent() { FrontlineMultimediaMessage mms = new FrontlineMultimediaMessage(Type.RECEIVED, "", "Test"); List<FrontlineMultimediaMessagePart> multimediaParts = new ArrayList<FrontlineMultimediaMessagePart>(); // One text part, one binary part multimediaParts.add(FrontlineMultimediaMessagePart.createTextPart("Text part")); multimediaParts.add(FrontlineMultimediaMessagePart.createBinaryPart("File1.jpg")); mms.setMultimediaParts(multimediaParts ); String expectedContent = "\"Text part\"; File: File1.jpg"; assertEquals(expectedContent, mms.toString(false)); // One binary part, one text part multimediaParts.clear(); multimediaParts.add(FrontlineMultimediaMessagePart.createBinaryPart("File1.jpg")); multimediaParts.add(FrontlineMultimediaMessagePart.createTextPart("Text part")); mms.setMultimediaParts(multimediaParts); expectedContent = "File: File1.jpg; \"Text part\""; assertEquals(expectedContent, mms.toString(false)); // One empty text part, one binary part multimediaParts.clear(); multimediaParts.add(FrontlineMultimediaMessagePart.createTextPart("")); multimediaParts.add(FrontlineMultimediaMessagePart.createBinaryPart("File1.jpg")); mms.setMultimediaParts(multimediaParts ); expectedContent = "File: File1.jpg"; assertEquals(expectedContent, mms.toString(false)); // One binary part only multimediaParts.clear(); multimediaParts.add(FrontlineMultimediaMessagePart.createBinaryPart("File1.jpg")); mms.setMultimediaParts(multimediaParts ); expectedContent = "File: File1.jpg"; assertEquals(expectedContent, mms.toString(false)); } }