Exemplo n.º 1
0
def run_projection(db):
    """Run projection showing total contribution of challenge scenario"""
    while True:
        factor = input("\nChallenge factor ('q' to quit): ")
        if factor in ('q', 'quit'):
            return
        min_filter = input("Minimum donation to challenge (<return> for none, 'q' to quit): ")
        if min_filter in ('q', 'quit'):
            return
        max_filter = input("Maximum donation to challenge (<return> for none, 'q' to quit): ")
        if max_filter in ('q', 'quit'):
            return
        try:
            scenario = Donors.challenge(db,
                                        float(factor),
                                        float(min_filter) if min_filter else None,
                                        float(max_filter) if max_filter else None)
        except ValueError:
            print('Invalid inputs, try again')
        else:
            break
    print()
    for d in scenario.values():
        print(f"   {d.name}: ${sum(d.donations):,.2f} = {factor} * "
              f"("+' + '.join(list(map(lambda x: f"${x:,.2f}", d.donations)))+')')
    print(f"\n   Total contribution required: ${scenario.total_value():,.2f}\n")
Exemplo n.º 2
0
def test_challenge():
    donors = Donors()
    d1 = Donor("Mark", 50)
    d1.add_donation(90)
    d1.add_donation(110)
    d2 = Donor("Mary", 80)
    d2.add_donation(95)
    d2.add_donation(115)
    donors.add_donor(d1)
    donors.add_donor(d2)
    copy = donors.challenge(3, min_amt=85, max_amt=100)
    assert copy.get_donor("Mark").donations == (270, )
    assert copy.get_donor("Mary").donations == (285, )
Exemplo n.º 3
0
def test_donors_challenge_max_donation():
    db = Donors({"A Name": [1, 2, 3], "B Name": [4, 5, 6]})
    db2 = Donors.challenge(db, 2, max_donation=4)
    assert db2["A Name"].donations == [2, 4, 6]
    assert db2["B Name"].donations == [8]
Exemplo n.º 4
0
def test_donors_challenge_min_and_max_donation():
    db = Donors({"A Name": [1, 2, 3], "B Name": [4, 5, 6]})
    db2 = Donors.challenge(db, 2, min_donation=2, max_donation=5)
    assert db2["A Name"].donations == [4, 6]
    assert db2["B Name"].donations == [8, 10]
Exemplo n.º 5
0
def test_donors_challenge_min_donation():
    db = Donors({"A Name": [1, 2, 3], "B Name": [4, 5, 6]})
    db2 = Donors.challenge(db, 2, min_donation=4)
    assert not db2.get("A Name")
    assert db2["B Name"].donations == [8, 10, 12]