package com.example.services; import com.example.config.Config; import com.example.mocks.MockFileManager; import com.example.services.impl.S3FileEvent; import com.example.services.impl.S3Publisher; import com.example.utils.TestingUtils; import com.amazonaws.services.sns.model.PublishRequest; import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.Stack; import static org.junit.Assert.*; public class TestS3Publisher { Stack<PublishRequest> publishRequests = new Stack<PublishRequest>(); MockFileManager mockFileManager = new MockFileManager(); private Config config = TestingUtils.getMockConfig(); S3Publisher publisher = new S3Publisher(config, mockFileManager) { @Override public String createTopic() { return ""; } protected void publishToSNS(PublishRequest publishRequest) { publishRequests.push(publishRequest); } }; @Test public void testPublishFile() { File f = new File("/foo/bar"); Event event = new S3FileEvent(FileOperation.CREATE, f, "me"); publisher.publish(event); assertEquals("event is not published", 1, publishRequests.size()); PublishRequest request = publishRequests.pop(); File uploadedFile = mockFileManager.uploaded.pop(); assertEquals("publish request ", request.getMessage(), ((S3FileEvent)event).toJson(config.getBaseDir())); assertEquals("correct file uploaded", "/foo/bar", uploadedFile.getPath()); } @Test public void testPublishFileModify() { File f = new File("/foo/bar"); Event event = new S3FileEvent(FileOperation.MODIFY, f, "me", true); publisher.publish(event); assertEquals("folder should not be published", 1, publishRequests.size()); PublishRequest request = publishRequests.pop(); File uploadedFile = mockFileManager.uploaded.pop(); assertEquals("publish request ", request.getMessage(), ((S3FileEvent)event).toJson(config.getBaseDir())); assertEquals("correct file uploaded", "/foo/bar", uploadedFile.getPath()); } @Test public void testPublishDelete() { File f = new File("/foo/bar"); Event event = new S3FileEvent(FileOperation.DELETE, f, "me"); publisher.publish(event); assertEquals("folder should not be published", 1, publishRequests.size()); PublishRequest request = publishRequests.pop(); File uploadedFile = mockFileManager.deleted.pop(); assertEquals("publish request ", request.getMessage(), ((S3FileEvent)event).toJson(config.getBaseDir())); assertEquals("correct file uploaded", "/foo/bar", uploadedFile.getPath()); } @Test public void testPublishDirectory() throws IOException { File f = TestingUtils.createTempDirectory("tmp").toFile(); Event event = new S3FileEvent(FileOperation.MODIFY, f, "me", true); publisher.publish(event); assertEquals("modify dir should not be published", 0, publishRequests.size()); } }