From a4abdfa3164ab6cc5a77bc17a42619be49960f2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= <tde@odoo.com>
Date: Thu, 28 Nov 2019 10:47:08 +0000
Subject: [PATCH] [IMP] website_slides: merge slide quiz answers constraints in
 a single method

Currently there are several checks on answer integrity for slide quiz
questions. In this commit we simplify code to effectively implement
what is requested: 1 valid answer and at least 1 invalid answer.

Task ID 1999636
PR #35326
---
 .../website_slides/models/slide_question.py   | 22 ++++---------------
 1 file changed, 4 insertions(+), 18 deletions(-)

diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py
index 62daeccf534b..8258b26e71a3 100644
--- a/addons/website_slides/models/slide_question.py
+++ b/addons/website_slides/models/slide_question.py
@@ -20,26 +20,12 @@ class SlideQuestion(models.Model):
     done_count = fields.Integer(compute="_compute_statistics", groups='website.group_website_publisher')
 
     @api.constrains('answer_ids')
-    def _check_only_one_good_answer(self):
-        for question in self:
-            good_answer_count = 0
-            for answer in question.answer_ids:
-                if answer.is_correct:
-                    good_answer_count += 1
-                    if good_answer_count > 1:
-                        raise ValidationError(_('Question "%s" can only have one good answer') % question.question)
-
-    @api.constrains('answer_ids')
-    def _check_correct_answer(self):
-        for question in self:
-            if not any([answer.is_correct for answer in question.answer_ids]):
-                raise ValidationError(_('Question "%s" must at least have one good answer') % question.question)
-
-    @api.constrains('answer_ids')
-    def _check_at_least_2_answers(self):
+    def _check_answers_integrity(self):
         for question in self:
+            if len(question.answer_ids.filtered(lambda answer: answer.is_correct)) != 1:
+                raise ValidationError(_('Question "%s" must have 1 correct answer') % question.question)
             if len(question.answer_ids) < 2:
-                raise ValidationError(_('Question "%s" has no valid answer, please set one') % question.question)
+                raise ValidationError(_('Question "%s" must have 1 correct answer and at least 1 invalid answer') % question.question)
 
     @api.depends('slide_id')
     def _compute_statistics(self):
-- 
GitLab