package ru.hflabs.rcd.lucene.binder;
import org.testng.annotations.BeforeClass;
import ru.hflabs.rcd.ServiceTest;
import ru.hflabs.rcd.model.Named;
import ru.hflabs.rcd.model.document.DocumentTemplate;
import ru.hflabs.rcd.model.document.Group;
import ru.hflabs.rcd.model.rule.RecodeRule;
import ru.hflabs.rcd.model.rule.RecodeRuleSet;
import ru.hflabs.rcd.model.rule.Rule;
import ru.hflabs.rcd.service.IServiceFactory;
import ru.hflabs.util.lucene.LuceneBinderTransformer;
import javax.annotation.Resource;
import static org.testng.Assert.*;
/**
* Класс <class>BinderTransformerTest</class> реализует базовый класс для тестов трансформации сущности API в документ
*
* @see IServiceFactory
*/
public class BinderTransformerTest<E> extends ServiceTest {
/** Целевой класс API */
private final Class<E> targetClass;
/** Фабрика сервисов */
@Resource(name = "luceneBinderTransformerFactory")
private IServiceFactory<LuceneBinderTransformer<E, String>, Class<?>> binderTransformerFactory;
/** Сервис трансформации */
protected LuceneBinderTransformer<E, String> binderTransformer;
public BinderTransformerTest(Class<E> targetClass) {
this.targetClass = targetClass;
}
@BeforeClass
public void testInstance() {
assertNotNull(binderTransformerFactory);
binderTransformer = binderTransformerFactory.retrieveService(targetClass);
assertNotNull(binderTransformer);
}
public static <T extends Named> void assertNamed(T actual, T expected) {
assertEquals(actual.getName(), expected.getName());
}
public static <T extends DocumentTemplate> void assertDocumentTemplate(T actual, T expected) {
assertEquals(actual.getId(), expected.getId());
assertEquals(actual.getHistoryId(), expected.getHistoryId());
}
public static void assertEqualsGroup(Group actual, Group expected) {
assertDocumentTemplate(actual, expected);
assertNamed(actual, expected);
assertEquals(actual.getDescription(), expected.getDescription());
assertEquals(actual.getOwner(), expected.getOwner());
assertNull(actual.getChangeType());
assertNull(actual.getChangeDate());
}
private static <R extends Rule<?, ?, ?>> void assertEqualsRule(R actual, R expected) {
assertDocumentTemplate(actual, expected);
assertEquals(actual.getFromFieldId(), expected.getFromFieldId());
assertEquals(actual.getToFieldId(), expected.getToFieldId());
}
public static void assertEqualsRecodeRuleSet(RecodeRuleSet actual, RecodeRuleSet expected) {
assertEqualsRule(actual, expected);
assertEquals(actual.getDefaultFieldId(), expected.getDefaultFieldId());
}
public static void assertEqualsRecodeRule(RecodeRule actual, RecodeRule expected) {
assertEqualsRule(actual, expected);
assertEquals(actual.getRecodeRuleSetId(), expected.getRecodeRuleSetId());
}
}