package sagan.questions.support; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.ui.ExtendedModelMap; import sagan.projects.Project; import sagan.projects.support.ProjectMetadataService; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.equalTo; import static org.mockito.BDDMockito.given; /** * Unit tests for {@link QuestionsController}. */ public class QuestionsControllerTests { @Mock private ProjectMetadataService projectMetadataService; @Mock private StackOverflowClient stackOverflow; private QuestionsController questionsController; private ExtendedModelMap model; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); model = new ExtendedModelMap(); Question q1 = new Question(); q1.title = "Question 1"; Question q2 = new Question(); q2.title = "Question 2"; given(stackOverflow.searchForQuestionsTagged("spring")).willReturn(Arrays.asList(q1, q2)); given(projectMetadataService.getProjects()).willReturn(Arrays.asList( new Project("spring-framework", "Spring Framework", null, null, Collections.emptyList(), false, "active", "spring-core, spring-framework, spring"), new Project("spring-data", "Spring Data", null, null, Collections.emptyList(), true, "active", "spring-data,spring-data-mongodb"), new Project("spring-data-mongodb", "Spring Data MongoDB", null, null, Collections.emptyList(), false, "active", ""), new Project("spring-data-graph", "Spring Data Graph", null, null, Collections.emptyList(), false, "attic", ""), new Project("spring-scala", "Spring Scala", null, null, Collections.emptyList(), false, "incubator", "") )); questionsController = new QuestionsController(projectMetadataService, stackOverflow); } @Test public void index() throws Exception { assertThat(questionsController.show(model), equalTo("questions/index")); assertThat(((List<Question>) model.get("questions")).stream() .map(question -> question.title) .collect(Collectors.toList()), contains("Question 1", "Question 2") ); assertThat(((List<Project>) model.get("projects")).stream() .map(Project::getName) .collect(Collectors.toList()), contains("Spring Data", "Spring Framework") ); } }