package de.ks.idnadrev.cost.csvimport;
import de.ks.Condition;
import de.ks.LauncherRunner;
import de.ks.activity.ActivityCfg;
import de.ks.idnadrev.ActivityTest;
import de.ks.idnadrev.entity.cost.Account;
import de.ks.idnadrev.entity.cost.BookingCsvTemplate;
import de.ks.persistence.PersistentWork;
import de.ks.util.FXPlatform;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.persistence.EntityManager;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@RunWith(LauncherRunner.class)
public class BookingFromCSVActivityTemplatingTest extends ActivityTest {
@Override
protected Class<? extends ActivityCfg> getActivityClass() {
return BookingFromCSVActivity.class;
}
@Override
protected void createTestData(EntityManager em) {
Account account1 = new Account("account1");
Account account2 = new Account("account2");
BookingCsvTemplate template1 = new BookingCsvTemplate("template1");
template1.setAccount(account2).setSeparator(";").setDateColumn(0).setTimeColumn(1).setDescriptionColumn(4).setAmountColumns(Arrays.asList(5, 6)).setDatePattern("d.M.y").setTimePattern("H:m");
BookingCsvTemplate template2 = new BookingCsvTemplate("template2");
template2.setAccount(account1).setSeparator(",").setDateColumn(0).setTimeColumn(0).setDescriptionColumn(2).setAmountColumns(Arrays.asList(5)).setDatePattern("M/d/y").setTimePattern("M/d/y H:m");
em.persist(account1);
em.persist(account2);
em.persist(template1);
em.persist(template2);
}
@Test
public void testTemplateHandling() throws Exception {
waitForTemplateLoading();
CSVParseDefinitionController controller = activityController.getControllerInstance(CSVParseDefinitionController.class);
assertEquals(2, controller.templates.getItems().size());
assertEquals("template1", controller.templates.getSelectionModel().getSelectedItem().getName());
Condition.waitFor1s(() -> controller.account.getItems(), Matchers.hasSize(2));
assertEquals("account2", controller.account.getSelectionModel().getSelectedItem());//selected from template
assertEquals(";", controller.separator.getText());
assertEquals("5,6", controller.amountColumn.getText());
assertEquals("0", controller.dateColumn.getText());
assertEquals("1", controller.timeColumn.getText());
assertEquals("4", controller.descriptionColumn.getText());
assertEquals("d.M.y", controller.datePattern.getText());
assertEquals("H:m", controller.timePattern.getText());
FXPlatform.invokeLater(() -> controller.templates.getSelectionModel().select(1));
assertEquals("account1", controller.account.getSelectionModel().getSelectedItem());
assertEquals(",", controller.separator.getText());
assertEquals("5", controller.amountColumn.getText());
assertEquals("0", controller.dateColumn.getText());
assertEquals("0", controller.timeColumn.getText());
assertEquals("2", controller.descriptionColumn.getText());
assertEquals("M/d/y", controller.datePattern.getText());
assertEquals("M/d/y H:m", controller.timePattern.getText());
}
@Test
public void testSaveTemplate() throws Exception {
waitForTemplateLoading();
CSVParseDefinitionController controller = activityController.getControllerInstance(CSVParseDefinitionController.class);
FXPlatform.invokeLater(() -> {
controller.separator.setText(".");
controller.amountColumn.setText("4,6");
controller.timeColumn.setText("2");
controller.dateColumn.setText("3");
controller.descriptionColumn.setText("1");
controller.timePattern.setText("y.M.d");
controller.datePattern.setText("y.M.d H:m");
controller.onSaveTemplate("template3");
});
List<BookingCsvTemplate> templates = PersistentWork.from(BookingCsvTemplate.class);
assertEquals(3, templates.size());
BookingCsvTemplate template = templates.stream().filter(t -> t.getName().endsWith("3")).findFirst().get();
assertEquals(".", template.getSeparator());
List<Integer> amountColumns = template.getAmountColumns();
assertThat(amountColumns, Matchers.containsInAnyOrder(4, 6));
assertEquals(2, (int) template.getTimeColumn());
assertEquals(3, template.getDateColumn());
assertEquals(1, template.getDescriptionColumn());
assertEquals("y.M.d", template.getTimePattern());
assertEquals("y.M.d H:m", template.getDatePattern());
}
protected void waitForTemplateLoading() {
activityController.waitForTasks();
FXPlatform.waitForFX();
}
}