use of com.github.robozonky.app.authentication.Authenticated in project robozonky by RoboZonky.
the class BlockedAmountsUpdaterTest method customDependant.
@Test
void customDependant() {
final Portfolio p = mock(Portfolio.class);
final PortfolioDependant d = mock(PortfolioDependant.class);
final Authenticated auth = mock(Authenticated.class);
final BlockedAmountsUpdater bau = new BlockedAmountsUpdater(auth, () -> Optional.of(p), d);
bau.run();
verify(d).accept(eq(p), eq(auth));
}
use of com.github.robozonky.app.authentication.Authenticated in project robozonky by RoboZonky.
the class DaemonOperationTest method error.
@Test
void error() {
final Authenticated a = mock(Authenticated.class);
final BiConsumer<Portfolio, Authenticated> operation = (p, api) -> {
throw new Error();
};
final Consumer<Throwable> shutdown = mock(Consumer.class);
final DaemonOperation d = new CustomOperation(a, operation, shutdown);
d.run();
verify(shutdown).accept(any());
}
use of com.github.robozonky.app.authentication.Authenticated in project robozonky by RoboZonky.
the class InvestingDaemon method execute.
@Override
protected void execute(final Portfolio portfolio, final Authenticated authenticated) {
// don't query anything unless we have enough money to invest
final int balance = portfolio.getRemoteBalance().get().intValue();
final int minimum = Defaults.MINIMUM_INVESTMENT_IN_CZK;
if (balance < minimum) {
LOGGER.debug("Asleep as there is not enough available balance. ({} < {})", balance, minimum);
return;
}
// query marketplace for investment opportunities
final Collection<LoanDescriptor> loans = authenticated.call(zonky -> zonky.getAvailableLoans(SELECT)).parallel().filter(// re-investing would fail
l -> !l.getMyInvestment().isPresent()).map(l -> {
/*
* Loan is first retrieved from the authenticated API. This way, we get all available
* information, such as borrower nicknames from other loans made by the same person.
*/
final Loan complete = authenticated.call(zonky -> LoanCache.INSTANCE.getLoan(l.getId(), zonky));
/*
* We update the loan within the cache with latest information from the marketplace. This is
* done so that we don't cache stale loan information, such as how much of the loan is remaining
* to be invested.
*/
Loan.updateFromMarketplace(complete, l);
return complete;
}).map(LoanDescriptor::new).collect(Collectors.toList());
investing.apply(portfolio, loans);
}
use of com.github.robozonky.app.authentication.Authenticated in project robozonky by RoboZonky.
the class PortfolioUpdater method runIt.
private Portfolio runIt() {
final Portfolio result = authenticated.call(zonky -> Portfolio.create(zonky, balance));
final CompletableFuture<Portfolio> combined = dependants.stream().map(d -> (Function<Portfolio, Portfolio>) folio -> {
LOGGER.trace("Running {}.", d);
d.accept(folio, authenticated);
LOGGER.trace("Finished {}.", d);
return folio;
}).reduce(CompletableFuture.completedFuture(result), CompletableFuture::thenApply, (s1, s2) -> s1.thenCombine(s2, (p1, p2) -> p2));
try {
return combined.get();
} catch (final Throwable t) {
throw new IllegalStateException("Portfolio update failed.", t);
}
}
use of com.github.robozonky.app.authentication.Authenticated in project robozonky by RoboZonky.
the class Repayments method accept.
@Override
public void accept(final Portfolio portfolio, final Authenticated authenticated) {
final PortfolioOverview portfolioOverview = portfolio.calculateOverview();
final Collection<Integer> active = getActiveLastTime();
// detect and process loans that have been fully repaid, comparing to the last time active loans were checked
final Stream<Investment> repaid = portfolio.getActiveWithPaymentStatus(PaymentStatuses.of(PaymentStatus.PAID));
repaid.filter(i -> active.contains(i.getLoanId())).peek(i -> {
final Loan l = authenticated.call(zonky -> LoanCache.INSTANCE.getLoan(i, zonky));
final Event e = new LoanRepaidEvent(i, l, portfolioOverview);
Events.fire(e);
}).forEach(i -> active.remove(i.getLoanId()));
// add all active loans to date
portfolio.getActiveWithPaymentStatus(PaymentStatus.getActive()).forEach(i -> active.add(i.getLoanId()));
// store for future reference
setActive(active);
}
Aggregations