package name.abuchen.portfolio.datatransfer.csv; import static name.abuchen.portfolio.datatransfer.csv.CSVExtractorTestUtil.buildField2Column; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.collection.IsEmptyCollection.empty; import static org.junit.Assert.assertThat; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; import name.abuchen.portfolio.datatransfer.Extractor.Item; import name.abuchen.portfolio.datatransfer.Extractor.SecurityItem; import name.abuchen.portfolio.datatransfer.actions.AssertImportActions; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.money.CurrencyUnit; @SuppressWarnings("nls") public class CSVSecurityExtractorTest { @Test public void testSecurityCreation() throws ParseException { Client client = new Client(); CSVExtractor extractor = new CSVSecurityExtractor(client); List<Exception> errors = new ArrayList<Exception>(); List<Item> results = extractor.extract(0, Arrays.<String[]>asList( new String[] { "DE0007164600", "716460", "SAP.DE", "SAP SE", "EUR", "Notiz" }), buildField2Column(extractor), errors); assertThat(errors, empty()); assertThat(results.size(), is(1)); new AssertImportActions().check(results, CurrencyUnit.EUR); Security security = results.stream().filter(i -> i instanceof SecurityItem).findAny().get().getSecurity(); assertThat(security.getName(), is("SAP SE")); assertThat(security.getIsin(), is("DE0007164600")); assertThat(security.getWkn(), is("716460")); assertThat(security.getTickerSymbol(), is("SAP.DE")); assertThat(security.getCurrencyCode(), is("EUR")); assertThat(security.getNote(), is("Notiz")); } @Test public void testSecurityIsNotCreatedIfItAlreadyExists() throws ParseException { Client client = new Client(); Security security = new Security(); security.setIsin("DE0007164600"); client.addSecurity(security); CSVExtractor extractor = new CSVSecurityExtractor(client); List<Exception> errors = new ArrayList<Exception>(); List<Item> results = extractor.extract(0, Arrays.<String[]>asList( new String[] { "DE0007164600", "716460", "SAP.DE", "SAP SE", "EUR", "Notiz" }), buildField2Column(extractor), errors); assertThat(errors.size(), is(1)); assertThat(results, empty()); } @Test public void testSecurityIsCreatedOnlyOnce() throws ParseException { Client client = new Client(); CSVExtractor extractor = new CSVSecurityExtractor(client); List<Exception> errors = new ArrayList<Exception>(); List<Item> results = extractor.extract(0, Arrays.<String[]>asList(new String[] { "DE0007164600", "716460", "", "SAP SE", "EUR", "Notiz" }, new String[] { "DE0007164600", "716460", "SAP.DE", "SAP SE", "EUR", "Notiz" }), buildField2Column(extractor), errors); assertThat(results.size(), is(1)); assertThat(errors.size(), is(0)); // no warning a/b duplicate imports } @Test public void testErrorMessage() throws ParseException { Client client = new Client(); CSVExtractor extractor = new CSVSecurityExtractor(client); List<Exception> errors = new ArrayList<Exception>(); List<Item> results = extractor.extract(0, Arrays.<String[]>asList(new String[] { "", "", "", "", "EUR", "Notiz" }), buildField2Column(extractor), errors); assertThat(errors.size(), is(1)); assertThat(results, empty()); } }