Coverage for tasks/tests/perinatalpoem_tests.py: 27%

85 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/perinatalpoem_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 typing import Generator 

31 

32import pendulum 

33 

34from camcops_server.cc_modules.cc_unittest import BasicDatabaseTestCase 

35from camcops_server.tasks.perinatalpoem import ( 

36 PerinatalPoem, 

37 PerinatalPoemReport, 

38) 

39 

40 

41# ============================================================================= 

42# Unit tests 

43# ============================================================================= 

44 

45 

46class PerinatalPoemReportTestCase(BasicDatabaseTestCase): 

47 def __init__(self, *args, **kwargs) -> None: 

48 super().__init__(*args, **kwargs) 

49 self.id_sequence = self.get_id() 

50 

51 def setUp(self) -> None: 

52 super().setUp() 

53 

54 self.report = PerinatalPoemReport() 

55 

56 # Really only needed for tests 

57 self.report.start_datetime = None 

58 self.report.end_datetime = None 

59 

60 @staticmethod 

61 def get_id() -> Generator[int, None, None]: 

62 i = 1 

63 

64 while True: 

65 yield i 

66 i += 1 

67 

68 def create_task(self, **kwargs) -> None: 

69 task = PerinatalPoem() 

70 self.apply_standard_task_fields(task) 

71 task.id = next(self.id_sequence) 

72 

73 era = kwargs.pop("era", None) 

74 if era is not None: 

75 task.when_created = pendulum.parse(era) 

76 

77 for name, value in kwargs.items(): 

78 setattr(task, name, value) 

79 

80 self.dbsession.add(task) 

81 

82 

83class PerinatalPoemReportTests(PerinatalPoemReportTestCase): 

84 """ 

85 Most of the base class tested in APEQCPFT Perinatal so just some basic 

86 sanity checking here 

87 """ 

88 

89 def create_tasks(self): 

90 self.create_task(general_comments="comment 1") 

91 self.create_task(general_comments="comment 2") 

92 self.create_task(general_comments="comment 3") 

93 

94 self.dbsession.commit() 

95 

96 def test_qa_rows_counts(self) -> None: 

97 tables = self.report._get_html_tables(self.req) 

98 

99 rows = tables[0].rows 

100 

101 self.assertEqual(len(rows), 1) 

102 self.assertEqual(len(rows[0]), 4) 

103 

104 def test_qb_rows_counts(self) -> None: 

105 tables = self.report._get_html_tables(self.req) 

106 

107 rows = tables[1].rows 

108 

109 self.assertEqual(len(rows), 1) 

110 self.assertEqual(len(rows[0]), 4) 

111 

112 def test_q1_rows_counts(self) -> None: 

113 tables = self.report._get_html_tables(self.req) 

114 

115 rows = tables[2].rows 

116 

117 self.assertEqual(len(rows), 2) 

118 self.assertEqual(len(rows[0]), 7) 

119 

120 def test_q2_rows_counts(self) -> None: 

121 tables = self.report._get_html_tables(self.req) 

122 

123 rows = tables[3].rows 

124 

125 self.assertEqual(len(rows), 12) 

126 self.assertEqual(len(rows[0]), 6) 

127 

128 def test_q3_rows_counts(self) -> None: 

129 tables = self.report._get_html_tables(self.req) 

130 

131 rows = tables[4].rows 

132 

133 self.assertEqual(len(rows), 6) 

134 self.assertEqual(len(rows[0]), 6) 

135 

136 def test_participation_rows_counts(self) -> None: 

137 tables = self.report._get_html_tables(self.req) 

138 

139 rows = tables[5].rows 

140 

141 self.assertEqual(len(rows), 1) 

142 self.assertEqual(len(rows[0]), 4) 

143 

144 def test_comments(self) -> None: 

145 expected_comments = ["comment 1", "comment 2", "comment 3"] 

146 comments = self.report._get_comments(self.req) 

147 self.assertEqual(comments, expected_comments) 

148 

149 

150class PerinatalPoemReportDateRangeTests(PerinatalPoemReportTestCase): 

151 def create_tasks(self) -> None: 

152 self.create_task( 

153 general_comments="comments 1", 

154 era="2018-10-01T00:00:00.000000+00:00", 

155 ) 

156 self.create_task( 

157 general_comments="comments 2", 

158 era="2018-10-02T00:00:00.000000+00:00", 

159 ) 

160 self.create_task( 

161 general_comments="comments 3", 

162 era="2018-10-03T00:00:00.000000+00:00", 

163 ) 

164 self.create_task( 

165 general_comments="comments 4", 

166 era="2018-10-04T00:00:00.000000+00:00", 

167 ) 

168 self.create_task( 

169 general_comments="comments 5", 

170 era="2018-10-05T00:00:00.000000+00:00", 

171 ) 

172 self.dbsession.commit() 

173 

174 def test_comments_filtered_by_date(self) -> None: 

175 self.report.start_datetime = "2018-10-02T00:00:00.000000+00:00" 

176 self.report.end_datetime = "2018-10-05T00:00:00.000000+00:00" 

177 

178 comments = self.report._get_comments(self.req) 

179 self.assertEqual(len(comments), 3) 

180 

181 self.assertEqual(comments[0], "comments 2") 

182 self.assertEqual(comments[1], "comments 3") 

183 self.assertEqual(comments[2], "comments 4")