| 
									
										
										
										
											2023-10-28 17:48:37 -05:00
										 |  |  | # -*- coding: utf-8; -*- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from unittest import TestCase | 
					
						
							|  |  |  | from unittest.mock import MagicMock | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from wuttjamaican.conf import WuttaConfig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-04 08:00:42 -05:00
										 |  |  | try: | 
					
						
							|  |  |  |     import sqlalchemy as sa | 
					
						
							|  |  |  |     from sqlalchemy import orm | 
					
						
							|  |  |  |     from wuttjamaican.db import sess | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class TestShortSession(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_none(self): | 
					
						
							|  |  |  |             with sess.short_session() as s: | 
					
						
							|  |  |  |                 self.assertIsInstance(s, sess.Session.class_) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_factory(self): | 
					
						
							|  |  |  |             TestSession = orm.sessionmaker() | 
					
						
							|  |  |  |             with sess.short_session(factory=TestSession) as s: | 
					
						
							|  |  |  |                 self.assertIsInstance(s, TestSession.class_) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_instance(self): | 
					
						
							|  |  |  |             # nb. nothing really happens if we provide the session instance | 
					
						
							|  |  |  |             session = MagicMock() | 
					
						
							|  |  |  |             with sess.short_session(session=session) as s: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             session.commit.assert_not_called() | 
					
						
							|  |  |  |             session.close.assert_not_called() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_config(self): | 
					
						
							|  |  |  |             config = MagicMock() | 
					
						
							|  |  |  |             TestSession = orm.sessionmaker() | 
					
						
							|  |  |  |             config.get_app.return_value.make_session = TestSession | 
					
						
							|  |  |  |             # nb. config may be first arg (or kwarg) | 
					
						
							|  |  |  |             with sess.short_session(config) as s: | 
					
						
							|  |  |  |                 self.assertIsInstance(s, TestSession.class_) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_without_commit(self): | 
					
						
							|  |  |  |             session = MagicMock() | 
					
						
							|  |  |  |             TestSession = MagicMock(return_value=session) | 
					
						
							|  |  |  |             with sess.short_session(factory=TestSession, commit=False) as s: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             session.commit.assert_not_called() | 
					
						
							|  |  |  |             session.close.assert_called_once_with() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test_with_commit(self): | 
					
						
							|  |  |  |             session = MagicMock() | 
					
						
							|  |  |  |             TestSession = MagicMock(return_value=session) | 
					
						
							|  |  |  |             with sess.short_session(factory=TestSession, commit=True) as s: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             session.commit.assert_called_once_with() | 
					
						
							|  |  |  |             session.close.assert_called_once_with() |