@Override public Rating getRating() { return participation.getRating(); }
@Override public Rating getRating() { return participation.getRating(); }
private int[] getRecommendationBoundaries(final Participation participation) { final Rating rating = participation.getRating(); final int minimumInvestment = strategy.getMinimumInvestmentSizeInCzk(rating); final int maximumInvestment = strategy.getMaximumInvestmentSizeInCzk(rating); return new int[]{minimumInvestment, maximumInvestment}; }
private int[] getRecommendationBoundaries(final Participation participation) { final Rating rating = participation.getRating(); final int minimumInvestment = strategy.getMinimumInvestmentSizeInCzk(rating); final int maximumInvestment = strategy.getMaximumInvestmentSizeInCzk(rating); return new int[]{minimumInvestment, maximumInvestment}; }
@Override public Stream<RecommendedParticipation> recommend(final Collection<ParticipationDescriptor> available, final PortfolioOverview portfolio, final Restrictions restrictions) { if (!Util.isAcceptable(strategy, portfolio)) { return Stream.empty(); } // split available marketplace into buckets per rating final Map<Rating, List<ParticipationDescriptor>> splitByRating = Util.sortByRating(strategy.getApplicableParticipations(available), d -> d.item().getRating()); // recommend amount to invest per strategy return Util.rankRatingsByDemand(strategy, splitByRating.keySet(), portfolio) .flatMap(rating -> splitByRating.get(rating).stream().sorted(COMPARATOR)) .peek(d -> Decisions.report(logger -> logger.trace("Evaluating {}.", d.item()))) .filter(d -> sizeMatchesStrategy(d.item(), portfolio.getCzkAvailable())) .flatMap(d -> d.recommend().map(Stream::of).orElse(Stream.empty())); } }
@Override public Stream<RecommendedParticipation> recommend(final Collection<ParticipationDescriptor> available, final PortfolioOverview portfolio, final Restrictions restrictions) { if (!Util.isAcceptable(strategy, portfolio)) { return Stream.empty(); } // split available marketplace into buckets per rating final Map<Rating, List<ParticipationDescriptor>> splitByRating = Util.sortByRating(strategy.getApplicableParticipations(available), d -> d.item().getRating()); // recommend amount to invest per strategy return Util.rankRatingsByDemand(strategy, splitByRating.keySet(), portfolio) .flatMap(rating -> splitByRating.get(rating).stream().sorted(COMPARATOR)) .peek(d -> Decisions.report(logger -> logger.trace("Evaluating {}.", d.item()))) .filter(d -> sizeMatchesStrategy(d.item(), portfolio.getCzkAvailable())) .flatMap(d -> d.recommend().map(Stream::of).orElse(Stream.empty())); } }
private static Participation mockParticipation(final Loan loan) { final Participation p = mock(Participation.class); when(p.getPurpose()).thenReturn(loan.getPurpose()); when(p.getRating()).thenReturn(loan.getRating()); when(p.getIncomeType()).thenReturn(loan.getMainIncomeType()); return p; }
@Test void values() { final ParticipationDescriptor original = new ParticipationDescriptor(PARTICIPATION, () -> LOAN); final Wrapper<ParticipationDescriptor> w = Wrapper.wrap(original); assertSoftly(softly -> { softly.assertThat(w.isInsuranceActive()).isEqualTo(PARTICIPATION.isInsuranceActive()); softly.assertThat(w.getInterestRate()).isEqualTo(PARTICIPATION.getInterestRate()); softly.assertThat(w.getRegion()).isEqualTo(LOAN.getRegion()); softly.assertThat(w.getRating()).isEqualTo(PARTICIPATION.getRating()); softly.assertThat(w.getMainIncomeType()).isEqualTo(LOAN.getMainIncomeType()); softly.assertThat(w.getPurpose()).isEqualTo(LOAN.getPurpose()); softly.assertThat(w.getOriginalAmount()).isEqualTo(LOAN.getAmount()); softly.assertThat(w.getRemainingPrincipal()).isEqualTo(PARTICIPATION.getRemainingPrincipal()); softly.assertThat(w.getOriginal()).isSameAs(original); softly.assertThat(w.getStory()).isEqualTo(LOAN.getStory()); softly.assertThat(w.getOriginalTermInMonths()).isEqualTo(PARTICIPATION.getOriginalInstalmentCount()); softly.assertThat(w.getRemainingTermInMonths()).isEqualTo(PARTICIPATION.getRemainingInstalmentCount()); softly.assertThat(w.toString()).isNotNull(); }); }