package net.objectlab.kit.pf.ucits; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import net.objectlab.kit.pf.BasicLine; import net.objectlab.kit.pf.BasicPortfolio; import net.objectlab.kit.pf.ExistingPortfolioLine; import net.objectlab.kit.pf.RuleIssue; import net.objectlab.kit.pf.ValidatedPortfolioLine; import net.objectlab.kit.pf.ValidationResults; import net.objectlab.kit.pf.cuke.CukeUtils; import net.objectlab.kit.pf.ucits.BasicUcitsConcentrationValidator.Builder; import cucumber.api.DataTable; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; public class BasicUcitsSteps { private BasicPortfolio portfolio; @Given("^system is clean$") public void system_database_is_clean() throws Throwable { CukeUtils.VALUEHOLDER.clear(); } @Then("^the UCITS validation lines for \"(.*?)\" look like$") public void ucitsValidationLines(final String resultKey, final DataTable table) { final ValidationResults results = (ValidationResults) CukeUtils.VALUEHOLDER.get(resultKey); final List<? extends ValidatedPortfolioLine> lines = results.getLines(); CukeUtils.compareResults(ValidatedPortfolioLineForTest.class, lines.stream().map(t -> new ValidatedPortfolioLineForTest(t)).collect(Collectors.toList()), table); } @Then("^the UCITS validation issues for \"(.*?)\" look like$") public void ucitsValidationIssues(final String resultKey, final DataTable table) { final ValidationResults results = (ValidationResults) CukeUtils.VALUEHOLDER.get(resultKey); final List<? extends RuleIssue> issues = results.getIssues(); CukeUtils.compareResults(RuleIssueForTest.class, issues.stream().map(t -> new RuleIssueForTest(t)).collect(Collectors.toList()), table); } @Given("^an existing portfolio for affiliate \"(.*?)\" and partyCode \"(.*?)\" and currency \"(.*?)\" like$") public void existingPortfolioImport(final String affiliateCode, final String partyCode, final String ccy, final DataTable dataTable) throws Throwable { portfolio = new BasicPortfolio(); portfolio.setAffiliateCode(affiliateCode); portfolio.setPartyCode(partyCode); portfolio.setPortfolioCcy(ccy); final List<BasicLine> details = dataTable.asList(BasicLine.class); final List<ExistingPortfolioLine> lines = new ArrayList<>(); lines.addAll(details); portfolio.setLines(lines); portfolio.setPortfolioValue(lines.stream().map(t -> t.getValueInPortfolioCcy()).reduce(BigDecimal.ZERO, (a, b) -> b != null ? a.add(b) : a)); } @When("^I run basic UCITS validation in valueholder \"(.*?)\"$") public void calculateValidation(final String key) throws Throwable { final Builder builder = new BasicUcitsConcentrationValidator.Builder() .assetDetailsProvider(BasicReferenceDataSteps.getAssetDetailsProvider()).assetEligibilityProvider( BasicReferenceDataSteps.getAssetEligibilityProvider()); final BasicUcitsConcentrationValidator validator = new BasicUcitsConcentrationValidator(builder); final ValidationResults results = validator.validate(portfolio); CukeUtils.VALUEHOLDER.put(key, results); } }