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

1#!/usr/bin/env python 

2 

3""" 

4camcops_server/tasks/tests/edeq_tests.py 

5 

6=============================================================================== 

7 

8 Copyright (C) 2012, University of Cambridge, Department of Psychiatry. 

9 Created by Rudolf Cardinal (rnc1001@cam.ac.uk). 

10 

11 This file is part of CamCOPS. 

12 

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. 

17 

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. 

22 

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/>. 

25 

26=============================================================================== 

27 

28""" 

29 

30from unittest import mock, TestCase 

31 

32from camcops_server.tasks.edeq import Edeq 

33 

34 

35class EdeqTests(TestCase): 

36 def test_restraint_subscale(self): 

37 edeq = Edeq() 

38 

39 edeq.q1 = 1 

40 edeq.q2 = 2 

41 edeq.q3 = 3 

42 edeq.q4 = 4 

43 edeq.q5 = 6 

44 

45 # 1 + 2 + 3 + 4 + 6 = 16 

46 # 16 / 5 = 3.2 

47 

48 self.assertEqual(edeq.restraint(), 3.2) 

49 

50 def test_subscale_none_if_answer_none(self): 

51 edeq = Edeq() 

52 

53 edeq.q1 = None 

54 edeq.q2 = 2 

55 edeq.q3 = 3 

56 edeq.q4 = 4 

57 edeq.q5 = 6 

58 

59 self.assertIsNone(edeq.restraint()) 

60 

61 def test_eating_concern_subscale(self): 

62 edeq = Edeq() 

63 

64 edeq.q7 = 1 

65 edeq.q9 = 2 

66 edeq.q19 = 3 

67 edeq.q21 = 4 

68 edeq.q20 = 6 

69 

70 # 1 + 2 + 3 + 4 + 6 = 16 

71 # 16 / 5 = 3.2 

72 

73 self.assertEqual(edeq.eating_concern(), 3.2) 

74 

75 def test_shape_concern_subscale(self): 

76 edeq = Edeq() 

77 

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 

86 

87 # 1 + 2 + 3 + 4 + 5 + 6 + 3 + 4 = 28 

88 # 28 / 8 = 3.5 

89 

90 self.assertEqual(edeq.shape_concern(), 3.5) 

91 

92 def test_weight_concern_subscale(self): 

93 edeq = Edeq() 

94 

95 edeq.q8 = 1 

96 edeq.q12 = 2 

97 edeq.q22 = 3 

98 edeq.q24 = 4 

99 edeq.q25 = 6 

100 

101 # 1 + 2 + 3 + 4 + 6 = 16 

102 # 16 / 5 = 3.2 

103 

104 self.assertEqual(edeq.weight_concern(), 3.2) 

105 

106 def test_complete_when_all_answers_valid_for_female(self) -> None: 

107 edeq = Edeq() 

108 edeq.patient = mock.Mock(sex="F") 

109 

110 for q_num in range(1, 28 + 1): 

111 setattr(edeq, f"q{q_num}", 0) 

112 

113 edeq.mass_kg = 67.0 

114 edeq.height_m = 1.83 

115 

116 edeq.num_periods_missed = 1 

117 edeq.pill = False 

118 

119 self.assertTrue(edeq.is_complete()) 

120 

121 def test_incomplete_when_female_misses_female_questions(self) -> None: 

122 edeq = Edeq() 

123 edeq.patient = mock.Mock(sex="F") 

124 

125 for q_num in range(1, 28 + 1): 

126 setattr(edeq, f"q{q_num}", 0) 

127 

128 edeq.mass_kg = 67.0 

129 edeq.height_m = 1.83 

130 

131 edeq.num_periods_missed = None 

132 edeq.pill = None 

133 

134 self.assertFalse(edeq.is_complete()) 

135 

136 def test_complete_when_all_answers_valid_for_male(self) -> None: 

137 edeq = Edeq() 

138 edeq.patient = mock.Mock(sex="M") 

139 

140 for q_num in range(1, 28 + 1): 

141 setattr(edeq, f"q{q_num}", 0) 

142 

143 edeq.mass_kg = 67.0 

144 edeq.height_m = 1.83 

145 

146 edeq.num_periods_missed = None 

147 edeq.pill = None 

148 

149 self.assertTrue(edeq.is_complete()) 

150 

151 def test_is_complete_false_when_not_finished(self) -> None: 

152 edeq = Edeq() 

153 

154 self.assertFalse(edeq.is_complete()) 

155 

156 def test_global_score_is_mean_of_subscales(self) -> None: 

157 edeq = Edeq() 

158 

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) 

163 

164 # (1 + 2 + 3 + 4) / 4 

165 self.assertEqual(edeq.global_score(), 2.5) 

166 

167 def test_global_score_none_if_any_subscale_none(self) -> None: 

168 edeq = Edeq() 

169 

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) 

174 

175 self.assertIsNone(edeq.global_score())