def test_change_cdty_split_price(self, book_transactions): tr = book_transactions.transactions(description="my purchase of stock") sp = tr.splits(account=book_transactions.accounts(name="broker")) assert len(book_transactions.prices) == 6 p = [p for p in book_transactions.prices if p.date.day == 29][0] p_expected = (sp.value / sp.quantity).quantize(Decimal("0.000001")) assert p.value == p_expected # changing the quantity of the split should NOT change the existing price sp.quantity = (5, 1) book_transactions.validate() p_not_expected = (sp.value / sp.quantity).quantize(Decimal("0.000001")) assert len(book_transactions.prices) == 6 assert p.value == p_expected assert p_expected != p_not_expected # changing the post date of the transaction of the split should create a new price tr.post_date = date(2015, 1, 29) book_transactions.validate() book_transactions.flush() assert len(book_transactions.prices) == 7
def test_change_cdty_split_price(self, book_transactions): tr = book_transactions.transactions(description="my purchase of stock") sp = tr.splits(account=book_transactions.accounts(name="broker")) assert len(book_transactions.prices) == 6 p = [p for p in book_transactions.prices if p.date.day == 29][0] assert p.value == (sp.value / sp.quantity).quantize( Decimal("0.000001")) print(book_transactions.prices) # changing the quantity of the split should change the existing price sp.quantity = (5, 1) print(tr.post_date, tr.enter_date) print(Transaction._post_date, Transaction.enter_date) print(book_transactions.prices) book_transactions.validate() print(book_transactions.prices) assert len(book_transactions.prices) == 6 assert p.value == (sp.value / sp.quantity).quantize( Decimal("0.000001")) # changing the post date of the transaction of the split should create a new price tr.post_date = date(2015, 1, 29) book_transactions.validate() assert len(book_transactions.prices) == 7
def test_delete__replace_existing_split__split_with_transaction( self, book_transactions ): s = len(book_transactions.splits) transaction = book_transactions.transactions(description="my revenue") split = transaction.splits(value=1000) split_guid = split.guid assert len(transaction.splits) == 2 splits = list(transaction.splits) del transaction.splits[:] splits = [ Split( account=split.account, value=split.value * 2, quantity=split.quantity * 2, transaction=transaction, ) for split in splits ] assert len(transaction.splits) == 2 transaction.splits[:] = splits assert split.transaction is None assert len(transaction.splits) == 2 book_transactions.flush() book_transactions.save() # check that previous split has been deleted with pytest.raises(KeyError, match="Could not find object with {'guid'"): split = book_transactions.splits(guid=split_guid) ns = len(book_transactions.splits) assert ns == s
def test_delete_existing_transaction(self, book_transactions): l = len(book_transactions.transactions) s = len(book_transactions.splits) tr = book_transactions.transactions(description="my revenue") book_transactions.delete(tr) book_transactions.save() nl = len(book_transactions.transactions) ns = len(book_transactions.splits) assert nl == l - 1 assert ns == s - 2
def test_delete_existing_transaction(self, book_transactions): l = len(book_transactions.transactions) s = len(book_transactions.splits) tr = book_transactions.transactions(description="my revenue") book_transactions.delete(tr) book_transactions.save() nl = len(book_transactions.transactions) ns = len(book_transactions.splits) assert nl == l - 1 assert ns == s - 2
def test_delete_existing_transaction(self, book_transactions): asset = book_transactions.accounts.get(name="asset") inc = book_transactions.accounts.get(name="inc") exp = book_transactions.accounts.get(name="exp") # revenue item revenue = book_transactions.transactions(description="my revenue") revenue_split_asset = revenue.splits(account=asset) revenue_split_inc = revenue.splits(account=inc) assert revenue_split_asset.is_credit is False assert revenue_split_asset.is_debit is True assert revenue_split_inc.is_credit is True assert revenue_split_inc.is_debit is False # expense item expense = book_transactions.transactions(description="my expense") expense_split_asset = expense.splits(account=asset) expense_split_inc = expense.splits(account=exp) assert expense_split_asset.is_credit is True assert expense_split_asset.is_debit is False assert expense_split_inc.is_credit is False assert expense_split_inc.is_debit is True
def test_change_cdty_split_price(self, book_transactions): tr = book_transactions.transactions(description="my purchase of stock") sp = tr.splits(account=book_transactions.accounts(name="broker")) assert len(book_transactions.prices) == 6 p = [p for p in book_transactions.prices if p.date.day == 29][0] assert p.value == (sp.value / sp.quantity).quantize(Decimal("0.000001")) # changing the quantity of the split should change the existing price sp.quantity = (5, 1) book_transactions.validate() assert len(book_transactions.prices) == 6 assert p.value == (sp.value / sp.quantity).quantize(Decimal("0.000001")) # changing the post date of the transaction of the split should create a new price tr.post_date = datetime(2015, 1, 29, tzinfo=tr.post_date.tzinfo) book_transactions.validate() assert len(book_transactions.prices) == 7
def test_delete__replace_existing_split(self, book_transactions): s = len(book_transactions.splits) transaction = book_transactions.transactions(description="my revenue") split = transaction.splits(value=1000) assert len(transaction.splits) == 2 splits = [ Split( account=split.account, value=split.value, quantity=split.quantity, ) for split in list(transaction.splits) ] assert len(transaction.splits) == 2 transaction.splits[:] = splits assert split.transaction is None assert len(transaction.splits) == 2 book_transactions.flush() book_transactions.save() ns = len(book_transactions.splits) assert ns == s