package de.ks.idnadrev.cost.csvimport;
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.Booking;
import de.ks.idnadrev.entity.cost.BookingCsvTemplate;
import de.ks.persistence.PersistentWork;
import de.ks.util.FXPlatform;
import javafx.collections.ObservableList;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.persistence.EntityManager;
import java.io.File;
import java.net.URL;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
@RunWith(LauncherRunner.class)
public class BookingFromCSVActivityTest 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 testImportTemplate() throws Exception {
BookingFromCSVController controller = activityController.getControllerInstance(BookingFromCSVController.class);
URL resource = getClass().getResource("test.csv");
controller.onSelectFile(new File(resource.getFile()));
activityController.waitForDataSource();
ObservableList<Booking> items = controller.bookingTableController.getBookingTable().getItems();
ImporterBookingViewModel model = store.getModel();
assertEquals(3, items.size());
assertEquals(0, PersistentWork.from(Booking.class).size());
FXPlatform.invokeLater(() -> controller.bookingTableController.getMarked().values().forEach(v -> v.set(true)));
controller.onImport();
activityController.waitForDataSource();
items = controller.bookingTableController.getBookingTable().getItems();
assertEquals(0, items.size());
assertEquals(3, PersistentWork.from(Booking.class).size());
}
}