diff --git a/modules/purchase_trade/tests/__init__.py b/modules/purchase_trade/tests/__init__.py new file mode 100644 index 0000000..4effdfa --- /dev/null +++ b/modules/purchase_trade/tests/__init__.py @@ -0,0 +1,2 @@ +# This file is part of Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py new file mode 100644 index 0000000..2f49993 --- /dev/null +++ b/modules/purchase_trade/tests/test_module.py @@ -0,0 +1,52 @@ +# This file is part of Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from decimal import Decimal +from unittest.mock import Mock, patch + +from trytond.pool import Pool +from trytond.tests.test_tryton import ModuleTestCase, with_transaction + + +class PurchaseTradeTestCase(ModuleTestCase): + 'Test purchase_trade module' + module = 'purchase_trade' + + @with_transaction() + def test_get_totals_without_rows(self): + 'get_totals returns zeros when the query has no row' + Valuation = Pool().get('valuation.valuation') + cursor = Mock() + cursor.fetchone.return_value = None + connection = Mock() + connection.cursor.return_value = cursor + + with patch( + 'trytond.modules.purchase_trade.valuation.Transaction' + ) as Transaction, patch.object( + Valuation, '__table__', return_value='valuation_valuation'): + Transaction.return_value.connection = connection + + self.assertEqual( + Valuation.get_totals(), (Decimal(0), Decimal(0))) + + @with_transaction() + def test_get_totals_without_previous_total(self): + 'get_totals converts null variation to zero' + Valuation = Pool().get('valuation.valuation') + cursor = Mock() + cursor.fetchone.return_value = (Decimal('42.50'), None) + connection = Mock() + connection.cursor.return_value = cursor + + with patch( + 'trytond.modules.purchase_trade.valuation.Transaction' + ) as Transaction, patch.object( + Valuation, '__table__', return_value='valuation_valuation'): + Transaction.return_value.connection = connection + + self.assertEqual( + Valuation.get_totals(), (Decimal('42.50'), Decimal(0))) + + +del ModuleTestCase diff --git a/modules/purchase_trade/valuation.py b/modules/purchase_trade/valuation.py index 3142d05..3dc7cf3 100644 --- a/modules/purchase_trade/valuation.py +++ b/modules/purchase_trade/valuation.py @@ -459,9 +459,13 @@ class Valuation(ValuationBase, ModelView): """ cursor.execute(sql) - last_total, last_variation = cursor.fetchone() + row = cursor.fetchone() + if not row: + return Decimal(0), Decimal(0) - return last_total, last_variation + last_total, last_variation = row + + return last_total or Decimal(0), last_variation or Decimal(0) class ValuationLine(ValuationBase, ModelView): "Last Valuation"