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
« 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/perinatalpoem_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 typing import Generator
32import pendulum
34from camcops_server.cc_modules.cc_unittest import BasicDatabaseTestCase
35from camcops_server.tasks.perinatalpoem import (
36 PerinatalPoem,
37 PerinatalPoemReport,
38)
41# =============================================================================
42# Unit tests
43# =============================================================================
46class PerinatalPoemReportTestCase(BasicDatabaseTestCase):
47 def __init__(self, *args, **kwargs) -> None:
48 super().__init__(*args, **kwargs)
49 self.id_sequence = self.get_id()
51 def setUp(self) -> None:
52 super().setUp()
54 self.report = PerinatalPoemReport()
56 # Really only needed for tests
57 self.report.start_datetime = None
58 self.report.end_datetime = None
60 @staticmethod
61 def get_id() -> Generator[int, None, None]:
62 i = 1
64 while True:
65 yield i
66 i += 1
68 def create_task(self, **kwargs) -> None:
69 task = PerinatalPoem()
70 self.apply_standard_task_fields(task)
71 task.id = next(self.id_sequence)
73 era = kwargs.pop("era", None)
74 if era is not None:
75 task.when_created = pendulum.parse(era)
77 for name, value in kwargs.items():
78 setattr(task, name, value)
80 self.dbsession.add(task)
83class PerinatalPoemReportTests(PerinatalPoemReportTestCase):
84 """
85 Most of the base class tested in APEQCPFT Perinatal so just some basic
86 sanity checking here
87 """
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")
94 self.dbsession.commit()
96 def test_qa_rows_counts(self) -> None:
97 tables = self.report._get_html_tables(self.req)
99 rows = tables[0].rows
101 self.assertEqual(len(rows), 1)
102 self.assertEqual(len(rows[0]), 4)
104 def test_qb_rows_counts(self) -> None:
105 tables = self.report._get_html_tables(self.req)
107 rows = tables[1].rows
109 self.assertEqual(len(rows), 1)
110 self.assertEqual(len(rows[0]), 4)
112 def test_q1_rows_counts(self) -> None:
113 tables = self.report._get_html_tables(self.req)
115 rows = tables[2].rows
117 self.assertEqual(len(rows), 2)
118 self.assertEqual(len(rows[0]), 7)
120 def test_q2_rows_counts(self) -> None:
121 tables = self.report._get_html_tables(self.req)
123 rows = tables[3].rows
125 self.assertEqual(len(rows), 12)
126 self.assertEqual(len(rows[0]), 6)
128 def test_q3_rows_counts(self) -> None:
129 tables = self.report._get_html_tables(self.req)
131 rows = tables[4].rows
133 self.assertEqual(len(rows), 6)
134 self.assertEqual(len(rows[0]), 6)
136 def test_participation_rows_counts(self) -> None:
137 tables = self.report._get_html_tables(self.req)
139 rows = tables[5].rows
141 self.assertEqual(len(rows), 1)
142 self.assertEqual(len(rows[0]), 4)
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)
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()
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"
178 comments = self.report._get_comments(self.req)
179 self.assertEqual(len(comments), 3)
181 self.assertEqual(comments[0], "comments 2")
182 self.assertEqual(comments[1], "comments 3")
183 self.assertEqual(comments[2], "comments 4")