package br.com.caelum.guj.controller; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.net.URISyntaxException; import javax.servlet.http.HttpServletRequest; import net.jforum.entities.UserSession; import org.junit.Test; import br.com.caelum.guj.dao.GUJUserDAO; import br.com.caelum.guj.model.NewsletterParticipant; import br.com.caelum.guj.newsletter.NewsletterSubscriber; import br.com.caelum.vraptor.util.test.MockResult; public class NewsletterControllerTest { @Test public void should_register_the_given_user_if_its_not_a_participant_yet() throws URISyntaxException { Integer gujUserId = 1; NewsletterSubscriber manager = mock(NewsletterSubscriber.class); GUJUserDAO dao = mock(GUJUserDAO.class); HttpServletRequest request = mock(HttpServletRequest.class); UserSession userSession = mock(UserSession.class); when(dao.findParticipantByGujUserId(gujUserId)).thenReturn(null); when(dao.emailFromUser(gujUserId)).thenReturn("email@email.com"); when(request.getAttribute("userSession")).thenReturn(userSession); NewsletterController controller = new NewsletterController(dao, request, new MockResult(), manager); controller.register(gujUserId); verify(dao).registerNewsletterParticipant(any(NewsletterParticipant.class)); verify(userSession).setNewsletterParticipant(true); verify(manager).subscribe(any(NewsletterParticipant.class)); } @Test public void should_not_register_the_given_user_if_its_already_a_participant() throws URISyntaxException { Integer gujUserId = 1; NewsletterSubscriber manager = mock(NewsletterSubscriber.class); GUJUserDAO dao = mock(GUJUserDAO.class); HttpServletRequest request = mock(HttpServletRequest.class); UserSession userSession = mock(UserSession.class); when(dao.findParticipantByGujUserId(gujUserId)).thenReturn(new NewsletterParticipant()); when(request.getAttribute("userSession")).thenReturn(userSession); NewsletterController controller = new NewsletterController(dao, request, new MockResult(), manager); controller.register(gujUserId); verify(dao, never()).registerNewsletterParticipant(any(NewsletterParticipant.class)); verify(userSession, never()).setNewsletterParticipant(true); verify(manager, never()).subscribe(any(NewsletterParticipant.class)); } }