package at.nonblocking.maven.nonsnapshot;
import at.nonblocking.maven.nonsnapshot.impl.UpstreamDependencyHandlerDefaultImpl;
import at.nonblocking.maven.nonsnapshot.model.MavenArtifact;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.VersionRangeRequest;
import org.eclipse.aether.resolution.VersionRangeResult;
import org.eclipse.aether.version.Version;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public class UpstreamDependencyHandlerDefaultImplTest {
@Test
public void testProcessDependencyList() {
List<String> upstreamDependencyStrings = Arrays.asList(
"at.nonblocking:test2:1.2.4",
"at.nonblocking:test3:1.5",
"at.nonblocking:test-*",
"at.*:test5:LATEST",
"at.*:*:1"
);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
List<ProcessedUpstreamDependency> upstreamDependencies = handler.processDependencyList(upstreamDependencyStrings);
assertNotNull(upstreamDependencies);
assertEquals(5, upstreamDependencies.size());
assertEquals("at\\.nonblocking", upstreamDependencies.get(0).getGroupPattern().pattern());
assertEquals("test2", upstreamDependencies.get(0).getArtifactPattern().pattern());
assertEquals(new Integer(1), upstreamDependencies.get(0).getVersionMajor());
assertEquals(new Integer(2), upstreamDependencies.get(0).getVersionMinor());
assertEquals(new Integer(4), upstreamDependencies.get(0).getVersionIncrement());
assertEquals("at\\.nonblocking", upstreamDependencies.get(1).getGroupPattern().pattern());
assertEquals("test3", upstreamDependencies.get(1).getArtifactPattern().pattern());
assertEquals(new Integer(1), upstreamDependencies.get(1).getVersionMajor());
assertEquals(new Integer(5), upstreamDependencies.get(1).getVersionMinor());
assertNull(upstreamDependencies.get(1).getVersionIncrement());
assertEquals("at\\.nonblocking", upstreamDependencies.get(2).getGroupPattern().pattern());
assertEquals("test-.*", upstreamDependencies.get(2).getArtifactPattern().pattern());
assertNull(upstreamDependencies.get(2).getVersionMajor());
assertNull(upstreamDependencies.get(2).getVersionMinor());
assertNull(upstreamDependencies.get(2).getVersionIncrement());
assertEquals("at\\..*", upstreamDependencies.get(3).getGroupPattern().pattern());
assertEquals("test5", upstreamDependencies.get(3).getArtifactPattern().pattern());
assertNull(upstreamDependencies.get(3).getVersionMajor());
assertNull(upstreamDependencies.get(3).getVersionMinor());
assertNull(upstreamDependencies.get(3).getVersionIncrement());
assertEquals("at\\..*", upstreamDependencies.get(4).getGroupPattern().pattern());
assertEquals(".*", upstreamDependencies.get(4).getArtifactPattern().pattern());
assertEquals(new Integer(1), upstreamDependencies.get(4).getVersionMajor());
assertNull(upstreamDependencies.get(4).getVersionMinor());
assertNull(upstreamDependencies.get(4).getVersionIncrement());
}
@Test
public void testMatches() {
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), null, null, null);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
List<ProcessedUpstreamDependency> upstreamDependencies = Arrays.asList(dep1, dep2);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
assertEquals(dep1, handler.findMatch(new MavenArtifact("at.nonblocking", "test1", null), upstreamDependencies));
assertEquals(dep2, handler.findMatch(new MavenArtifact("at.test", "foo", null), upstreamDependencies));
assertNull(handler.findMatch(new MavenArtifact("de.nonblocking", "test1", null), upstreamDependencies));
}
@Test
public void testResolveLatestVersionNoVersionConstraint() throws Exception {
RepositorySystem mockRepositorySystem = mock(RepositorySystem.class);
RepositorySystemSession mockRepositorySystemSession = mock(RepositorySystemSession.class);
List<RemoteRepository> mockRemoteRepositories = new ArrayList<>();
Version mockVersion1 = mock(Version.class);
when(mockVersion1.toString()).thenReturn("1.1.1-1234");
VersionRangeResult result = new VersionRangeResult(new VersionRangeRequest());
result.setVersions(Arrays.asList(mockVersion1));
ArgumentCaptor<VersionRangeRequest> captor = ArgumentCaptor.forClass(VersionRangeRequest.class);
when(mockRepositorySystem.resolveVersionRange(any(RepositorySystemSession.class), captor.capture())).thenReturn(result);
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), null, null, null);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
MavenArtifact mavenArtifact = new MavenArtifact("at.nonblocking", "test1", "1.0.0");
String version = handler.resolveLatestVersion(mavenArtifact, dep1, mockRepositorySystem, mockRepositorySystemSession, mockRemoteRepositories);
assertNotNull(version);
assertEquals("1.1.1-1234", version);
assertEquals("at.nonblocking:test1:jar:(1.0.0,) < []", captor.getValue().toString());
}
@Test
public void testResolveLatestVersionMajorVersionConstraint() throws Exception {
RepositorySystem mockRepositorySystem = mock(RepositorySystem.class);
RepositorySystemSession mockRepositorySystemSession = mock(RepositorySystemSession.class);
List<RemoteRepository> mockRemoteRepositories = new ArrayList<>();
Version mockVersion1 = mock(Version.class);
when(mockVersion1.toString()).thenReturn("2.1.1-1234");
VersionRangeResult result = new VersionRangeResult(new VersionRangeRequest());
result.setVersions(Arrays.asList(mockVersion1));
ArgumentCaptor<VersionRangeRequest> captor = ArgumentCaptor.forClass(VersionRangeRequest.class);
when(mockRepositorySystem.resolveVersionRange(any(RepositorySystemSession.class), captor.capture())).thenReturn(result);
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), 2, null, null);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
MavenArtifact mavenArtifact = new MavenArtifact("at.nonblocking", "test1", "1.0.0");
String version = handler.resolveLatestVersion(mavenArtifact, dep1, mockRepositorySystem, mockRepositorySystemSession, mockRemoteRepositories);
assertNotNull(version);
assertEquals("2.1.1-1234", version);
assertEquals("at.nonblocking:test1:jar:(1.0.0,3.0.0) < []", captor.getValue().toString());
}
@Test
public void testResolveLatestVersionMajorVersionConstraintNoMatch() throws Exception {
RepositorySystem mockRepositorySystem = mock(RepositorySystem.class);
RepositorySystemSession mockRepositorySystemSession = mock(RepositorySystemSession.class);
List<RemoteRepository> mockRemoteRepositories = new ArrayList<>();
Version mockVersion1 = mock(Version.class);
when(mockVersion1.toString()).thenReturn("1.1.1-1234");
VersionRangeResult result = new VersionRangeResult(new VersionRangeRequest());
result.setVersions(Arrays.asList(mockVersion1));
ArgumentCaptor<VersionRangeRequest> captor = ArgumentCaptor.forClass(VersionRangeRequest.class);
when(mockRepositorySystem.resolveVersionRange(any(RepositorySystemSession.class), captor.capture())).thenReturn(result);
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), 2, null, null);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
MavenArtifact mavenArtifact = new MavenArtifact("at.nonblocking", "test1", "1.0.0");
String version = handler.resolveLatestVersion(mavenArtifact, dep1, mockRepositorySystem, mockRepositorySystemSession, mockRemoteRepositories);
assertNull(version);
assertEquals("at.nonblocking:test1:jar:(1.0.0,3.0.0) < []", captor.getValue().toString());
}
@Test
public void testResolveLatestVersionMajorMinorVersionConstraint() throws Exception {
RepositorySystem mockRepositorySystem = mock(RepositorySystem.class);
RepositorySystemSession mockRepositorySystemSession = mock(RepositorySystemSession.class);
List<RemoteRepository> mockRemoteRepositories = new ArrayList<>();
Version mockVersion1 = mock(Version.class);
when(mockVersion1.toString()).thenReturn("2.3.9-1234");
VersionRangeResult result = new VersionRangeResult(new VersionRangeRequest());
result.setVersions(Arrays.asList(mockVersion1));
ArgumentCaptor<VersionRangeRequest> captor = ArgumentCaptor.forClass(VersionRangeRequest.class);
when(mockRepositorySystem.resolveVersionRange(any(RepositorySystemSession.class), captor.capture())).thenReturn(result);
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), 2, 3, null);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
MavenArtifact mavenArtifact = new MavenArtifact("at.nonblocking", "test1", "1.0.0");
String version = handler.resolveLatestVersion(mavenArtifact, dep1, mockRepositorySystem, mockRepositorySystemSession, mockRemoteRepositories);
assertNotNull(version);
assertEquals("2.3.9-1234", version);
assertEquals("at.nonblocking:test1:jar:(1.0.0,2.4.0) < []", captor.getValue().toString());
}
@Test
public void testResolveLatestVersionMajorMinorIncrementVersionConstraint() throws Exception {
RepositorySystem mockRepositorySystem = mock(RepositorySystem.class);
RepositorySystemSession mockRepositorySystemSession = mock(RepositorySystemSession.class);
List<RemoteRepository> mockRemoteRepositories = new ArrayList<>();
Version mockVersion1 = mock(Version.class);
when(mockVersion1.toString()).thenReturn("2.3.4-1234");
VersionRangeResult result = new VersionRangeResult(new VersionRangeRequest());
result.setVersions(Arrays.asList(mockVersion1));
ArgumentCaptor<VersionRangeRequest> captor = ArgumentCaptor.forClass(VersionRangeRequest.class);
when(mockRepositorySystem.resolveVersionRange(any(RepositorySystemSession.class), captor.capture())).thenReturn(result);
ProcessedUpstreamDependency dep1 = new ProcessedUpstreamDependency(Pattern.compile("at\\.nonblocking"), Pattern.compile("test1"), 2, 3, 4);
ProcessedUpstreamDependency dep2 = new ProcessedUpstreamDependency(Pattern.compile("at\\..*"), Pattern.compile(".*"), null, null, null);
UpstreamDependencyHandler handler = new UpstreamDependencyHandlerDefaultImpl();
MavenArtifact mavenArtifact = new MavenArtifact("at.nonblocking", "test1", "1.0.0");
String version = handler.resolveLatestVersion(mavenArtifact, dep1, mockRepositorySystem, mockRepositorySystemSession, mockRemoteRepositories);
assertNotNull(version);
assertEquals("2.3.4-1234", version);
assertEquals("at.nonblocking:test1:jar:(1.0.0,2.3.5) < []", captor.getValue().toString());
}
}