Coverage for cc_modules/tests/cc_session_tests.py: 26%
58 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/cc_modules/tests/cc_session_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 pendulum import DateTime as Pendulum
32from camcops_server.cc_modules.cc_session import CamcopsSession, generate_token
33from camcops_server.cc_modules.cc_taskfilter import TaskFilter
34from camcops_server.cc_modules.cc_unittest import (
35 BasicDatabaseTestCase,
36 DemoDatabaseTestCase,
37)
38from camcops_server.cc_modules.cc_user import User
41# =============================================================================
42# Unit tests
43# =============================================================================
46class SessionTests(DemoDatabaseTestCase):
47 """
48 Unit tests.
49 """
51 def test_sessions(self) -> None:
52 self.announce("test_sessions")
53 req = self.req
54 dbsession = self.dbsession
56 self.assertIsInstance(generate_token(), str)
58 CamcopsSession.delete_old_sessions(req)
59 self.assertIsInstance(
60 CamcopsSession.get_oldest_last_activity_allowed(req), Pendulum
61 )
63 s = req.camcops_session
64 u = self.dbsession.query(User).first() # type: User
65 assert u, "Missing user in demo database!"
67 self.assertIsInstance(s.last_activity_utc_iso, str)
68 self.assertIsInstanceOrNone(s.username, str)
69 s.logout()
70 s.login(u)
71 self.assertIsInstance(s.get_task_filter(), TaskFilter)
73 # Now test deletion cascade
74 dbsession.commit()
75 numfilters = dbsession.query(TaskFilter).count()
76 assert numfilters == 1, "TaskFilter count should be 1"
78 dbsession.delete(s)
79 dbsession.commit()
80 numfilters = dbsession.query(TaskFilter).count()
81 assert (
82 numfilters == 0
83 ), "TaskFilter count should be 0; cascade delete not working"
86class GetSessionTests(BasicDatabaseTestCase):
87 old_ip_addr = "192.0.2.1"
88 new_ip_addr = "192.0.2.2"
90 def setUp(self) -> None:
91 super().setUp()
92 CamcopsSession.delete_old_sessions(self.req)
94 self.old_session = CamcopsSession(
95 ip_addr=self.old_ip_addr, last_activity_utc=self.req.now_utc
96 )
97 self.dbsession.add(self.old_session)
98 self.dbsession.flush()
100 def test_old_session_for_same_ip(self) -> None:
101 self.req.remote_addr = self.old_ip_addr
102 new_session = CamcopsSession.get_session(
103 self.req, str(self.old_session.id), self.old_session.token
104 )
105 self.dbsession.add(new_session)
106 self.dbsession.flush()
107 self.assertEqual(self.old_session.id, new_session.id)
109 def test_old_session_for_different_ip_when_ip_ignored(self) -> None:
110 self.req.config.session_check_user_ip = False
111 self.req.remote_addr = self.new_ip_addr
112 new_session = CamcopsSession.get_session(
113 self.req, str(self.old_session.id), self.old_session.token
114 )
115 self.dbsession.add(new_session)
116 self.dbsession.flush()
117 self.assertEqual(self.old_session.id, new_session.id)
119 def test_new_session_for_different_ip_when_ip_checked(self) -> None:
120 self.req.config.session_check_user_ip = True
121 self.req.remote_addr = self.new_ip_addr
122 new_session = CamcopsSession.get_session(
123 self.req, str(self.old_session.id), self.old_session.token
124 )
125 self.dbsession.add(new_session)
126 self.dbsession.flush()
127 self.assertNotEqual(self.old_session.id, new_session.id)