package de.ks.idnadrev.cost.csvimport; import de.ks.idnadrev.cost.csvimport.columnmapping.AmountColumnMapping; import de.ks.idnadrev.cost.csvimport.columnmapping.BookingColumnMapping; import de.ks.idnadrev.cost.csvimport.columnmapping.BookingDateColumnMapping; import de.ks.idnadrev.cost.csvimport.columnmapping.DescriptionColumnMapping; import de.ks.idnadrev.entity.cost.Booking; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import java.time.DateTimeException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class BookingFromCSVImporterTest { private BookingFromCSVImporter importer; private static final String simpleAddBooking = "02.16.2015;DE4711;DE0815;Simple adding test createbooking;;31.34;EUR"; private static final String simpleSubBooking = "03.17.2015;DE4711;;Simple subtracting test createbooking;-7,12;;EUR"; @Test public void testDamnFormatter() throws Exception { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M.d.y"); LocalDate result = LocalDate.parse("02.16.2015", formatter); assertEquals(2, result.getMonth().getValue()); assertEquals(16, result.getDayOfMonth()); assertEquals(2015, result.getYear()); try { LocalTime time = LocalTime.parse("02.16.2015", formatter); fail("No parse exception any more"); } catch (DateTimeException e) { } } @Test public void testSplitLength() throws Exception { assertEquals(7, simpleAddBooking.split("\\;").length); assertEquals(6, StringUtils.split(simpleAddBooking, ";").length); assertEquals(5, StringUtils.split(simpleSubBooking, ";").length); } @Test public void testImportFromCSV() throws Exception { BookingColumnMapping<LocalDate> dateMapping = new BookingDateColumnMapping(0, "M.d.y"); BookingColumnMapping<String> descMapping = new DescriptionColumnMapping(3); BookingColumnMapping<Double> value1 = new AmountColumnMapping(4, true); BookingColumnMapping<Double> value2 = new AmountColumnMapping(5, false); importer = new BookingFromCSVImporter(";", dateMapping, value1, value2, descMapping); List<Booking> bookings = importer.createBookings(Arrays.asList(simpleAddBooking, simpleSubBooking)); assertEquals(2, bookings.size()); Booking first = bookings.get(0); Booking second = bookings.get(1); LocalDateTime firstDate = LocalDateTime.of(2015, 2, 16, 0, 0); LocalDateTime secondDate = LocalDateTime.of(2015, 3, 17, 0, 0); assertEquals(firstDate, first.getBookingTime()); assertEquals(secondDate, second.getBookingTime()); assertEquals(31.34, first.getAmount(), 0.0001); assertEquals(-7.12, second.getAmount(), 0.0001); } @Test public void testParseBigNumber() throws Exception { BookingColumnMapping<Double> value1 = new AmountColumnMapping(0, true); Booking booking = new Booking(); value1.apply(booking, new String[]{"31.389,34"}); assertEquals(31389.34, booking.getAmount(), 0.001); value1 = new AmountColumnMapping(0, false); value1.apply(booking, new String[]{"31,389.34"}); assertEquals(31389.34, booking.getAmount(), 0.001); } }