|  | # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from dateutil.relativedelta import relativedelta
from odoo.tests.common import TransactionCase
from psycopg2 import IntegrityError
from odoo.exceptions import UserError
from odoo.tools import mute_logger
from odoo import fields
class TestCore(TransactionCase):
    def test_partner(self):
        ''' 测试删除已有客户的分类报错 '''
        with mute_logger('odoo.sql_db'):
            with self.assertRaises(IntegrityError):
                self.env.ref('core.customer_category_1').unlink()
    def test_partner_name_search(self):
        """
        partner在many2one字段中支持按编号搜索
        """
        partner = self.env.ref('core.jd')
        # 使用 name 来搜索京东
        result = self.env['partner'].name_search('京东')
        real_result = [(partner.id, partner.name)]
        self.assertEqual(result, real_result)
        # 使用 code 来搜索京东
        res = self.env['partner'].name_search('jd')
        self.assertEqual(res, real_result)
        # 编号 ilike
        partner.code = '京东'
        res = self.env['partner'].name_search('京')
        self.assertEqual(res, real_result)
    def test_partner_write(self):
        ''' 测试 业务伙伴应收/应付余额不为0时,不允许取消对应的客户/供应商身份 '''
        partner = self.env.ref('core.jd')
        partner.receivable = 100
        with self.assertRaises(UserError):
            partner.c_category_id = False
        partner = self.env.ref('core.lenovo')
        partner.payable = 100
        with self.assertRaises(UserError):
            partner.s_category_id = False
        partner.copy()
    def test_res_currency(self):
        """测试阿拉伯数字转换成中文大写数字的方法"""
        self.env['res.currency'].rmb_upper(10000100.3)
        # 测试输入value为负时的货币大写问题
        self.assertTrue(
            self.env['res.currency'].rmb_upper(-10000100.3) == '负壹仟万零壹佰元叁角整')
    def test_compute_days_qualify(self):
        """计算资质到期天数。"""
        partner = self.env.ref('core.jd')
        partner.date_qualify = fields.Date.today() + relativedelta(
                days=1)
        self.assertEqual(partner.days_qualify, 1)
    def test_check_category_exists(self):
        ''' test_check_category_exists '''
        partner = self.env.ref('core.jd')
        with self.assertRaises(UserError):
            partner.c_category_id = False
    def test_unlink_category_with_note(self):
        ''' 系统创建的类别不可以删除 '''
        cate = self.env.ref('core.cat_donate')
        cate.note = 'A'
        with self.assertRaises(UserError):
            cate.unlink()
    def test_name_for_create(self):
        self.env['ir.sequence'].create({
            'name': 'number for bank account',
            'code': 'bank.account'})
        self.env['bank.account'].create({})
    def test_pay_mathod(self):
        self.env.ref('core.main_pay_method').get_due_date()
class TestGoods(TransactionCase):
    def test_create(self):
        g = self.env['goods'].create({
            'name': 'test',
            'code': 'cod',
            'category_id': self.env.ref('core.goods_category_1').id,
            'uom_id': self.env.ref('core.uom_pc').id,
        })
        self.env['goods'].name_search('cod')
        self.env['goods'].name_search('co')
        n = g.copy()
        self.assertEqual(n.name, g.name + ' (copy)')
class TestResUsers(TransactionCase):
    def test_write(self):
        '''修改管理员权限'''
        user_demo = self.env.ref('base.user_demo')
        user_demo.groups_id = [(4, self.env.ref('base.group_erp_manager').id)]
        user_admin = self.env.ref('base.user_admin').with_user(user_demo)
        with self.assertRaises(UserError):
            user_admin.name = 'adsf'
        with self.assertRaises(UserError):
            user_admin.groups_id = [
                (3, self.env.ref('base.group_erp_manager').id)]
        # 新建用户邮箱填成 @
        tuser = self.env['res.users'].create({
            'name': 'test_email',
            'login': 'test_email',
        })
        # 同时创建两个员工指向相同用户报错
        self.env['staff'].create({'user_id': tuser.id})
        with self.assertRaises(UserError):
            self.env['staff'].create({'user_id': tuser.id})
class TestResCompany(TransactionCase):
    def test_get_logo(self):
        ''' 取默认logo '''
        self.env['res.company'].create({
            'name': 'demo company',
            'partner_id': self.env.ref('core.zt').id
        })
    def test_check_email(self):
        ''' test check email '''
        company = self.env['res.company'].create({
            'name': 'demo company',
            'partner_id': self.env.ref('core.zt').id
        })
        # 邮箱格式正确
        company.email = 'gooderp@osbzr.com'
        # 邮箱格式不正确,报错
        with self.assertRaises(UserError):
            company.email = 'gooderp'
    def test_get_html_table(self):
        self.env.company._get_html_table({
            'col': ['name'],
            'val': [['jeff']]})
class TestWarehouse(TransactionCase):
    def test_search(self):
        self.env['warehouse'].name_search('General')
        self.env['warehouse'].name_search('')
        # 错误的仓库类型报错
        with self.assertRaises(UserError):
            self.env['warehouse'].get_warehouse_by_type('wrong_type')
        # 没有客户类型的仓库
        with self.assertRaises(UserError):
            self.env['warehouse'].get_warehouse_by_type('customer')
        self.env['warehouse'].get_warehouse_by_type('stock')
 |