Search in sources :

Example 1 with ConfirmationProvider

use of com.github.robozonky.api.confirmations.ConfirmationProvider in project robozonky by RoboZonky.

the class ZonkoidSettingsValidatorTest method zonkoidProper.

@Test
void zonkoidProper() {
    final ConfirmationProvider cp = mock(ConfirmationProvider.class);
    when(cp.requestConfirmation(any(), anyInt(), anyInt())).thenReturn(true);
    final InstallData d = ZonkoidSettingsValidatorTest.mockInstallData();
    // execute SUT
    final DataValidator validator = new ZonkoidSettingsValidator(() -> Optional.of(cp));
    final DataValidator.Status result = validator.validateData(d);
    // run test
    assertThat(result).isEqualTo(DataValidator.Status.OK);
}
Also used : InstallData(com.izforge.izpack.api.data.InstallData) DataValidator(com.izforge.izpack.api.installer.DataValidator) ConfirmationProvider(com.github.robozonky.api.confirmations.ConfirmationProvider) Test(org.junit.jupiter.api.Test)

Example 2 with ConfirmationProvider

use of com.github.robozonky.api.confirmations.ConfirmationProvider in project robozonky by RoboZonky.

the class ZonkoidSettingsValidatorTest method zonkoidPresentButRejecting.

@Test
void zonkoidPresentButRejecting() {
    final ConfirmationProvider cp = mock(ConfirmationProvider.class);
    when(cp.requestConfirmation(any(), anyInt(), anyInt())).thenReturn(false);
    final InstallData d = ZonkoidSettingsValidatorTest.mockInstallData();
    // execute SUT
    final DataValidator validator = new ZonkoidSettingsValidator(() -> Optional.of(cp));
    final DataValidator.Status result = validator.validateData(d);
    // run test
    assertThat(result).isEqualTo(DataValidator.Status.WARNING);
}
Also used : InstallData(com.izforge.izpack.api.data.InstallData) DataValidator(com.izforge.izpack.api.installer.DataValidator) ConfirmationProvider(com.github.robozonky.api.confirmations.ConfirmationProvider) Test(org.junit.jupiter.api.Test)

Example 3 with ConfirmationProvider

use of com.github.robozonky.api.confirmations.ConfirmationProvider in project robozonky by RoboZonky.

the class CheckerTest method confirmationsRejecting.

@Test
void confirmationsRejecting() {
    final ConfirmationProvider cp = mock(ConfirmationProvider.class);
    when(cp.requestConfirmation(any(), anyInt(), anyInt())).thenReturn(false);
    final boolean result = Checker.confirmations(cp, "", SECRET, CheckerTest::mockApiThatReturnsOneLoan);
    assertThat(result).isFalse();
}
Also used : ConfirmationProvider(com.github.robozonky.api.confirmations.ConfirmationProvider) Test(org.junit.jupiter.api.Test)

Example 4 with ConfirmationProvider

use of com.github.robozonky.api.confirmations.ConfirmationProvider in project robozonky by RoboZonky.

the class CheckerTest method confirmationsNotConfirming.

@Test
void confirmationsNotConfirming() {
    final ConfirmationProvider cp = mock(ConfirmationProvider.class);
    when(cp.requestConfirmation(any(), anyInt(), anyInt())).thenReturn(false);
    final boolean result = Checker.confirmations(cp, "", SECRET, CheckerTest::mockApiThatReturnsOneLoan);
    assertThat(result).isFalse();
}
Also used : ConfirmationProvider(com.github.robozonky.api.confirmations.ConfirmationProvider) Test(org.junit.jupiter.api.Test)

Example 5 with ConfirmationProvider

use of com.github.robozonky.api.confirmations.ConfirmationProvider in project robozonky by RoboZonky.

the class Session method invest.

/**
 * Request {@link ControlApi} to invest in a given loan, leveraging the {@link ConfirmationProvider}.
 * @param recommendation Loan to invest into.
 * @return True if investment successful. The investment is reflected in {@link #getResult()}.
 */
