first commit
This commit is contained in:
2
modules/account_budget/tests/__init__.py
Normal file
2
modules/account_budget/tests/__init__.py
Normal file
@@ -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.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
199
modules/account_budget/tests/scenario_account_budget.rst
Normal file
199
modules/account_budget/tests/scenario_account_budget.rst
Normal file
@@ -0,0 +1,199 @@
|
||||
=======================
|
||||
Account Budget Scenario
|
||||
=======================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model, Wizard
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, get_accounts)
|
||||
>>> from trytond.modules.company.tests.tools import create_company
|
||||
>>> from trytond.tests.tools import activate_modules, assertEqual
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('account_budget', create_company, create_chart)
|
||||
|
||||
>>> Account = Model.get('account.account')
|
||||
>>> Budget = Model.get('account.budget')
|
||||
>>> BudgetLine = Model.get('account.budget.line')
|
||||
>>> Journal = Model.get('account.journal')
|
||||
>>> Move = Model.get('account.move')
|
||||
>>> Party = Model.get('party.party')
|
||||
|
||||
Create a fiscal year::
|
||||
|
||||
>>> fiscalyear = create_fiscalyear()
|
||||
>>> fiscalyear.click('create_period')
|
||||
>>> period = fiscalyear.periods[0]
|
||||
|
||||
>>> renew_fiscalyear = Wizard('account.fiscalyear.renew')
|
||||
>>> renew_fiscalyear.execute('create_')
|
||||
>>> next_fiscalyear, = renew_fiscalyear.actions[0]
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create the parties::
|
||||
|
||||
>>> customer = Party(name='Customer')
|
||||
>>> customer.save()
|
||||
>>> supplier = Party(name='Supplier')
|
||||
>>> supplier.save()
|
||||
|
||||
Create a budget::
|
||||
|
||||
>>> budget = Budget()
|
||||
>>> budget.name = 'Budget'
|
||||
>>> budget.fiscalyear = fiscalyear
|
||||
>>> budget.click('update_lines')
|
||||
>>> bool(budget.lines)
|
||||
True
|
||||
>>> line_count = len(budget.lines)
|
||||
|
||||
>>> revenue_budget, = BudgetLine.find(
|
||||
... [('account', '=', accounts['revenue'].id)])
|
||||
>>> revenue_budget.amount = Decimal(150)
|
||||
>>> revenue_budget.save()
|
||||
>>> expense_budget, = BudgetLine.find(
|
||||
... [('account', '=', accounts['expense'].id)])
|
||||
>>> expense_budget.amount = Decimal(-50)
|
||||
>>> expense_budget.save()
|
||||
|
||||
>>> budget.click('update_lines')
|
||||
>>> assertEqual(len(budget.lines), line_count)
|
||||
|
||||
Create moves to test the budget::
|
||||
|
||||
>>> journal_revenue, = Journal.find([
|
||||
... ('code', '=', 'REV'),
|
||||
... ])
|
||||
>>> journal_expense, = Journal.find([
|
||||
... ('code', '=', 'EXP'),
|
||||
... ])
|
||||
>>> move = Move()
|
||||
>>> move.period = period
|
||||
>>> move.journal = journal_revenue
|
||||
>>> move.date = period.start_date
|
||||
>>> line = move.lines.new()
|
||||
>>> line.account = accounts['revenue']
|
||||
>>> line.credit = Decimal(130)
|
||||
>>> line = move.lines.new()
|
||||
>>> line.account = accounts['receivable']
|
||||
>>> line.debit = Decimal(130)
|
||||
>>> line.party = customer
|
||||
>>> move.click('post')
|
||||
>>> move = Move()
|
||||
>>> move.period = period
|
||||
>>> move.journal = journal_expense
|
||||
>>> move.date = period.start_date
|
||||
>>> line = move.lines.new()
|
||||
>>> line.account = accounts['expense']
|
||||
>>> line.debit = Decimal(60)
|
||||
>>> line = move.lines.new()
|
||||
>>> line.account = accounts['receivable']
|
||||
>>> line.credit = Decimal(60)
|
||||
>>> line.party = supplier
|
||||
>>> move.click('post')
|
||||
|
||||
Check actual amount of the budget::
|
||||
|
||||
>>> pl_budget, = budget.root_lines
|
||||
>>> pl_budget.total_amount
|
||||
Decimal('100.00')
|
||||
>>> pl_budget.actual_amount
|
||||
Decimal('70.00')
|
||||
>>> pl_budget.percentage
|
||||
Decimal('0.7000')
|
||||
>>> revenue_budget.total_amount
|
||||
Decimal('150.00')
|
||||
>>> revenue_budget.actual_amount
|
||||
Decimal('130.00')
|
||||
>>> revenue_budget.percentage
|
||||
Decimal('0.8667')
|
||||
>>> expense_budget.total_amount
|
||||
Decimal('-50.00')
|
||||
>>> expense_budget.actual_amount
|
||||
Decimal('-60.00')
|
||||
>>> expense_budget.percentage
|
||||
Decimal('1.2000')
|
||||
|
||||
Create periods::
|
||||
|
||||
>>> create_periods = pl_budget.click('create_periods')
|
||||
>>> create_periods.execute('create_periods')
|
||||
>>> revenue_budget, expense_budget = pl_budget.children[:2]
|
||||
>>> len(pl_budget.periods)
|
||||
12
|
||||
>>> {p.total_amount for p in pl_budget.periods}
|
||||
{Decimal('8.33')}
|
||||
>>> len(revenue_budget.periods)
|
||||
12
|
||||
>>> {p.total_amount for p in revenue_budget.periods}
|
||||
{Decimal('12.50')}
|
||||
>>> len(expense_budget.periods)
|
||||
12
|
||||
>>> {p.total_amount for p in expense_budget.periods}
|
||||
{Decimal('-4.16')}
|
||||
|
||||
Check the budget's periods::
|
||||
|
||||
>>> pl_budget.periods[0].actual_amount
|
||||
Decimal('70.00')
|
||||
>>> pl_budget.periods[0].percentage
|
||||
Decimal('8.4034')
|
||||
>>> pl_budget.periods[1].actual_amount
|
||||
Decimal('0.00')
|
||||
>>> pl_budget.periods[1].percentage
|
||||
Decimal('0.0000')
|
||||
>>> revenue_budget.periods[0].actual_amount
|
||||
Decimal('130.00')
|
||||
>>> revenue_budget.periods[0].percentage
|
||||
Decimal('10.4000')
|
||||
>>> revenue_budget.periods[1].actual_amount
|
||||
Decimal('0.00')
|
||||
>>> revenue_budget.periods[1].percentage
|
||||
Decimal('0.0000')
|
||||
>>> expense_budget.periods[0].actual_amount
|
||||
Decimal('-60.00')
|
||||
>>> expense_budget.periods[0].percentage
|
||||
Decimal('14.4231')
|
||||
>>> expense_budget.periods[1].actual_amount
|
||||
Decimal('0.00')
|
||||
>>> expense_budget.periods[1].percentage
|
||||
Decimal('0.0000')
|
||||
|
||||
Try to set invalid ratio::
|
||||
|
||||
>>> period = pl_budget.periods[0]
|
||||
>>> period.ratio = Decimal('0.1')
|
||||
>>> budget.save()
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
BudgetValidationError: ...
|
||||
>>> budget.reload()
|
||||
|
||||
Copy the budget without amounts::
|
||||
|
||||
>>> copy_budget = Wizard('account.budget.copy', [budget])
|
||||
>>> copy_budget.form.name
|
||||
'Budget'
|
||||
>>> copy_budget.form.name = 'New Budget'
|
||||
>>> copy_budget.form.fiscalyear = next_fiscalyear
|
||||
>>> copy_budget.form.factor = Decimal('1.25')
|
||||
>>> copy_budget.execute('copy')
|
||||
>>> new_budget, = copy_budget.actions[0]
|
||||
>>> new_budget.name
|
||||
'New Budget'
|
||||
>>> new_pl_budget, = new_budget.root_lines
|
||||
>>> new_pl_budget.total_amount
|
||||
Decimal('125.00')
|
||||
>>> new_pl_budget.actual_amount
|
||||
Decimal('0.00')
|
||||
>>> new_pl_budget.percentage
|
||||
Decimal('0.0000')
|
||||
>>> len(new_pl_budget.periods)
|
||||
0
|
||||
13
modules/account_budget/tests/test_module.py
Normal file
13
modules/account_budget/tests/test_module.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# 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 trytond.modules.company.tests import CompanyTestMixin
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
|
||||
|
||||
class AccountBudgetTestCase(CompanyTestMixin, ModuleTestCase):
|
||||
'Test Account Budget module'
|
||||
module = 'account_budget'
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
8
modules/account_budget/tests/test_scenario.py
Normal file
8
modules/account_budget/tests/test_scenario.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# 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 trytond.tests.test_tryton import load_doc_tests
|
||||
|
||||
|
||||
def load_tests(*args, **kwargs):
|
||||
return load_doc_tests(__name__, __file__, *args, **kwargs)
|
||||
Reference in New Issue
Block a user