[ADD] account_budget: theoretical amount: tests
authorSimon Lejeune <sle@openerp.com>
Mon, 17 Nov 2014 22:09:59 +0000 (23:09 +0100)
committerSimon Lejeune <sle@openerp.com>
Tue, 18 Nov 2014 11:32:58 +0000 (12:32 +0100)
addons/account_budget/account_budget.py
addons/account_budget/tests/__init__.py [new file with mode: 0644]
addons/account_budget/tests/test_theoreticalamount.py [new file with mode: 0644]

index 14e966a..1985234 100644 (file)
@@ -19,7 +19,7 @@
 #
 ##############################################################################
 
-import datetime
+from datetime import date, datetime
 
 from openerp.osv import fields, osv
 from openerp.tools import ustr, DEFAULT_SERVER_DATE_FORMAT
@@ -32,10 +32,10 @@ import openerp.addons.decimal_precision as dp
 # Utils
 # ---------------------------------------------------------
 def strToDate(dt):
-    return datetime.date(int(dt[0:4]), int(dt[5:7]), int(dt[8:10]))
+    return date(int(dt[0:4]), int(dt[5:7]), int(dt[8:10]))
 
 def strToDatetime(strdate):
-    return datetime.datetime.strptime(strdate, DEFAULT_SERVER_DATE_FORMAT)
+    return datetime.strptime(strdate, DEFAULT_SERVER_DATE_FORMAT)
 
 # ---------------------------------------------------------
 # Budgets
@@ -146,7 +146,7 @@ class crossovered_budget_lines(osv.osv):
 
         res = {}
         for line in self.browse(cr, uid, ids, context=context):
-            today = datetime.datetime.now()
+            today = datetime.now()
 
             if line.paid_date:
                 if strToDate(line.date_to) <= strToDate(line.paid_date):
diff --git a/addons/account_budget/tests/__init__.py b/addons/account_budget/tests/__init__.py
new file mode 100644 (file)
index 0000000..106987b
--- /dev/null
@@ -0,0 +1 @@
+import test_theoreticalamount
diff --git a/addons/account_budget/tests/test_theoreticalamount.py b/addons/account_budget/tests/test_theoreticalamount.py
new file mode 100644 (file)
index 0000000..a1e090e
--- /dev/null
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+from datetime import datetime
+from mock import patch
+
+from openerp.tests.common import TransactionCase
+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
+
+
+# ---------------------------------------------------------
+# Tests
+# ---------------------------------------------------------
+class TestTheoreticalAmount(TransactionCase):
+    def setUp(self):
+        super(TestTheoreticalAmount, self).setUp()
+        cr, uid, = self.cr, self.uid
+        crossovered_budget_id = self.registry('crossovered.budget').create(cr, uid, {
+            'name': 'test budget name',
+            'code': 'test budget code',
+            'date_from': '2014-01-01',
+            'date_to': '2014-12-31',
+        })
+        crossovered_budget_line_obj = self.registry('crossovered.budget.lines')
+        crossovered_budget_line_id = crossovered_budget_line_obj.create(cr, uid, {
+            'crossovered_budget_id': crossovered_budget_id,
+            'general_budget_id': self.ref('account_budget.account_budget_post_sales0'),
+            'date_from': '2014-01-01',
+            'date_to': '2014-12-31',
+            'planned_amount': -364,
+        })
+        self.line = crossovered_budget_line_obj.browse(cr, uid, crossovered_budget_line_id)
+
+        self.patcher = patch('openerp.addons.account_budget.account_budget.datetime', wraps=datetime)
+        self.mock_datetime = self.patcher.start()
+
+    def test_01(self):
+        """Start"""
+        date = datetime.strptime('2014-01-01 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, 0)
+
+    def test_02(self):
+        """After 24 hours"""
+        date = datetime.strptime('2014-01-02 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -1)
+
+    def test_03(self):
+        """After 36 hours"""
+        date = datetime.strptime('2014-01-02 12:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -1.5)
+
+    def test_04(self):
+        """After 48 hours"""
+        date = datetime.strptime('2014-01-03 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -2)
+
+    def test_05(self):
+        """After 10 days"""
+        date = datetime.strptime('2014-01-11 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -10)
+
+    def test_06(self):
+        """After 50 days"""
+        date = datetime.strptime('2014-02-20 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -50)
+
+    def test_07(self):
+        """After 182 days, exactly half of the budget line"""
+        date = datetime.strptime('2014-07-02 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -182)
+
+    def test_08(self):
+        """After 308 days at noon"""
+        date = datetime.strptime('2014-11-05 12:00:00', DEFAULT_SERVER_DATETIME_FORMAT)  # remember, remember
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -308.5)
+
+    def test_09(self):
+        """One day before"""
+        date = datetime.strptime('2014-12-30 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -363)
+
+    def test_10(self):
+        """At last"""
+        date = datetime.strptime('2014-12-31 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
+        self.mock_datetime.now.return_value = date
+        self.assertEqual(self.line.theoritical_amount, -364)
+
+    def tearDown(self):
+        self.patcher.stop()
+        super(TestTheoreticalAmount, self).tearDown()