From fabe678312ff557237928d6fd124e75d76ea3ae2 Mon Sep 17 00:00:00 2001 From: Gregory Trullemans Date: Sun, 10 Mar 2024 16:19:48 +0100 Subject: [PATCH] Add tests for Passe model (regexp validation) --- .coverage | Bin 53248 -> 0 bytes .gitignore | 3 +- jarvis/objective/models.py | 5 +- jarvis/objective/tests.py | 51 +---------- jarvis/objective/tests_models.py | 153 +++++++++++++++++++++++++++++++ 5 files changed, 160 insertions(+), 52 deletions(-) delete mode 100644 .coverage diff --git a/.coverage b/.coverage deleted file mode 100644 index 15170c79956b9366be43f783d0bb4e6ce18064b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 diff --git a/.gitignore b/.gitignore index 3b27143..aa8707c 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,5 @@ static/js/plugins/fullcalendar/locales-all.min.js *.bkp *.png *.drawio* -*.docx \ No newline at end of file +*.docx +*.pdf \ No newline at end of file diff --git a/jarvis/objective/models.py b/jarvis/objective/models.py index 784ae4d..a1e207a 100644 --- a/jarvis/objective/models.py +++ b/jarvis/objective/models.py @@ -598,8 +598,11 @@ class Passe(Markdownizable): """Reçoit une chaine de caratère et vérifie que si elle contient un point (.), il se trouve soit à la première position soit à la dernière position. """ - last_place = len(pattern) - 1 + if len(re.findall("\.", pattern)) > 1: + return False + if re.search("\.", pattern): + last_place = len(pattern) - 1 if pattern[0] != "." and pattern[last_place] != ".": return False diff --git a/jarvis/objective/tests.py b/jarvis/objective/tests.py index 64793a5..88fb536 100644 --- a/jarvis/objective/tests.py +++ b/jarvis/objective/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from jarvis.objective.models import Educative, Passe +from jarvis.objective.models import Educative class EducativeTestCase(TestCase): @@ -87,52 +87,3 @@ class EducativeTestCase(TestCase): [educ_1, educ_2, educ_9], ], ) - - -class PasseTestCase(TestCase): - def setUp(self): - """ - Structure finale : - 1 -> 2 - 1 -> 6 - 3 -> 4 -> 5 -> 6 -> 7 - 1 -> 2 -> 9 - 3 -> 4 -> 5 -> 6 -> 7 -> 9 - """ - # 1 et 3 Eductative sans pre-requis - educ_1 = Educative.objects.create( - long_label="1/2 vrille", difficulty=0.1, level=1, rank=1 - ) - educ_3 = Educative.objects.create( - long_label="4 pattes", difficulty=0.1, level=1, rank=1 - ) - - def test_check_regexp(self): - label = "" - regexp = "" - educatives_list = [] - - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), False) - regexp = "Q1R1 [4-8] WC" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), False) - regexp = "Q1R1" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) - regexp = "Q1R1 [4-8" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), False) - regexp = "Q1R1 [4-8]" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) - regexp = "Q1R1 [4-]" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) - regexp = "Q1R1 [-8]" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) - regexp = "Q1R1 [8-4]" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), False) - regexp = "WC" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), False) - educ_1 = Educative.objects.get(long_label="1/2 vrille") - educatives_list.append(educ_1) - regexp = "1|" - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) - educ_3 = Educative.objects.get(long_label="4 pattes") - educatives_list.append(educ_3) - self.assertEqual(Passe.check_regexp(regexp, label, educatives_list), True) diff --git a/jarvis/objective/tests_models.py b/jarvis/objective/tests_models.py index 7c9fd9e..2f81db6 100644 --- a/jarvis/objective/tests_models.py +++ b/jarvis/objective/tests_models.py @@ -5,7 +5,9 @@ from jarvis.objective.models import ( TouchPosition, Routine, RoutineSkill, + Passe, ) +from jarvis.core.global_vars import ROUTINE_TYPE_CHOICE class ToolsModels(TestCase): @@ -102,3 +104,154 @@ class ToolsModels(TestCase): + " : " + routine_skill_1.skill.short_label, ) + + +class PasseTestCase(TestCase): + def setUp(self): + """ + Structure finale : + 1 -> 2 + 1 -> 6 + 3 -> 4 -> 5 -> 6 -> 7 + 1 -> 2 -> 9 + 3 -> 4 -> 5 -> 6 -> 7 -> 9 + """ + # 1 et 3 Eductative sans pre-requis + educ_1 = Educative.objects.create( + long_label="1/2 vrille", difficulty=0.1, level=1, rank=1 + ) + educ_3 = Educative.objects.create( + long_label="4 pattes", difficulty=0.1, level=1, rank=1 + ) + + def test_is_valid_dot(self): + arg = "" + self.assertEqual(Passe.is_valid_dot(arg), True) + arg = "Q1R1" + self.assertEqual(Passe.is_valid_dot(arg), True) + arg = ".Q1R1" + self.assertEqual(Passe.is_valid_dot(arg), True) + arg = "Q1R1." + self.assertEqual(Passe.is_valid_dot(arg), True) + arg = "Q1.R1" + self.assertEqual(Passe.is_valid_dot(arg), False) + arg = ".Q1.R1." + self.assertEqual(Passe.is_valid_dot(arg), False) + + def test_is_valid_subset(self): + subset = "" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[2-8]" + self.assertEqual(Passe.is_valid_subset(subset), True) + subset = "[-5]" + self.assertEqual(Passe.is_valid_subset(subset), True) + subset = "[3-]" + self.assertEqual(Passe.is_valid_subset(subset), True) + subset = "[8-2]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[-]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[1-]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[-1]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[4]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[6-6]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "4" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[6-6" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[66]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "4-8" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "6-]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[4-" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "[6" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "Q1R1 [4-8]" + self.assertEqual(Passe.is_valid_subset(subset), False) + subset = "Q1R1 [-8]" + self.assertEqual(Passe.is_valid_subset(subset), False) + + def test_is_valid_routine_type(self): + for item in ROUTINE_TYPE_CHOICE: + self.assertEqual(Passe.is_valid_routine_type(item[1]), True) + + routine_type = "" + self.assertEqual(Passe.is_valid_routine_type(routine_type), False) + routine_type = ".Q1R1" + self.assertEqual(Passe.is_valid_routine_type(routine_type), False) + routine_type = "SFS." + self.assertEqual(Passe.is_valid_routine_type(routine_type), False) + routine_type = "Q1R1 [4-8]" + self.assertEqual(Passe.is_valid_routine_type(routine_type), False) + routine_type = "SFS [-8]" + self.assertEqual(Passe.is_valid_routine_type(routine_type), False) + + def test_is_valid_regexp_one_arg(self): + arg = "" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), False) + arg = "WC" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), True) + arg = "1|" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), True) + arg = ".Q1R1" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), True) + arg = "Q1R2." + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), True) + arg = ".Q1R1 [4-8" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), False) + arg = "Q1R2. [4-8" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), False) + arg = "Q1R1 [4-8]" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), False) + arg = "Q1R1 [8-4]" + self.assertEqual(Passe.is_valid_regexp_one_arg(arg), False) + + def test_is_valid_regexp_two_args(self): + arg1 = "" + arg2 = "" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), False) + arg1 = "Q1R1" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), False) + arg2 = "[4-8]" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), True) + arg2 = "[8-8]" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), False) + arg2 = "[8-4]" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), False) + arg2 = "[-8]" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), True) + arg2 = "[4-]" + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), True) + arg1 = "Q1R1." + self.assertEqual(Passe.is_valid_regexp_two_args(arg1, arg2), True) + + def test_is_valid_regexp(self): + regexp = "" + self.assertEqual(Passe.is_valid_regexp(regexp), False) + regexp = "Q1R1 [4-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = "Q1R1 [8-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), False) + regexp = "Q1R1 [8-4]" + self.assertEqual(Passe.is_valid_regexp(regexp), False) + regexp = "Q1R1 [-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = "Q1R1 [4-]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = "Q1R1. [4-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = "Q1R1. [4-]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = ".Q1R1 [-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), True) + regexp = "Q1R1. [8-8]" + self.assertEqual(Passe.is_valid_regexp(regexp), False) + regexp = ".Q1R1 [8-4]" + self.assertEqual(Passe.is_valid_regexp(regexp), False)