/* * Copyright 2016-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package sagan.projects.support; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import sagan.projects.Project; import sagan.projects.ProjectRelease; import sagan.projects.ProjectRelease.ReleaseStatus; import java.util.ArrayList; import java.util.List; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; /** * @author Mark Paluch */ @RunWith(MockitoJUnitRunner.class) public class BadgeControllerTest { @Mock private ProjectMetadataService projectMetadataServiceMock; private VersionBadgeService versionBadgeService = new VersionBadgeService(); private BadgeController controller; private Project project; private List<ProjectRelease> releases = new ArrayList<>(); @Before public void setUp() throws Exception { versionBadgeService.postConstruct(); controller = new BadgeController(projectMetadataServiceMock, versionBadgeService); project = new Project("spring-data-redis", "Spring Data Redis", "http", "http", releases, false, "data"); when(projectMetadataServiceMock.getProject("spring-data-redis")).thenReturn(project); } @After public void tearDown() throws Exception { versionBadgeService.preDestroy(); } @Test public void badgeNotFound() throws Exception { ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); assertThat(response.getStatusCode(), is(equalTo(HttpStatus.NOT_FOUND))); } @Test public void badgeShouldBeGenerated() throws Exception { releases.add(new ProjectRelease("1.0.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, true, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); assertThat(response.getStatusCode(), is(equalTo(HttpStatus.OK))); assertThat(response.getHeaders().getETag(), is(equalTo("\"1.0.RELEASE\""))); assertThat(response.getHeaders().getCacheControl(), is(equalTo("max-age=3600"))); String content = new String(response.getBody()); assertThat(content, containsString("<svg")); assertThat(content, containsString("Spring Data Redis")); assertThat(content, containsString("1.0.RELEASE")); } @Test public void projecWithTwoReleasesShouldBeGenerated() throws Exception { releases.add(new ProjectRelease("1.0.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); releases.add(new ProjectRelease("1.1.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, true, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("1.1.RELEASE")); } @Test public void projecWithTwoReleasesWithoutCurrentFlagPicksHighestRelease() throws Exception { releases.add(new ProjectRelease("1.0.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); releases.add(new ProjectRelease("1.1.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("1.1.RELEASE")); } @Test public void projecWithTwoReleasesFlagPicksCurrentRelease() throws Exception { releases.add(new ProjectRelease("1.0.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, true, "", "", "", "")); releases.add(new ProjectRelease("1.1.RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("1.0.RELEASE")); } @Test public void projecWithTwoReleasesUsingSymbolicNamesWithNumbersWithoutCurrentFlagPicksMostRecentRelease() throws Exception { releases.add(new ProjectRelease("Angel-SR6", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); releases.add(new ProjectRelease("Brixton-SR2", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("Brixton-SR2")); } @Test public void projecWithTwoReleasesUsingSymbolicNamesWithoutCurrentFlagPicksFirstRelease() throws Exception { releases.add(new ProjectRelease("Angel-SR6", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); releases.add(new ProjectRelease("Brixton-RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("Brixton-RELEASE")); } @Test public void projecWithTwoReleasesUsingSymbolicNamesFlagPicksCurrentRelease() throws Exception { releases.add(new ProjectRelease("Angel-SR1", ReleaseStatus.GENERAL_AVAILABILITY, false, "", "", "", "")); releases.add(new ProjectRelease("Brixton-RELEASE", ReleaseStatus.GENERAL_AVAILABILITY, true, "", "", "", "")); ResponseEntity<byte[]> response = controller.releaseBadge("spring-data-redis"); String content = new String(response.getBody()); assertThat(content, containsString("Brixton-RELEASE")); } }