[ADD] account_budget: theoretical amount: tests
[odoo/odoo.git] / addons / account_budget / tests / test_theoreticalamount.py
1 # -*- coding: utf-8 -*-
2 from datetime import datetime
3 from mock import patch
4
5 from openerp.tests.common import TransactionCase
6 from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
7
8
9 # ---------------------------------------------------------
10 # Tests
11 # ---------------------------------------------------------
12 class TestTheoreticalAmount(TransactionCase):
13     def setUp(self):
14         super(TestTheoreticalAmount, self).setUp()
15         cr, uid, = self.cr, self.uid
16         crossovered_budget_id = self.registry('crossovered.budget').create(cr, uid, {
17             'name': 'test budget name',
18             'code': 'test budget code',
19             'date_from': '2014-01-01',
20             'date_to': '2014-12-31',
21         })
22         crossovered_budget_line_obj = self.registry('crossovered.budget.lines')
23         crossovered_budget_line_id = crossovered_budget_line_obj.create(cr, uid, {
24             'crossovered_budget_id': crossovered_budget_id,
25             'general_budget_id': self.ref('account_budget.account_budget_post_sales0'),
26             'date_from': '2014-01-01',
27             'date_to': '2014-12-31',
28             'planned_amount': -364,
29         })
30         self.line = crossovered_budget_line_obj.browse(cr, uid, crossovered_budget_line_id)
31
32         self.patcher = patch('openerp.addons.account_budget.account_budget.datetime', wraps=datetime)
33         self.mock_datetime = self.patcher.start()
34
35     def test_01(self):
36         """Start"""
37         date = datetime.strptime('2014-01-01 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
38         self.mock_datetime.now.return_value = date
39         self.assertEqual(self.line.theoritical_amount, 0)
40
41     def test_02(self):
42         """After 24 hours"""
43         date = datetime.strptime('2014-01-02 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
44         self.mock_datetime.now.return_value = date
45         self.assertEqual(self.line.theoritical_amount, -1)
46
47     def test_03(self):
48         """After 36 hours"""
49         date = datetime.strptime('2014-01-02 12:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
50         self.mock_datetime.now.return_value = date
51         self.assertEqual(self.line.theoritical_amount, -1.5)
52
53     def test_04(self):
54         """After 48 hours"""
55         date = datetime.strptime('2014-01-03 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
56         self.mock_datetime.now.return_value = date
57         self.assertEqual(self.line.theoritical_amount, -2)
58
59     def test_05(self):
60         """After 10 days"""
61         date = datetime.strptime('2014-01-11 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
62         self.mock_datetime.now.return_value = date
63         self.assertEqual(self.line.theoritical_amount, -10)
64
65     def test_06(self):
66         """After 50 days"""
67         date = datetime.strptime('2014-02-20 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
68         self.mock_datetime.now.return_value = date
69         self.assertEqual(self.line.theoritical_amount, -50)
70
71     def test_07(self):
72         """After 182 days, exactly half of the budget line"""
73         date = datetime.strptime('2014-07-02 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
74         self.mock_datetime.now.return_value = date
75         self.assertEqual(self.line.theoritical_amount, -182)
76
77     def test_08(self):
78         """After 308 days at noon"""
79         date = datetime.strptime('2014-11-05 12:00:00', DEFAULT_SERVER_DATETIME_FORMAT)  # remember, remember
80         self.mock_datetime.now.return_value = date
81         self.assertEqual(self.line.theoritical_amount, -308.5)
82
83     def test_09(self):
84         """One day before"""
85         date = datetime.strptime('2014-12-30 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
86         self.mock_datetime.now.return_value = date
87         self.assertEqual(self.line.theoritical_amount, -363)
88
89     def test_10(self):
90         """At last"""
91         date = datetime.strptime('2014-12-31 00:00:00', DEFAULT_SERVER_DATETIME_FORMAT)
92         self.mock_datetime.now.return_value = date
93         self.assertEqual(self.line.theoritical_amount, -364)
94
95     def tearDown(self):
96         self.patcher.stop()
97         super(TestTheoreticalAmount, self).tearDown()