Ejemplo n.º 1
0
def test_calculate_interests_delta_time_out_of_bounds():
    with pytest.raises(ValueError):
        calculate_interests(
            balance=1000000000,
            internal_interest_rate=1000,
            delta_time_in_seconds=DELTA_TIME_MINIMAL_ALLOWED_VALUE - 1,
        )
Ejemplo n.º 2
0
def test_interests_calculation_returns_integer():
    assert isinstance(
        calculate_interests(
            balance=1000,
            internal_interest_rate=100,
            delta_time_in_seconds=SECONDS_PER_YEAR,
        ),
        int,
    )
Ejemplo n.º 3
0
def test_get_interests_paid_during_opening_of_trustline(
    ethindex_db_for_currency_network_with_trustlines_and_interests,
    currency_network_with_trustlines_and_interests_session,
    web3,
    chain,
    accounts,
    wait_for_ethindex_to_sync,
):
    """Test that opening a trustline with balance and interests will allow us to get resulting paid interests"""
    currency_network = currency_network_with_trustlines_and_interests_session
    initial_transfer = -100
    interest_rate = 2000

    currency_network.close_trustline(accounts[1], accounts[2])
    currency_network.update_trustline_with_accept(
        accounts[1],
        accounts[2],
        12345,
        12345,
        interest_rate,
        1000,
        False,
        initial_transfer,
    )

    path = [accounts[0], accounts[1], accounts[2], accounts[3]]
    timestamp = web3.eth.getBlock("latest").timestamp
    timestamp += ONE_YEAR_IN_SECONDS + 1
    chain.time_travel(timestamp)
    currency_network.transfer(path[0], 9, 1000, path, b"")

    wait_for_ethindex_to_sync()

    accrued_interests = EventsInformationFetcher(
        ethindex_db_for_currency_network_with_trustlines_and_interests
    ).get_list_of_paid_interests_for_trustline(currency_network.address,
                                               accounts[2], accounts[1])
    assert len(accrued_interests) == 1
    assert accrued_interests[0].value == calculate_interests(
        initial_transfer, interest_rate, ONE_YEAR_IN_SECONDS)
    assert accrued_interests[0].interest_rate == interest_rate
    assert accrued_interests[0].timestamp == web3.eth.getBlock(
        "latest").timestamp
Ejemplo n.º 4
0
def get_accrued_interests_from_events(balance_update_events,
                                      trustline_update_events):
    accrued_interests = []
    for (pre_balance_event,
         post_balance_event) in toolz.itertoolz.sliding_window(
             2, balance_update_events):
        balance = balance_viewed_from_user(pre_balance_event)
        interest_rate = get_interests_rates_of_trustline_for_user_before_timestamp(
            trustline_update_events, balance, post_balance_event.timestamp)
        interest_value = calculate_interests(
            balance,
            interest_rate,
            post_balance_event.timestamp - pre_balance_event.timestamp,
        )
        accrued_interests.append(
            InterestAccrued(interest_value, interest_rate,
                            post_balance_event.timestamp))

    return accrued_interests
Ejemplo n.º 5
0
def test_interests_calculation_negative_balance():
    assert (calculate_interests(
        balance=-1000,
        internal_interest_rate=100,
        delta_time_in_seconds=SECONDS_PER_YEAR,
    ) == -10)
Ejemplo n.º 6
0
def tests_interests_calculation_no_time():
    assert (calculate_interests(balance=1000,
                                internal_interest_rate=100,
                                delta_time_in_seconds=0) == 0)
Ejemplo n.º 7
0
def test_interests_calculation_gives_same_result_as_smart_contracts():
    assert (calculate_interests(
        balance=1000000000000000000,
        internal_interest_rate=2000,
        delta_time_in_seconds=SECONDS_PER_YEAR,
    ) == 221402758160169828)  # taken from contract calculation
Ejemplo n.º 8
0
def test_interests_calculation_high_interest_rate():
    assert calculate_interests(
        balance=1000000000000000000,
        internal_interest_rate=2000,
        delta_time_in_seconds=SECONDS_PER_YEAR,
    ) == pytest.approx(1000000000000000000 * (math.exp(0.20) - 1), rel=0.01)
Ejemplo n.º 9
0
def test_interests_calculation_zero_interest_rate():
    assert (calculate_interests(
        balance=1000,
        internal_interest_rate=0,
        delta_time_in_seconds=SECONDS_PER_YEAR,
    ) == 0)
Ejemplo n.º 10
0
def test_calculate_interests_time_glitch(small_non_positive_delta_time):
    calculate_interests(
        balance=1000000000,
        internal_interest_rate=1000,
        delta_time_in_seconds=small_non_positive_delta_time,
    ) == 0