diff --git a/addons/base_module_quality/base_module_quality.py b/addons/base_module_quality/base_module_quality.py
index ec1a50adb4a..d584177a993 100644
--- a/addons/base_module_quality/base_module_quality.py
+++ b/addons/base_module_quality/base_module_quality.py
@@ -30,12 +30,12 @@ from osv import osv, fields
class abstract_quality_check(object):
'''
- This Class provides...
+ This Class is abstract class for all test
'''
def __init__(self):
'''
- this method should initialize the var
+ this method should initialize the variables
'''
#This float have to store the rating of the module.
#Used to compute the final score (average of all scores).
@@ -73,6 +73,15 @@ class abstract_quality_check(object):
#Specify test got an error on module
self.error = False
+ #Specify the minimal score for the test (in percentage(%))
+ self.min_score = 50
+
+ #Specify whether test should be consider for Quality checking of the module
+ self.active = True
+
+ #This variable used to give message if test result is good or not
+ self.message = ''
+
#The tests have to subscribe itselfs in this list, that contains
#all the test that have to be performed.
self.tests = []
@@ -189,40 +198,41 @@ class module_quality_check(osv.osv):
ad = tools.config['root_path']+'/addons'
module_path = os.path.join(ad, module_name)
val = test.quality_test()
- if not val.bool_installed_only or module_state == "installed":
- val.run_test(cr, uid, str(module_path))
- if not val.error:
- data = {
- 'name': val.name,
- 'score': val.score * 100,
- 'ponderation': val.ponderation,
- 'summary': val.result,
- 'detail': val.result_details,
- 'state': 'done',
- 'note': val.note,
- }
- if val.bool_count_score:
- score_sum += val.score * val.ponderation
- ponderation_sum += val.ponderation
+ if val.active:
+ if not val.bool_installed_only or module_state == "installed":
+ val.run_test(cr, uid, str(module_path))
+ if not val.error:
+ data = {
+ 'name': val.name,
+ 'score': val.score * 100,
+ 'ponderation': val.ponderation,
+ 'summary': val.result,
+ 'detail': val.result_details,
+ 'state': 'done',
+ 'note': val.note,
+ 'message': val.message
+ }
+ if val.bool_count_score:
+ score_sum += val.score * val.ponderation
+ ponderation_sum += val.ponderation
+ else:
+ data = {
+ 'name': val.name,
+ 'score': 0,
+ 'summary': val.result,
+ 'state': 'skipped',
+ 'note': val.note,
+ }
else:
data = {
'name': val.name,
- 'score': 0,
- 'summary': val.result,
- 'state': 'skipped',
'note': val.note,
+ 'score': 0,
+ 'state': 'skipped',
+ 'summary': _("The module has to be installed before running this test.")
}
- else:
- data = {
- 'name': val.name,
- 'note': val.note,
- 'score': 0,
- 'state': 'skipped',
- 'summary': _("The module has to be installed before running this test.")
- }
- create_ids.append((0, 0, data))
-
- final_score = '%.2f' % (score_sum / ponderation_sum * 100)
+ create_ids.append((0, 0, data))
+ final_score = ponderation_sum and '%.2f' % (score_sum / ponderation_sum * 100) or 0
data = {
'name': module_name,
'final_score': final_score,
@@ -236,12 +246,13 @@ class module_quality_detail(osv.osv):
_name = 'module.quality.detail'
_columns = {
'quality_check_id': fields.many2one('module.quality.check', 'Quality'),
- 'name': fields.char('Name',size=128,),
+ 'name': fields.char('Name',size=128),
'score': fields.float('Score (%)'),
'ponderation': fields.float('Ponderation', help='Some tests are more critical than others, so they have a bigger weight in the computation of final rating'),
- 'note': fields.text('Note',),
+ 'note': fields.text('Note'),
'summary': fields.text('Summary'),
'detail': fields.text('Details'),
+ 'message': fields.char('Message', size=64),
'state': fields.selection([('done','Done'),('skipped','Skipped'),], 'State', size=6, help='The test will be completed only if the module is installed or if the test may be processed on uninstalled module.'),
}
diff --git a/addons/base_module_quality/base_module_quality_view.xml b/addons/base_module_quality/base_module_quality_view.xml
index 18ad04415bd..6b56eb41a5d 100644
--- a/addons/base_module_quality/base_module_quality_view.xml
+++ b/addons/base_module_quality/base_module_quality_view.xml
@@ -62,6 +62,7 @@
+
diff --git a/addons/base_module_quality/method_test/method_test.py b/addons/base_module_quality/method_test/method_test.py
index 31719958c03..b7132ac5dbe 100644
--- a/addons/base_module_quality/method_test/method_test.py
+++ b/addons/base_module_quality/method_test/method_test.py
@@ -34,6 +34,7 @@ class quality_test(base_module_quality.abstract_quality_check):
This test checks if the module classes are raising exception when calling basic methods or not.
""")
self.bool_installed_only = True
+ self.min_score = 60
return None
def run_test(self, cr, uid, module_path):
@@ -72,6 +73,8 @@ This test checks if the module classes are raising exception when calling basic
ex_count += 1
result_dict[obj] = temp
self.score = (ok_count + ex_count) and float(ok_count)/float(ok_count + ex_count) or 0.0
+ if self.score*100 < self.min_score:
+ self.message = 'Score is below than minimal score(%s%%)' % self.min_score
self.result = self.get_result(result_dict)
return None
diff --git a/addons/base_module_quality/object_test/object_test.py b/addons/base_module_quality/object_test/object_test.py
index 49677c79c1f..d319d3f3a50 100644
--- a/addons/base_module_quality/object_test/object_test.py
+++ b/addons/base_module_quality/object_test/object_test.py
@@ -36,6 +36,7 @@ class quality_test(base_module_quality.abstract_quality_check):
Test checks for fields, views, security rules, dependancy level
""")
self.bool_installed_only = True
+ self.min_score = 40
return None
def run_test(self, cr, uid, module_path):
@@ -166,6 +167,8 @@ Test checks for fields, views, security rules, dependancy level
score_depend = (100 - (bad_depend * 5)) / 100.0 # note : score is calculated based on if you have for e.g. two module extra in dependancy it will score -10 out of 100
score_security = good_sec and float(good_sec - bad_sec) / float(good_sec)
self.score = (score_view + score_field + score_security + score_depend) / 4
+ if self.score*100 < self.min_score:
+ self.message = 'Score is below than minimal score(%s%%)' % self.min_score
self.result = self.get_result({ module_name: [int(score_field * 100), int(score_view * 100), int(score_security * 100), int(score_depend * 100)]})
self.result_details += self.get_result_details(result_dict)
self.result_details += self.get_result_general(result_view, name="View")
diff --git a/addons/base_module_quality/pep8_test/pep8_test.py b/addons/base_module_quality/pep8_test/pep8_test.py
index 448eb94f029..f45b9516498 100644
--- a/addons/base_module_quality/pep8_test/pep8_test.py
+++ b/addons/base_module_quality/pep8_test/pep8_test.py
@@ -37,6 +37,7 @@ PEP-8 Test , copyright of py files check, method can not call from loops
self.bad_standard = 0
self.good_standard = 0
self.result_py = {}
+ self.min_score = 40
return None
def run_test(self, cr, uid, module_path):
@@ -85,6 +86,8 @@ PEP-8 Test , copyright of py files check, method can not call from loops
self.check_boolean(open_files)
self.score = self.good_standard and float(self.good_standard) / float(self.good_standard + self.bad_standard)
+ if self.score*100 < self.min_score:
+ self.message = 'Score is below than minimal score(%s%%)' % self.min_score
self.result = self.get_result({ module_path: [int(self.score * 100)]})
self.result_details += self.get_result_general(self.result_py)
return None
diff --git a/addons/base_module_quality/pylint_test/pylint_test.py b/addons/base_module_quality/pylint_test/pylint_test.py
index 7cabf4a19d8..c8ba4b77a3c 100644
--- a/addons/base_module_quality/pylint_test/pylint_test.py
+++ b/addons/base_module_quality/pylint_test/pylint_test.py
@@ -32,6 +32,7 @@ class quality_test(base_module_quality.abstract_quality_check):
self.name = _("Pylint Test")
self.note = _("""This test uses Pylint and checks if the module satisfies the coding standard of Python. See http://www.logilab.org/project/name/pylint for further info.\n """)
self.bool_installed_only = False
+ self.min_score = 30
return None
def run_test(self, cr, uid, module_path):
@@ -92,6 +93,8 @@ class quality_test(base_module_quality.abstract_quality_check):
self.result_details += '