package ru.hflabs.rcd.backend.console;
import com.google.common.collect.ImmutableList;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import ru.hflabs.rcd.backend.console.preference.FilePreference;
import ru.hflabs.rcd.service.IManagerService;
import javax.annotation.Resource;
import java.io.File;
import java.net.URL;
import java.util.List;
@ContextConfiguration(
locations = {
ResourcePatternResolver.CLASSPATH_URL_PREFIX + "backend.test.xml",
ResourcePatternResolver.CLASSPATH_URL_PREFIX + "backend.mock-factories.xml"
}
)
public abstract class RunTemplateTest<P extends FilePreference> extends AbstractTestNGSpringContextTests {
/** Сервис управления документами */
@Resource(name = "remoteManagerService")
protected IManagerService managerService;
/**
* Подготавливает сервис управления документами
*
* @see ru.hflabs.rcd.service.IManagerService
*/
protected void prepareManagerServiceStub() {
// do nothing
}
protected void purgeManagerServiceStub() {
// do nothing
}
/**
* Создает и возвращает настройки импорта
*
* @return Возвращает базовые настройки импорта
*/
protected abstract P createPreferenceInstance() throws Exception;
/**
* Создает и возвращает настройки импорта
*
* @param paths относительные пути к файлам
* @return Возвращает базовые настройки импорта
*/
protected P createBasePreference(String... paths) throws Exception {
final P preference = createPreferenceInstance();
preference.setPathToFile(createTargetFiles(paths));
return preference;
}
/**
* Создает и возвращает коллекцию полных путей к файлам
*
* @param paths коллекция относительных путей
* @return Возвращает сформированную коллекцию полных путей
*/
protected static List<String> createTargetFiles(String... paths) throws Exception {
final URL rootDirectoryUrl = RunTemplateTest.class.getClassLoader().getResource(".");
ImmutableList.Builder<String> builder = ImmutableList.builder();
for (String path : paths) {
builder.add(new File(rootDirectoryUrl.getFile(), path).getCanonicalPath());
}
return builder.build();
}
}