Files
odoo_source/addons/account/tests/account_test_no_chart.py
T
jem-odoo 35e0347e4b [IMP] account,sale,expense: test when no chart of account
Accounting tests are executed post install to be sure a chart
of account is install. However, for some case, we might want
to run test at module installation, involving accounting, without
being sure a chart of account is installed.

This commit provides a base common test class with a minimal chart
of account (some journals and accounts) allowing to start tests at
installation. this class should be extended in sale or expense for
this modules to be tests at installation. We will required this for
reinvoice test in sale later (test consumable product when sale_stock
is not installed, but maybe without a chart of account). The idea is
each test suite can call method to setup their own data.

This commit also use this common test class in sale_expense.
2017-12-19 09:14:44 +01:00

115 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests.common import SavepointCase
class TestAccountNoChartCommon(SavepointCase):
""" Some tests required to be executed at module installation, and not 'post install', like moslty
of accounting tests, since a chart of account is required
This test setup class provides data for test suite to make business flow working without a chart
of account installed. The class provide some helpers methods to create particular document types. Each
test suite extending this method can call thoses method to set up their testing environment in their
own `setUpClass` method.
"""
@classmethod
def setUpClass(cls):
""" This method set up the minimal requried part of chart of account """
super(TestAccountNoChartCommon, cls).setUpClass()
# To speed up test, create object without mail tracking
context_no_mail = {'no_reset_password': True, 'mail_create_nosubscribe': True, 'mail_create_nolog': True}
# Create base account to simulate a chart of account
user_type_payable = cls.env.ref('account.data_account_type_payable')
cls.account_payable = cls.env['account.account'].create({
'code': 'NC1110',
'name': 'Test Payable Account',
'user_type_id': user_type_payable.id,
'reconcile': True
})
user_type_receivable = cls.env.ref('account.data_account_type_receivable')
cls.account_receivable = cls.env['account.account'].create({
'code': 'NC1111',
'name': 'Test Receivable Account',
'user_type_id': user_type_receivable.id,
'reconcile': True
})
# Create a customer
Partner = cls.env['res.partner'].with_context(context_no_mail)
cls.partner_customer_usd = Partner.create({
'name': 'Customer from the North',
'email': 'customer.usd@north.com',
'customer': True,
'property_account_payable_id': cls.account_payable.id,
'property_account_receivable_id': cls.account_receivable.id,
})
@classmethod
def setUpAdditionalAccounts(cls):
""" Set up some addionnal accounts: expenses, revenue, ... """
user_type_income = cls.env.ref('account.data_account_type_direct_costs')
cls.account_income = cls.env['account.account'].create({
'code': 'NC1112', 'name':
'Sale - Test Account',
'user_type_id': user_type_income.id
})
user_type_expense = cls.env.ref('account.data_account_type_expenses')
cls.account_expense = cls.env['account.account'].create({
'code': 'NC1113',
'name': 'HR Expense - Test Purchase Account',
'user_type_id': user_type_expense.id
})
user_type_revenue = cls.env.ref('account.data_account_type_revenue')
cls.account_revenue = cls.env['account.account'].create({
'code': 'NC1114',
'name': 'Sales - Test Sales Account',
'user_type_id': user_type_revenue.id,
'reconcile': True
})
@classmethod
def setUpAccountJournal(cls):
""" Set up some journals: sale, purchase, ... """
cls.journal_purchase = cls.env['account.journal'].create({
'name': 'Purchase Journal - Test',
'code': 'AJ-PURC',
'type': 'purchase',
'company_id': cls.env.user.company_id.id,
})
cls.journal_sale = cls.env['account.journal'].create({
'name': 'Sale Journal - Test',
'code': 'AJ-SALE',
'type': 'sale',
'company_id': cls.env.user.company_id.id,
})
@classmethod
def setUpUsers(cls):
""" Create 2 users: an employee and a manager. Both will have correct account configured
on their partner. Others access rigths should be given in extending test suites set up.
"""
group_employee = cls.env.ref('base.group_user')
Users = cls.env['res.users'].with_context({'no_reset_password': True, 'mail_create_nosubscribe': True, 'mail_create_nolog': True})
cls.user_employee = Users.create({
'name': 'Tyrion Lannister Employee',
'login': 'tyrion',
'email': 'tyrion@example.com',
'notification_type': 'email',
'groups_id': [(6, 0, [group_employee.id])],
})
cls.user_manager = Users.create({
'name': 'Daenerys Targaryen Manager',
'login': 'daenerys',
'email': 'daenerys@example.com',
'notification_type': 'email',
'groups_id': [(6, 0, [group_employee.id])],
})
account_values = {
'property_account_payable_id': cls.account_payable.id,
'property_account_receivable_id': cls.account_receivable.id,
}
cls.user_manager.partner_id.write(account_values)
cls.user_employee.partner_id.write(account_values)