/*
* Copyright 2015-2017 Hewlett Packard Enterprise Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.hp.autonomy.frontend.find.core.configuration;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.hp.autonomy.frontend.find.core.beanconfiguration.ConfigFileConfiguration;
import com.hp.autonomy.searchcomponents.core.fields.FieldPathNormaliser;
import com.hp.autonomy.searchcomponents.core.test.CoreTestContext;
import com.hp.autonomy.types.requests.idol.actions.tags.FieldPath;
import org.apache.commons.io.FileUtils;
import org.jasypt.util.text.TextEncryptor;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.AutoConfigureJsonTesters;
import org.springframework.boot.test.autoconfigure.json.JsonTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.rules.SpringClassRule;
import org.springframework.test.context.junit4.rules.SpringMethodRule;
import java.io.File;
import java.io.IOException;
import static com.hp.autonomy.searchcomponents.core.test.CoreTestContext.CORE_CLASSES_PROPERTY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@RunWith(MockitoJUnitRunner.class)
@JsonTest
@AutoConfigureJsonTesters(enabled = false)
@SpringBootTest(classes = CoreTestContext.class, properties = CORE_CLASSES_PROPERTY)
public abstract class FindConfigFileServiceTest<C extends FindConfig<C, B>, B extends FindConfigBuilder<C, B>> {
@ClassRule
public static final SpringClassRule SCR = new SpringClassRule();
private static final String TEST_DIR = "./target/test";
@Rule
public final SpringMethodRule springMethodRule = new SpringMethodRule();
@Autowired
protected FieldPathNormaliser fieldPathNormaliser;
@Autowired
protected JsonSerializer<FieldPath> fieldPathSerializer;
@Autowired
protected JsonDeserializer<FieldPath> fieldPathDeserializer;
@Mock
protected TextEncryptor textEncryptor;
protected FilterProvider filterProvider;
private FindConfigFileService<C, B> findConfigFileService;
@BeforeClass
public static void init() {
System.setProperty("hp.find.home", TEST_DIR);
}
@SuppressWarnings("ProhibitedExceptionDeclared")
@Before
public void setUp() throws Exception {
final File directory = new File(TEST_DIR);
FileUtils.forceMkdir(directory);
filterProvider = new ConfigFileConfiguration().filterProvider();
findConfigFileService = constructConfigFileService();
findConfigFileService.init();
}
protected abstract FindConfigFileService<C, B> constructConfigFileService();
protected abstract Class<C> getConfigClassType();
protected abstract void validateConfig(final String configFileContents);
@After
public void tearDown() throws IOException {
FileUtils.forceDelete(new File(TEST_DIR));
}
@Test
public void configFile() throws IOException {
final File generatedConfigFile = new File(TEST_DIR, "config.json");
assertTrue(generatedConfigFile.exists());
final String configFileContents = FileUtils.readFileToString(generatedConfigFile);
validateConfig(configFileContents);
}
@Test
public void getConfig() {
final C config = findConfigFileService.getConfig();
assertNotNull(config);
}
@Test
public void getConfigClass() {
assertEquals(getConfigClassType(), findConfigFileService.getConfigClass());
}
@Test
public void getEmptyConfig() {
assertNotNull(findConfigFileService.getEmptyConfig());
}
@Test
public void postInitialise() {
// Check no exceptions are thrown
final C config = findConfigFileService.getConfig();
findConfigFileService.postInitialise(config);
}
@Test
public void preUpdate() {
final C config = findConfigFileService.getConfig();
assertEquals(config, findConfigFileService.preUpdate(config));
}
@Test
public void postUpdate() {
// Check no exceptions are thrown
final C config = findConfigFileService.getConfig();
findConfigFileService.postUpdate(config);
}
}