Files
odoo_source/addons/base_import_module/tests/test_cloc.py
T
Thibault Francois fc65ae4dfe [FIX] cloc: do not count studio qweb
Since
https://github.com/odoo/odoo/commit/d2e0b48271dbd8cd7bbdbc5c2c1649c55c51417b,
qweb view from imported module are counted. the issue is that qweb view
created with the wysiwig editor of studio got an external ID from
studio_customization module which is declared as imported

So those views were wrongly counted for the maintenance fee.

Solution
--------
Exclude qweb view from studio_customization module

closes odoo/odoo#87424

X-original-commit: 77db024140e4f7c9ae8e6b5eb95de857afbab0da
Signed-off-by: Christophe Simonis <chs@odoo.com>
2022-03-29 10:56:40 +02:00

119 lines
4.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from io import BytesIO
from zipfile import ZipFile
from odoo.tools import cloc
from odoo.addons.base.tests import test_cloc
VALID_XML = """
<templates id="template" xml:space="preserve">
<t t-name="stock_barcode.LineComponent">
<div t-if="line.picking_id and line.picking_id.origin" name="origin">
<i class="fa fa-fw fa-file" />
<span t-esc="line.picking_id.origin" />
</div>
</t>
</templates>
"""
class TestClocFields(test_cloc.TestClocCustomization):
def test_fields_from_import_module(self):
"""
Check that custom computed fields installed with an imported module
is counted as customization
"""
self.env['ir.module.module'].create({
'name': 'imported_module',
'state': 'installed',
'imported': True,
})
f1 = self.create_field('x_imported_field')
self.create_xml_id('import_field', 'ir.model.fields', f1.id, 'imported_module')
cl = cloc.Cloc()
cl.count_customization(self.env)
self.assertEqual(cl.code.get('imported_module', 0), 1, 'Count fields with xml_id of imported module')
f2 = self.create_field('x_base_field')
self.create_xml_id('base_field', 'ir.model.fields', f2.id, 'base')
cl = cloc.Cloc()
cl.count_customization(self.env)
self.assertEqual(cl.code.get('base', 0), 0, "Don't count fields from standard module")
def test_count_qweb_imported_module(self):
self.env['ir.module.module'].create({
'author': 'Odoo',
'imported': True,
'latest_version': '15.0.1.0.0',
'name': 'test_imported_module',
'state': 'installed',
'summary': 'Test imported module for cloc',
})
# Studio module does not exist at this stage, so we simulate it
# Check for existing module in case the test run on an existing database
if not self.env['ir.module.module'].search([('name', '=', 'studio_customization')]):
self.env['ir.module.module'].create({
'author': 'Odoo',
'imported': True,
'latest_version': '15.0.1.0.0',
'name': 'studio_customization',
'state': 'installed',
'summary': 'Studio Customization',
})
qweb_view = self.env['ir.ui.view'].create({
"name": "Qweb Test",
"type": "qweb",
"mode": "primary",
"arch_base": "<html>\n <body>\n <t t-out=\"Hello World\"/>\n </body>\n</html>",
})
self.create_xml_id("qweb_view_test", 'ir.ui.view', qweb_view.id, 'test_imported_module')
# Add qweb view from non imported module
qweb_view = self.env['ir.ui.view'].create({
"name": "Qweb Test",
"type": "qweb",
"arch_base": "<html>\n <body>\n <t t-out=\"Hello World\"/>\n </body>\n</html>",
})
self.create_xml_id("qweb_view_test", 'ir.ui.view', qweb_view.id)
# Add form view from module
form_view = self.env['ir.ui.view'].create({
"name": "Test partner",
"type": "form",
"model": "res.partner",
"arch_base": "<form>\n <field name=\"name\" \n invisible=\"1\" />\n</form>",
})
self.create_xml_id("form_view_test", 'ir.ui.view', form_view.id, 'test_imported_module')
cl = cloc.Cloc()
cl.count_customization(self.env)
self.assertEqual(cl.code.get('test_imported_module', 0), 5, "Count only qweb view from imported module")
self.assertEqual(cl.code.get('studio_customization', 0), 0, "Do not count from studio_customization module")
def test_count_attachment_imported_module(self):
manifest_content = json.dumps({
'name': 'test_imported_module',
'description': 'Test',
'assets': {
'web.assets_backend': [
'test_imported_module/static/src/js/test.js',
'test_imported_module/static/src/css/test.scss',
]
},
'license': 'LGPL-3',
})
stream = BytesIO()
with ZipFile(stream, 'w') as archive:
archive.writestr('test_imported_module/__manifest__.py', manifest_content)
archive.writestr('test_imported_module/static/src/js/test.js', test_cloc.JS_TEST)
archive.writestr('test_imported_module/static/src/js/test.scss', test_cloc.SCSS_TEST)
archive.writestr('test_imported_module/static/src/js/test.xml', VALID_XML)
# Import test module
self.env['ir.module.module'].import_zipfile(stream)
cl = cloc.Cloc()
cl.count_customization(self.env)
self.assertEqual(cl.code.get('test_imported_module', 0), 35)