/**
* Copyright (c) 2010, 2013 Darmstadt University of Technology.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Olav Lenz - initial API and implementation
*/
package org.eclipse.recommenders.models;
import static com.google.common.base.Optional.fromNullable;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.eclipse.recommenders.coordinates.DependencyInfo;
import org.eclipse.recommenders.coordinates.DependencyType;
import org.eclipse.recommenders.coordinates.IProjectCoordinateAdvisor;
import org.eclipse.recommenders.coordinates.ProjectCoordinate;
import org.eclipse.recommenders.coordinates.ProjectCoordinateAdvisorService;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
public class MappingProviderTest {
private static final ProjectCoordinate EXPECTED_PROJECT_COORDINATE = new ProjectCoordinate("example",
"example.project", "1.0.0");
private static final ProjectCoordinate ANOTHER_EXPECTED_PROJECT_COORDINATE = new ProjectCoordinate(
"another.example", "another.example.project", "1.2.3");
@Rule
public TemporaryFolder folder = new TemporaryFolder();
ProjectCoordinateAdvisorService sut = new ProjectCoordinateAdvisorService();
File exampleFile;
private IProjectCoordinateAdvisor createMockedStrategy(final ProjectCoordinate projectCoordinate,
final DependencyType... dependencyTypes) {
IProjectCoordinateAdvisor mockedStrategy = Mockito.mock(IProjectCoordinateAdvisor.class);
Mockito.when(mockedStrategy.suggest(Mockito.any(DependencyInfo.class))).thenReturn(
fromNullable(projectCoordinate));
return mockedStrategy;
}
@Before
public void init() throws IOException {
exampleFile = folder.newFile("example.jar");
}
@Test
public void testMappingProviderWithNoStrategy() throws IOException {
Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(new DependencyInfo(exampleFile,
DependencyType.JAR));
assertFalse(optionalProjectCoordinate.isPresent());
}
@Test
public void testMappingProviderWithMockedStrategy() throws IOException {
sut.addAdvisor(createMockedStrategy(EXPECTED_PROJECT_COORDINATE));
Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(new DependencyInfo(exampleFile,
DependencyType.JAR));
assertEquals(EXPECTED_PROJECT_COORDINATE, optionalProjectCoordinate.get());
}
@Test
public void testCorrectOrderOfStrategiesWithAddStrategies() throws IOException {
ProjectCoordinateAdvisorService sut = new ProjectCoordinateAdvisorService();
sut.addAdvisor(createMockedStrategy(EXPECTED_PROJECT_COORDINATE));
sut.addAdvisor(createMockedStrategy(ANOTHER_EXPECTED_PROJECT_COORDINATE));
Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(new DependencyInfo(exampleFile,
DependencyType.JAR));
assertEquals(EXPECTED_PROJECT_COORDINATE, optionalProjectCoordinate.get());
}
@Test
public void testSetStrategiesSetStrategiesCorrect() {
List<IProjectCoordinateAdvisor> strategies = Lists.newArrayList();
strategies.add(createMockedStrategy(EXPECTED_PROJECT_COORDINATE));
strategies.add(createMockedStrategy(ANOTHER_EXPECTED_PROJECT_COORDINATE));
sut.setAdvisors(strategies);
assertEquals(strategies, sut.getAdvisors());
}
@Test
public void testCorrectOrderOfStrategiesWithSetStrategies() throws IOException {
sut.addAdvisor(createMockedStrategy(EXPECTED_PROJECT_COORDINATE));
sut.addAdvisor(createMockedStrategy(ANOTHER_EXPECTED_PROJECT_COORDINATE));
Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(new DependencyInfo(exampleFile,
DependencyType.JAR));
assertEquals(EXPECTED_PROJECT_COORDINATE, optionalProjectCoordinate.get());
}
@Test
public void testSecondStrategyWins() throws IOException {
sut.addAdvisor(createMockedStrategy(null));
sut.addAdvisor(createMockedStrategy(EXPECTED_PROJECT_COORDINATE));
Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(new DependencyInfo(exampleFile,
DependencyType.JAR));
assertEquals(EXPECTED_PROJECT_COORDINATE, optionalProjectCoordinate.get());
}
}