public boolean invest(final RecommendedLoan recommendation) {
    final LoanDescriptor loan = recommendation.descriptor();
    final int loanId = loan.item().getId();
    if (portfolioOverview.getCzkAvailable() < recommendation.amount().intValue()) {
        // should not be allowed by the calling code
        return false;
    }
    Events.fire(new InvestmentRequestedEvent(recommendation));
    final boolean seenBefore = state.getSeenLoans().stream().anyMatch(l -> isSameLoan(l, loanId));
    final ZonkyResponse response = investor.invest(recommendation, seenBefore);
    Session.LOGGER.debug("Response for loan {}: {}.", loanId, response);
    final String providerId = investor.getConfirmationProviderId().orElse("-");
    switch(response.getType()) {
        case REJECTED:
            return investor.getConfirmationProviderId().map(c -> {
                Events.fire(new InvestmentRejectedEvent(recommendation, providerId));
                // rejected through a confirmation provider => forget
                discard(loan);
                return false;
            }).orElseGet(() -> {
                // rejected due to no confirmation provider => make available for direct investment later
                Events.fire(new InvestmentSkippedEvent(recommendation));
                Session.LOGGER.debug("Loan #{} protected by CAPTCHA, will check back later.", loanId);
                skip(loan);
                return false;
            });
        case DELEGATED:
            final Event e = new InvestmentDelegatedEvent(recommendation, providerId);
            Events.fire(e);
            if (recommendation.isConfirmationRequired()) {
                // confirmation required, delegation successful => forget
                discard(loan);
            } else {
                // confirmation not required, delegation successful => make available for direct investment later
                skip(loan);
            }
            return false;
        case INVESTED:
            final int confirmedAmount = response.getConfirmedAmount().getAsInt();
            final Investment i = Investment.fresh(recommendation.descriptor().item(), confirmedAmount);
            markSuccessfulInvestment(i);
            Events.fire(new InvestmentMadeEvent(i, loan.item(), portfolioOverview));
            return true;
        case // still protected by CAPTCHA
        SEEN_BEFORE:
            return false;
        default:
            throw new IllegalStateException("Not possible.");
    }
}
Also used : RecommendedLoan(com.github.robozonky.api.strategies.RecommendedLoan) ExecutionCompletedEvent(com.github.robozonky.api.notifications.ExecutionCompletedEvent) TransactionCategory(com.github.robozonky.api.remote.enums.TransactionCategory) LoggerFactory(org.slf4j.LoggerFactory) InvestmentDelegatedEvent(com.github.robozonky.api.notifications.InvestmentDelegatedEvent) ControlApi(com.github.robozonky.api.remote.ControlApi) FastList(org.eclipse.collections.impl.list.mutable.FastList) ArrayList(java.util.ArrayList) BlockedAmount(com.github.robozonky.api.remote.entities.BlockedAmount) Events(com.github.robozonky.app.Events) Authenticated(com.github.robozonky.app.authentication.Authenticated) Defaults(com.github.robozonky.internal.api.Defaults) ConfirmationProvider(com.github.robozonky.api.confirmations.ConfirmationProvider) InvestmentRejectedEvent(com.github.robozonky.api.notifications.InvestmentRejectedEvent) LoanDescriptor(com.github.robozonky.api.strategies.LoanDescriptor) Logger(org.slf4j.Logger) Collection(java.util.Collection) ExecutionStartedEvent(com.github.robozonky.api.notifications.ExecutionStartedEvent) Collectors(java.util.stream.Collectors) Event(com.github.robozonky.api.notifications.Event) List(java.util.List) InvestmentRequestedEvent(com.github.robozonky.api.notifications.InvestmentRequestedEvent) PortfolioOverview(com.github.robozonky.api.strategies.PortfolioOverview) Investment(com.github.robozonky.api.remote.entities.sanitized.Investment) InvestmentMadeEvent(com.github.robozonky.api.notifications.InvestmentMadeEvent) InvestmentSkippedEvent(com.github.robozonky.api.notifications.InvestmentSkippedEvent) Portfolio(com.github.robozonky.app.portfolio.Portfolio) Collections(java.util.Collections) LoanRecommendedEvent(com.github.robozonky.api.notifications.LoanRecommendedEvent) InvestmentDelegatedEvent(com.github.robozonky.api.notifications.InvestmentDelegatedEvent) LoanDescriptor(com.github.robozonky.api.strategies.LoanDescriptor) InvestmentRequestedEvent(com.github.robozonky.api.notifications.InvestmentRequestedEvent) ExecutionCompletedEvent(com.github.robozonky.api.notifications.ExecutionCompletedEvent) InvestmentDelegatedEvent(com.github.robozonky.api.notifications.InvestmentDelegatedEvent) InvestmentRejectedEvent(com.github.robozonky.api.notifications.InvestmentRejectedEvent) ExecutionStartedEvent(com.github.robozonky.api.notifications.ExecutionStartedEvent) Event(com.github.robozonky.api.notifications.Event) InvestmentRequestedEvent(com.github.robozonky.api.notifications.InvestmentRequestedEvent) InvestmentMadeEvent(com.github.robozonky.api.notifications.InvestmentMadeEvent) InvestmentSkippedEvent(com.github.robozonky.api.notifications.InvestmentSkippedEvent) LoanRecommendedEvent(com.github.robozonky.api.notifications.LoanRecommendedEvent) InvestmentSkippedEvent(com.github.robozonky.api.notifications.InvestmentSkippedEvent) InvestmentRejectedEvent(com.github.robozonky.api.notifications.InvestmentRejectedEvent) Investment(com.github.robozonky.api.remote.entities.sanitized.Investment) InvestmentMadeEvent(com.github.robozonky.api.notifications.InvestmentMadeEvent)

Aggregations

ConfirmationProvider (com.github.robozonky.api.confirmations.ConfirmationProvider)8 Test (org.junit.jupiter.api.Test)6 InstallData (com.izforge.izpack.api.data.InstallData)2 DataValidator (com.izforge.izpack.api.installer.DataValidator)2 Collections (java.util.Collections)2 ConfirmationProviderService (com.github.robozonky.api.confirmations.ConfirmationProviderService)1 RequestId (com.github.robozonky.api.confirmations.RequestId)1 Event (com.github.robozonky.api.notifications.Event)1 ExecutionCompletedEvent (com.github.robozonky.api.notifications.ExecutionCompletedEvent)1 ExecutionStartedEvent (com.github.robozonky.api.notifications.ExecutionStartedEvent)1 InvestmentDelegatedEvent (com.github.robozonky.api.notifications.InvestmentDelegatedEvent)1 InvestmentMadeEvent (com.github.robozonky.api.notifications.InvestmentMadeEvent)1 InvestmentRejectedEvent (com.github.robozonky.api.notifications.InvestmentRejectedEvent)1 InvestmentRequestedEvent (com.github.robozonky.api.notifications.InvestmentRequestedEvent)1 InvestmentSkippedEvent (com.github.robozonky.api.notifications.InvestmentSkippedEvent)1 LoanRecommendedEvent (com.github.robozonky.api.notifications.LoanRecommendedEvent)1 ControlApi (com.github.robozonky.api.remote.ControlApi)1 BlockedAmount (com.github.robozonky.api.remote.entities.BlockedAmount)1 Investment (com.github.robozonky.api.remote.entities.sanitized.Investment)1 TransactionCategory (com.github.robozonky.api.remote.enums.TransactionCategory)1