private static ParticipationDescriptor toDescriptor(final Participation p, final Tenant tenant) { return new ParticipationDescriptor(p, () -> tenant.getLoan(p.getLoanId())); }
private static ParticipationDescriptor toDescriptor(final Participation p, final Tenant tenant) { return new ParticipationDescriptor(p, () -> LoanCache.get().getLoan(p.getLoanId(), tenant)); }
private static ParticipationDescriptor mockParticipationDescriptor(final Loan loan) { final Participation p = mock(Participation.class); doReturn(loan.getTermInMonths()).when(p).getRemainingInstalmentCount(); return new ParticipationDescriptor(p, () -> loan); }
private static ParticipationDescriptor mockParticipationDescriptor(final Loan loan, final int remainingInstalments, final OffsetDateTime deadline) { final Participation p = mock(Participation.class); when(p.getRemainingInstalmentCount()).thenReturn(remainingInstalments); when(p.getDeadline()).thenReturn(deadline); when(p.getRemainingPrincipal()).thenReturn(BigDecimal.valueOf(loan.getAmount())); return new ParticipationDescriptor(p, () -> loan); }
private static RecommendedParticipation recommendedParticipation() { final Participation p = mock(Participation.class); when(p.getRemainingPrincipal()).thenReturn(BigDecimal.TEN); return new ParticipationDescriptor(p, () -> Loan.custom().build()).recommend().orElse(null); }
@Test void getters() { final PurchasingOperationDescriptor d = new PurchasingOperationDescriptor(); final Participation p = mock(Participation.class); when(p.getId()).thenReturn(1l); final Loan l = Loan.custom().build(); final ParticipationDescriptor pd = new ParticipationDescriptor(p, () -> l); assertThat(d.identify(pd)).isEqualTo(1); }
@Test void purchasingNoStrategy() { final Participation mock = mock(Participation.class); final ParticipationDescriptor pd = new ParticipationDescriptor(mock, () -> Loan.custom().build()); final PowerTenant tenant = mockTenant(); final PurchasingOperationDescriptor d = spy(new PurchasingOperationDescriptor()); doReturn(Stream.of(pd)).when(d).readMarketplace(any()); final StrategyExecutor<ParticipationDescriptor, PurchaseStrategy> exec = new StrategyExecutor<>(tenant, d); assertThat(exec.get()).isEmpty(); // check events final List<Event> events = getEventsRequested(); assertThat(events).isEmpty(); }
@Test void recommendWrong() { final Participation p = mockParticipation(BigDecimal.TEN); final ParticipationDescriptor pd = new ParticipationDescriptor(p, () -> LOAN); final Optional<RecommendedParticipation> r = pd.recommend(p.getRemainingPrincipal().subtract(BigDecimal.ONE)); assertThat(r).isEmpty(); }
@Test void underBalance() { final Participation p = mock(Participation.class); when(p.getRemainingPrincipal()).thenReturn(BigDecimal.valueOf(200)); final Loan l = Loan.custom().build(); final PurchaseStrategy s = mock(PurchaseStrategy.class); when(s.recommend(any(), any(), any())) .thenAnswer(i -> { final Collection<ParticipationDescriptor> participations = i.getArgument(0); return participations.stream() .map(ParticipationDescriptor::recommend) .flatMap(o -> o.map(Stream::of).orElse(Stream.empty())); }); final ParticipationDescriptor pd = new ParticipationDescriptor(p, () -> l); final Zonky z = harmlessZonky(0); final PowerTenant auth = mockTenant(z); final Collection<Investment> i = PurchasingSession.purchase(auth, Collections.singleton(pd), s); assertSoftly(softly -> { softly.assertThat(i).isEmpty(); softly.assertThat(getEventsRequested()).has(new Condition<List<? extends Event>>() { @Override public boolean matches(final List<? extends Event> events) { return events.stream().noneMatch(e -> e instanceof PurchaseRequestedEvent); } }); }); }
@Test void equals() { final Participation p = mockParticipation(); final ParticipationDescriptor d = new ParticipationDescriptor(p, () -> LOAN); final RecommendedParticipation r = new RecommendedParticipation(d); assertSoftly(softly -> { softly.assertThat(r).isNotEqualTo(null); softly.assertThat(r).isNotEqualTo(UUID.randomUUID().toString()); softly.assertThat(r).isEqualTo(r); }); final RecommendedParticipation r2 = new RecommendedParticipation(d); assertSoftly(softly -> { softly.assertThat(r).isEqualTo(r2); softly.assertThat(r2).isEqualTo(r); }); final RecommendedParticipation r3 = new RecommendedParticipation(new ParticipationDescriptor(mockParticipation(), () -> LOAN)); assertThat(r).isNotEqualTo(r3); } }
@Test void equals() { final Participation p = mockParticipation(BigDecimal.TEN); final ParticipationDescriptor pd = new ParticipationDescriptor(p, () -> LOAN); assertSoftly(softly -> { softly.assertThat(pd).isNotEqualTo(null); softly.assertThat(pd).isNotEqualTo(UUID.randomUUID().toString()); softly.assertThat(pd).isEqualTo(pd); }); final ParticipationDescriptor pd2 = new ParticipationDescriptor(p, () -> LOAN); assertSoftly(softly -> { softly.assertThat(pd).isEqualTo(pd2); softly.assertThat(pd2).isEqualTo(pd); }); final ParticipationDescriptor pd3 = new ParticipationDescriptor(mockParticipation(BigDecimal.ONE), () -> LOAN); assertSoftly(softly -> { softly.assertThat(pd).isNotEqualTo(pd3); }); } }
@Test void recommend() { final Participation p = mockParticipation(BigDecimal.TEN); final ParticipationDescriptor pd = new ParticipationDescriptor(p, () -> LOAN); final Optional<RecommendedParticipation> r = pd.recommend(p.getRemainingPrincipal()); assertThat(r).isPresent(); assertSoftly(softly -> { softly.assertThat(r.get().amount()).isEqualTo(p.getRemainingPrincipal()); softly.assertThat(r.get().descriptor().related()).isSameAs(LOAN); softly.assertThat(r.get().descriptor()).isEqualTo(pd); }); }
@Test void equality() { final ParticipationDescriptor original = new ParticipationDescriptor(PARTICIPATION, () -> LOAN); final Wrapper<ParticipationDescriptor> w = Wrapper.wrap(original); assertSoftly(softly -> { softly.assertThat(w).isEqualTo(w); softly.assertThat(w).isEqualTo(Wrapper.wrap(original)); softly.assertThat(w).isEqualTo(Wrapper.wrap(new ParticipationDescriptor(PARTICIPATION, () -> LOAN))); softly.assertThat(w).isNotEqualTo(null); }); } }
@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(); }); }