Source code for camcops_server.tasks.tests.aq_tests

"""
camcops_server/tasks/tests/aq_tests.py

===============================================================================

    Copyright (C) 2012, University of Cambridge, Department of Psychiatry.
    Created by Rudolf Cardinal (rnc1001@cam.ac.uk).

    This file is part of CamCOPS.

    CamCOPS is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    CamCOPS is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with CamCOPS. If not, see <https://www.gnu.org/licenses/>.

===============================================================================

"""

from unittest import TestCase

from camcops_server.tasks.aq import Aq


[docs]class AqTests(TestCase): AGREE_SCORING_QUESTIONS = [ 2, 4, 5, 6, 7, 9, 12, 13, 16, 18, 19, 20, 21, 22, 23, 26, 33, 35, 39, 41, 42, 43, 45, 46, ] DISAGREE_SCORING_QUESTIONS = [ 1, 3, 8, 10, 11, 14, 15, 17, 24, 25, 27, 28, 29, 30, 31, 32, 34, 36, 37, 38, 40, 44, 47, 48, 49, 50, ] ALL_QUESTIONS = range(1, 50 + 1) DEFINITELY_AGREE = 0 DEFINITELY_DISAGREE = 3 SOCIAL_SKILL_QUESTIONS = [1, 11, 13, 15, 22, 36, 44, 45, 47, 48] ATTENTION_SWITCHING_QUESTIONS = [2, 4, 10, 16, 25, 32, 34, 37, 43, 46] ATTENTION_TO_DETAIL_QUESTIONS = [5, 6, 9, 12, 19, 23, 28, 29, 30, 49] COMMUNICATION_QUESTIONS = [7, 17, 18, 26, 27, 31, 33, 35, 38, 39] IMAGINATION_QUESTIONS = [3, 8, 14, 20, 21, 24, 40, 41, 42, 50] def test_max_score_is_50(self) -> None: aq = Aq() for q_num in self.AGREE_SCORING_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_AGREE) for q_num in self.DISAGREE_SCORING_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_DISAGREE) self.assertEqual(aq.score(), 50) def test_min_score_is_0(self) -> None: aq = Aq() for q_num in self.AGREE_SCORING_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_DISAGREE) for q_num in self.DISAGREE_SCORING_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_AGREE) self.assertEqual(aq.score(), 0) def test_score_is_none_if_any_none(self) -> None: aq = Aq() for q_num in self.ALL_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_AGREE) aq.q1 = None # type: ignore[attr-defined] self.assertIsNone(aq.score()) def test_incomplete_when_answers_missing(self) -> None: aq = Aq() self.assertFalse(aq.is_complete()) def test_complete_when_all_answered(self) -> None: aq = Aq() for q_num in self.ALL_QUESTIONS: setattr(aq, f"q{q_num}", self.DEFINITELY_AGREE) self.assertTrue(aq.is_complete()) def test_social_skill_score_is_none_if_any_none(self) -> None: aq = Aq() for q_num in self.SOCIAL_SKILL_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) aq.q1 = None # type: ignore[attr-defined] self.assertIsNone(aq.social_skill_score()) def test_min_social_skill_score_is_0(self) -> None: aq = Aq() for q_num in self.SOCIAL_SKILL_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) self.assertEqual(aq.social_skill_score(), 0) def test_max_social_skill_score_is_10(self) -> None: aq = Aq() for q_num in self.SOCIAL_SKILL_QUESTIONS: setattr(aq, f"q{q_num}", self.scoring_answer(q_num)) self.assertEqual(aq.social_skill_score(), 10) def test_min_attention_switching_score_is_0(self) -> None: aq = Aq() for q_num in self.ATTENTION_SWITCHING_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) self.assertEqual(aq.attention_switching_score(), 0) def test_max_attention_switching_score_is_10(self) -> None: aq = Aq() for q_num in self.ATTENTION_SWITCHING_QUESTIONS: setattr(aq, f"q{q_num}", self.scoring_answer(q_num)) self.assertEqual(aq.attention_switching_score(), 10) def test_min_attention_to_detail_score_is_0(self) -> None: aq = Aq() for q_num in self.ATTENTION_TO_DETAIL_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) self.assertEqual(aq.attention_to_detail_score(), 0) def test_max_attention_to_detail_score_is_10(self) -> None: aq = Aq() for q_num in self.ATTENTION_TO_DETAIL_QUESTIONS: setattr(aq, f"q{q_num}", self.scoring_answer(q_num)) self.assertEqual(aq.attention_to_detail_score(), 10) def test_min_communication_score_is_0(self) -> None: aq = Aq() for q_num in self.COMMUNICATION_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) self.assertEqual(aq.communication_score(), 0) def test_max_communication_score_is_10(self) -> None: aq = Aq() for q_num in self.COMMUNICATION_QUESTIONS: setattr(aq, f"q{q_num}", self.scoring_answer(q_num)) self.assertEqual(aq.communication_score(), 10) def test_min_imagination_score_is_0(self) -> None: aq = Aq() for q_num in self.IMAGINATION_QUESTIONS: setattr(aq, f"q{q_num}", self.non_scoring_answer(q_num)) self.assertEqual(aq.imagination_score(), 0) def test_max_imagination_score_is_10(self) -> None: aq = Aq() for q_num in self.IMAGINATION_QUESTIONS: setattr(aq, f"q{q_num}", self.scoring_answer(q_num)) self.assertEqual(aq.imagination_score(), 10) def non_scoring_answer(self, q_num: int) -> int: if q_num in self.AGREE_SCORING_QUESTIONS: return self.DEFINITELY_DISAGREE return self.DEFINITELY_AGREE def scoring_answer(self, q_num: int) -> int: if q_num in self.AGREE_SCORING_QUESTIONS: return self.DEFINITELY_AGREE return self.DEFINITELY_DISAGREE