Java tutorial
/* * Copyright 2011 Eike Hirsch * * This file is part of MailJimp. * * MailJimp is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * MailJimp is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with MailJimp. If not, see <http://www.gnu.org/licenses/>. */ package mailjimp.webhook; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import mailjimp.dom.MailJimpConstants; import mailjimp.dom.WebHookData; import mailjimp.dom.WebHookType; import mailjimp.dom.response.list.MemberInfo; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; /** * Author: Eike Hirsch (me at eike-hirsch dot net) Date: 03.05.11 Time: 13:42 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/mailjimp-webhook-test-spring-config.xml" }) public class TestWebHooks { @Autowired private WebHookController controller; @Autowired private MyTestWebHookAdapter webHookAdapter; @Autowired private AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter; private MockHttpServletResponse response; private MockHttpServletRequest request; private WebHookData data; @Before public void initTestWebHooks() throws Exception { // reset the adapter webHookAdapter.resetCalled(); response = new MockHttpServletResponse(); request = new MockHttpServletRequest(RequestMethod.POST.name(), "/"); request.addParameter("fired_at", "2011-05-06 13:55:32"); // reset data data = null; } @Test public void subscribe() throws Exception { request.addParameter("type", "subscribe"); addMemberInfo(); assertNull(annotationMethodHandlerAdapter.handle(request, response, controller)); assertEquals("Copy that!", response.getContentAsString()); assertTrue(webHookAdapter.wasCalled("userSubscribed")); data = webHookAdapter.getData(); assertEquals(WebHookType.SUBSCRIBE, data.getType()); assertFiredAt(data); assertMemberInfo(data); } private void assertFiredAt(WebHookData data) { assertEquals("2011-05-06 13:55:32", MailJimpConstants.SDF.format(data.getFiredAt())); } private void assertMemberInfo(WebHookData data) { MemberInfo memberInfo = data.getMemberInfo(); assertNotNull(memberInfo); assertEquals("me@eike-hirsch.net", memberInfo.getEmail()); assertEquals("Eike", memberInfo.getMerges().get(MailJimpConstants.MERGE_FNAME)); final Object[] testArray = new Object[] { "VALUE1", "VALUE2" }; final Object[] groupArray = memberInfo.getGroupings().get(0).getGroups().toArray(); assertArrayEquals(testArray, groupArray); } @Test public void unsubscribe() throws Exception { request.addParameter("type", "unsubscribe"); addMemberInfo(); assertNull(annotationMethodHandlerAdapter.handle(request, response, controller)); assertEquals("Ten four!", response.getContentAsString()); assertTrue(webHookAdapter.wasCalled("userUnsubscribed")); data = webHookAdapter.getData(); assertFiredAt(data); assertMemberInfo(data); } @Test public void profile() throws Exception { request.addParameter("type", "profile"); addMemberInfo(); assertNull(annotationMethodHandlerAdapter.handle(request, response, controller)); assertEquals("Roger that!", response.getContentAsString()); assertTrue(webHookAdapter.wasCalled("profileUpdated")); data = webHookAdapter.getData(); assertFiredAt(data); assertMemberInfo(data); } private void addMemberInfo() { request.addParameter("data[email]", "me@eike-hirsch.net"); request.addParameter("data[email_type]", "html"); request.addParameter("data[id]", "3456c799ddj"); request.addParameter("data[list_id]", "someId"); request.addParameter("data[ip_opt]", "10.20.30.40"); request.addParameter("data[web_id]", "123456789"); request.addParameter("data[merges][EMAIL]", "me@eike-hirsch.net"); request.addParameter("data[merges][FNAME]", "Eike"); request.addParameter("data[merges][LNAME]", "Hirsch"); request.addParameter("data[merges][GROUPINGS][0][groups]", "VALUE1, VALUE2"); request.addParameter("data[merges][GROUPINGS][0][id]", "5"); request.addParameter("data[merges][GROUPINGS][0][name]", "GROUP NAME"); request.addParameter("data[merges][INTERESTS]", "VALUE1, VALUE2"); } @Test public void updateEmail() throws Exception { request.addParameter("type", "upemail"); request.addParameter("data[" + WebHookConstants.OLD_EMAIL + "]", "me@eike-hirsch.net"); request.addParameter("data[" + WebHookConstants.NEW_EMAIL + "]", "me@new_comp.de"); assertNull(annotationMethodHandlerAdapter.handle(request, response, controller)); assertEquals("Understood!", response.getContentAsString()); assertTrue(webHookAdapter.wasCalled("eMailUpdated")); data = webHookAdapter.getData(); assertEquals("me@new_comp.de", data.getRawData().get(WebHookConstants.NEW_EMAIL)); } @Test public void cleaned() throws Exception { request.addParameter("type", "cleaned"); request.addParameter("data[reason]", "hard"); request.addParameter("data[email]", "me@new_comp.de"); assertNull(annotationMethodHandlerAdapter.handle(request, response, controller)); assertEquals("OK!", response.getContentAsString()); assertTrue(webHookAdapter.wasCalled("cleaned")); data = webHookAdapter.getData(); assertEquals("hard", data.getRawData().get(WebHookConstants.REASON)); } }