reports: Add Balance subtraction methods.
This commit is contained in:
		
							parent
							
								
									f21ac740f2
								
							
						
					
					
						commit
						b2e35d098a
					
				
					 2 changed files with 45 additions and 0 deletions
				
			
		| 
						 | 
					@ -133,6 +133,9 @@ class Balance(Mapping[str, data.Amount]):
 | 
				
			||||||
        self._add_other(retval_map, other)
 | 
					        self._add_other(retval_map, other)
 | 
				
			||||||
        return type(self)(retval_map.values())
 | 
					        return type(self)(retval_map.values())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __sub__(self: BalanceType, other: Union[data.Amount, 'Balance']) -> BalanceType:
 | 
				
			||||||
 | 
					        return self.__add__(-other)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __eq__(self, other: Any) -> bool:
 | 
					    def __eq__(self, other: Any) -> bool:
 | 
				
			||||||
        if isinstance(other, Balance):
 | 
					        if isinstance(other, Balance):
 | 
				
			||||||
            clean_self = self.clean_copy()
 | 
					            clean_self = self.clean_copy()
 | 
				
			||||||
| 
						 | 
					@ -228,6 +231,10 @@ class MutableBalance(Balance):
 | 
				
			||||||
        self._add_other(self._currency_map, other)
 | 
					        self._add_other(self._currency_map, other)
 | 
				
			||||||
        return self
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __isub__(self: BalanceType, other: Union[data.Amount, Balance]) -> BalanceType:
 | 
				
			||||||
 | 
					        self._add_other(self._currency_map, -other)
 | 
				
			||||||
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RelatedPostings(Sequence[data.Posting]):
 | 
					class RelatedPostings(Sequence[data.Posting]):
 | 
				
			||||||
    """Collect and query related postings
 | 
					    """Collect and query related postings
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -270,6 +270,44 @@ def test_iadd_amount(number, currency):
 | 
				
			||||||
        assert balance['USD'] == testutil.Amount(500)
 | 
					        assert balance['USD'] == testutil.Amount(500)
 | 
				
			||||||
        assert balance[currency] == add_amount
 | 
					        assert balance[currency] == add_amount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize('number,currency', {
 | 
				
			||||||
 | 
					    (50, 'USD'),
 | 
				
			||||||
 | 
					    (-50, 'USD'),
 | 
				
			||||||
 | 
					    (50000, 'BRL'),
 | 
				
			||||||
 | 
					    (-4000, 'BRL'),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					def test_sub_amount(number, currency):
 | 
				
			||||||
 | 
					    start_amount = testutil.Amount(500, 'USD')
 | 
				
			||||||
 | 
					    start_bal = core.Balance([start_amount])
 | 
				
			||||||
 | 
					    sub_amount = testutil.Amount(number, currency)
 | 
				
			||||||
 | 
					    actual = start_bal - sub_amount
 | 
				
			||||||
 | 
					    if currency == 'USD':
 | 
				
			||||||
 | 
					        assert len(actual) == 1
 | 
				
			||||||
 | 
					        assert actual['USD'] == testutil.Amount(500 - number)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        assert len(actual) == 2
 | 
				
			||||||
 | 
					        assert actual['USD'] == start_amount
 | 
				
			||||||
 | 
					        assert actual[currency] == -sub_amount
 | 
				
			||||||
 | 
					    assert start_bal == {'USD': start_amount}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize('number,currency', {
 | 
				
			||||||
 | 
					    (50, 'USD'),
 | 
				
			||||||
 | 
					    (-50, 'USD'),
 | 
				
			||||||
 | 
					    (50000, 'BRL'),
 | 
				
			||||||
 | 
					    (-4000, 'BRL'),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					def test_isub_amount(number, currency):
 | 
				
			||||||
 | 
					    balance = core.MutableBalance([testutil.Amount(500, 'USD')])
 | 
				
			||||||
 | 
					    sub_amount = testutil.Amount(number, currency)
 | 
				
			||||||
 | 
					    balance -= sub_amount
 | 
				
			||||||
 | 
					    if currency == 'USD':
 | 
				
			||||||
 | 
					        assert len(balance) == 1
 | 
				
			||||||
 | 
					        assert balance['USD'] == testutil.Amount(500 - number)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        assert len(balance) == 2
 | 
				
			||||||
 | 
					        assert balance['USD'] == testutil.Amount(500)
 | 
				
			||||||
 | 
					        assert balance[currency] == -sub_amount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.mark.parametrize('mapping', [
 | 
					@pytest.mark.parametrize('mapping', [
 | 
				
			||||||
    {},
 | 
					    {},
 | 
				
			||||||
    {'USD': 0},
 | 
					    {'USD': 0},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue