package sagan.admin.support; import sagan.projects.Project; import sagan.projects.ProjectRelease; import sagan.projects.support.ProjectMetadataService; import saganx.AbstractIntegrationTests; import java.util.List; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; public class AdminProjectTests extends AbstractIntegrationTests { @Autowired private ProjectMetadataService projects; @Test public void projectsHomePage() throws Exception { mockMvc.perform(get("/admin/projects")) .andExpect(status().isOk()) .andExpect(model().attributeExists("projects")); } @Test public void viewProject() throws Exception { mockMvc.perform(get("/admin/projects/spring-framework")) .andExpect(status().isOk()) .andExpect(model().attributeExists("project")); } @Test public void viewProject404() throws Exception { mockMvc.perform(get("/admin/projects/missing")) .andExpect(view().name("pages/404")); } @Test public void deleteProject() throws Exception { mockMvc.perform(delete("/admin/projects/spring-framework")) .andExpect(redirectedUrl("./?navSection=projects")); assertThat(projects.getProject("spring-framework"), equalTo(null)); } @Test public void newProject() throws Exception { mockMvc.perform(get("/admin/projects/new")) .andExpect(status().isOk()) .andExpect(model().attributeExists("project")); } @Test public void saveProjectRemoveRelease() throws Exception { MockHttpServletRequestBuilder request = post("/admin/projects/spring-framework") .param("groupId", "org.springframework") .param("id", "spring-framework") .param("category", "active") .param("name", "Spring Framework") .param("repoUrl", "http://github.com/spring-projects/spring-framework") .param("siteUrl", "http://projects.spring.io/spring-framework") .param("releasesToDelete", "4.0.1.BUILD-SNAPSHOT") .param("projectReleases[0].artifactId", "spring-framework") .param("projectReleases[0].version", "4.0.1.BUILD-SNAPSHOT") .param("projectReleases[0].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[0].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[1].artifactId", "spring-framework") .param("projectReleases[1].version", "4.0.0.RELEASE") .param("projectReleases[1].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[1].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[2].artifactId", "spring-framework") .param("projectReleases[2].version", "3.2.7.BUILD-SNAPSHOT") .param("projectReleases[2].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[2].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[3].artifactId", "spring-framework") .param("projectReleases[3].version", "3.2.6.RELEASE") .param("projectReleases[3].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[3].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[4].artifactId", "spring-framework") .param("projectReleases[4].version", "3.1.4.RELEASE") .param("projectReleases[4].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[4].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/"); mockMvc.perform(request) .andExpect(redirectedUrl("spring-framework?navSection=projects")); assertThat(projects.getProject("spring-framework").getProjectReleases().get(0).getVersion(), equalTo("4.0.0.RELEASE")); } @Test public void saveProjectUpdateVersion() throws Exception { MockHttpServletRequestBuilder request = post("/admin/projects/spring-framework") .param("groupId", "org.springframework") .param("id", "spring-framework") .param("category", "active") .param("name", "Spring Framework") .param("repoUrl", "http://github.com/spring-projects/spring-framework") .param("siteUrl", "http://projects.spring.io/spring-framework") .param("projectReleases[0].artifactId", "spring-framework") .param("projectReleases[0].version", "4.0.2.BUILD-SNAPSHOT") .param("projectReleases[0].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[0].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[1].artifactId", "spring-framework") .param("projectReleases[1].version", "4.0.1.RELEASE") .param("projectReleases[1].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[1].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[2].artifactId", "spring-framework") .param("projectReleases[2].version", "3.2.7.BUILD-SNAPSHOT") .param("projectReleases[2].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[2].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[3].artifactId", "spring-framework") .param("projectReleases[3].version", "3.2.6.RELEASE") .param("projectReleases[3].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[3].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[4].artifactId", "spring-framework") .param("projectReleases[4].version", "3.1.4.RELEASE") .param("projectReleases[4].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-framework-reference/htmlsingle/") .param("projectReleases[4].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/"); mockMvc.perform(request) .andExpect(redirectedUrl("spring-framework?navSection=projects")); List<ProjectRelease> projectReleases = projects.getProject("spring-framework").getProjectReleases(); assertThat(projectReleases.get(0).getVersion(), equalTo("4.0.2.BUILD-SNAPSHOT")); assertThat(projectReleases.get(1).getVersion(), equalTo("4.0.1.RELEASE")); } @Test public void saveProjectNewProject() throws Exception { MockHttpServletRequestBuilder request = post("/admin/projects/spring-new") .param("groupId", "org.springframework") .param("id", "spring-new") .param("category", "active") .param("name", "Spring New") .param("repoUrl", "http://github.com/spring-projects/spring-new") .param("siteUrl", "http://projects.spring.io/spring-new") .param("projectReleases[0].artifactId", "spring-framework") .param("projectReleases[0].version", "4.0.2.BUILD-SNAPSHOT") .param("projectReleases[0].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-new-reference/htmlsingle/") .param("projectReleases[0].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[1].artifactId", "spring-framework") .param("projectReleases[1].version", "4.0.1.RELEASE") .param("projectReleases[1].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-new-reference/htmlsingle/") .param("projectReleases[1].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[2].artifactId", "spring-framework") .param("projectReleases[2].version", "3.2.7.BUILD-SNAPSHOT") .param("projectReleases[2].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-new-reference/htmlsingle/") .param("projectReleases[2].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[3].artifactId", "spring-framework") .param("projectReleases[3].version", "3.2.6.RELEASE") .param("projectReleases[3].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-new-reference/htmlsingle/") .param("projectReleases[3].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/") .param("projectReleases[4].artifactId", "spring-framework") .param("projectReleases[4].version", "3.1.4.RELEASE") .param("projectReleases[4].refDocUrl", "http://docs.spring.io/spring/docs/{version}/spring-new-reference/htmlsingle/") .param("projectReleases[4].apiDocUrl", "http://docs.spring.io/spring/docs/{version}/javadoc-api/"); mockMvc.perform(request) .andExpect(redirectedUrl("spring-new?navSection=projects")); Project project = projects.getProject("spring-new"); assertThat(project.getName(), equalTo("Spring New")); List<ProjectRelease> projectReleases = project.getProjectReleases(); assertThat(projectReleases.get(0).getVersion(), equalTo("4.0.2.BUILD-SNAPSHOT")); assertThat(projectReleases.get(1).getVersion(), equalTo("4.0.1.RELEASE")); } @Test public void saveProjectCustomArtifactId() throws Exception { MockHttpServletRequestBuilder request = post("/admin/projects/spring-data-jdbc-ext") .param("groupId", "org.springframework.data") .param("id", "spring-data-jdbc-ext") .param("category", "active") .param("name", "Spring Data JDBC Extensions") .param("repoUrl", "http://github.com/spring-projects/spring-data-jdbc-ext") .param("siteUrl", "http://projects.spring.io/spring-data-jdbc-ext") .param("projectReleases[0].artifactId", "spring-jdbc-oracle") .param("projectReleases[0].version", "1.0.0.RELEASE") .param("projectReleases[0].refDocUrl", "http://docs.spring.io/spring-data/jdbc/docs/{version}/reference/html") .param("projectReleases[0].apiDocUrl", "http://docs.spring.io/spring-data/jdbc/docs/{version}/api/"); mockMvc.perform(request) .andExpect(redirectedUrl("spring-data-jdbc-ext?navSection=projects")); Project project = projects.getProject("spring-data-jdbc-ext"); assertThat(project.getName(), equalTo("Spring Data JDBC Extensions")); List<ProjectRelease> projectReleases = project.getProjectReleases(); assertThat(projectReleases.get(0).getVersion(), equalTo("1.0.0.RELEASE")); assertThat(projectReleases.get(0).getArtifactId(), equalTo("spring-jdbc-oracle")); } }