Coverage for tasks/tests/edeq_tests.py: 16%
94 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-08 23:14 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-08 23:14 +0000
1#!/usr/bin/env python
3"""
4camcops_server/tasks/tests/edeq_tests.py
6===============================================================================
8 Copyright (C) 2012, University of Cambridge, Department of Psychiatry.
9 Created by Rudolf Cardinal (rnc1001@cam.ac.uk).
11 This file is part of CamCOPS.
13 CamCOPS is free software: you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
18 CamCOPS is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with CamCOPS. If not, see <https://www.gnu.org/licenses/>.
26===============================================================================
28"""
30from unittest import mock, TestCase
32from camcops_server.tasks.edeq import Edeq
35class EdeqTests(TestCase):
36 def test_restraint_subscale(self):
37 edeq = Edeq()
39 edeq.q1 = 1
40 edeq.q2 = 2
41 edeq.q3 = 3
42 edeq.q4 = 4
43 edeq.q5 = 6
45 # 1 + 2 + 3 + 4 + 6 = 16
46 # 16 / 5 = 3.2
48 self.assertEqual(edeq.restraint(), 3.2)
50 def test_subscale_none_if_answer_none(self):
51 edeq = Edeq()
53 edeq.q1 = None
54 edeq.q2 = 2
55 edeq.q3 = 3
56 edeq.q4 = 4
57 edeq.q5 = 6
59 self.assertIsNone(edeq.restraint())
61 def test_eating_concern_subscale(self):
62 edeq = Edeq()
64 edeq.q7 = 1
65 edeq.q9 = 2
66 edeq.q19 = 3
67 edeq.q21 = 4
68 edeq.q20 = 6
70 # 1 + 2 + 3 + 4 + 6 = 16
71 # 16 / 5 = 3.2
73 self.assertEqual(edeq.eating_concern(), 3.2)
75 def test_shape_concern_subscale(self):
76 edeq = Edeq()
78 edeq.q6 = 1
79 edeq.q8 = 2
80 edeq.q23 = 3
81 edeq.q10 = 4
82 edeq.q26 = 5
83 edeq.q27 = 6
84 edeq.q28 = 3
85 edeq.q11 = 4
87 # 1 + 2 + 3 + 4 + 5 + 6 + 3 + 4 = 28
88 # 28 / 8 = 3.5
90 self.assertEqual(edeq.shape_concern(), 3.5)
92 def test_weight_concern_subscale(self):
93 edeq = Edeq()
95 edeq.q8 = 1
96 edeq.q12 = 2
97 edeq.q22 = 3
98 edeq.q24 = 4
99 edeq.q25 = 6
101 # 1 + 2 + 3 + 4 + 6 = 16
102 # 16 / 5 = 3.2
104 self.assertEqual(edeq.weight_concern(), 3.2)
106 def test_complete_when_all_answers_valid_for_female(self) -> None:
107 edeq = Edeq()
108 edeq.patient = mock.Mock(sex="F")
110 for q_num in range(1, 28 + 1):
111 setattr(edeq, f"q{q_num}", 0)
113 edeq.mass_kg = 67.0
114 edeq.height_m = 1.83
116 edeq.num_periods_missed = 1
117 edeq.pill = False
119 self.assertTrue(edeq.is_complete())
121 def test_incomplete_when_female_misses_female_questions(self) -> None:
122 edeq = Edeq()
123 edeq.patient = mock.Mock(sex="F")
125 for q_num in range(1, 28 + 1):
126 setattr(edeq, f"q{q_num}", 0)
128 edeq.mass_kg = 67.0
129 edeq.height_m = 1.83
131 edeq.num_periods_missed = None
132 edeq.pill = None
134 self.assertFalse(edeq.is_complete())
136 def test_complete_when_all_answers_valid_for_male(self) -> None:
137 edeq = Edeq()
138 edeq.patient = mock.Mock(sex="M")
140 for q_num in range(1, 28 + 1):
141 setattr(edeq, f"q{q_num}", 0)
143 edeq.mass_kg = 67.0
144 edeq.height_m = 1.83
146 edeq.num_periods_missed = None
147 edeq.pill = None
149 self.assertTrue(edeq.is_complete())
151 def test_is_complete_false_when_not_finished(self) -> None:
152 edeq = Edeq()
154 self.assertFalse(edeq.is_complete())
156 def test_global_score_is_mean_of_subscales(self) -> None:
157 edeq = Edeq()
159 edeq.restraint = mock.Mock(return_value=1)
160 edeq.eating_concern = mock.Mock(return_value=2)
161 edeq.shape_concern = mock.Mock(return_value=3)
162 edeq.weight_concern = mock.Mock(return_value=4)
164 # (1 + 2 + 3 + 4) / 4
165 self.assertEqual(edeq.global_score(), 2.5)
167 def test_global_score_none_if_any_subscale_none(self) -> None:
168 edeq = Edeq()
170 edeq.restraint = mock.Mock(return_value=1)
171 edeq.eating_concern = mock.Mock(return_value=2)
172 edeq.shape_concern = mock.Mock(return_value=3)
173 edeq.weight_concern = mock.Mock(return_value=None)
175 self.assertIsNone(edeq.global_score())