Abstract out upload_view() testing setup
authorKarl O. Pinc <kop@meme.com>
Thu, 25 Oct 2018 18:57:31 +0000 (13:57 -0500)
committerKarl O. Pinc <kop@meme.com>
Thu, 25 Oct 2018 18:57:31 +0000 (13:57 -0500)
tests/views/test_upload.py

index 42eebc23032ec1ed2afed2cfd205d5b0a2b1e34b..44bc896666d6ffded6c5d70b04d367b02abfb09e 100644 (file)
@@ -19,6 +19,7 @@
 
 # Karl O. Pinc <kop@meme.com>
 
+import pytest
 from pgwui_upload.views import upload
 
 
@@ -37,34 +38,51 @@ class MockTableUploadHandler():
         pass
 
 
-# Tests
+class MockLogger():
+    def __init__(self):
+        self.info_called = False
 
-# upload_view()
+    def info(self, *args):
+        self.info_called = True
 
-def test_upload_view_db_not_changed(monkeypatch):
-    '''When the db did not change nothing logs'''
 
-    # Have the pyramid.view.view_config decorator do nothing
-    monkeypatch.setattr(upload, 'view_config',
-                        lambda **kwargs: (lambda func: func))
+# Fixtures
 
-    mock_info_called = False
+@pytest.fixture
+def isolate_upload_view(monkeypatch):
+    '''Keep upload_view() from calling anything
 
-    def mock_info(*args):
-        nonlocal mock_info_called
-        mock_info_called = True
+    Also, have isolate_upload_view(response)
+    cause UploadEngine to return the supplied "response".
+    '''
+    def run(response):
+        # Have the pyramid.view.view_config decorator do nothing
+        monkeypatch.setattr(upload, 'view_config',
+                            lambda **kwargs: (lambda func: func))
 
-    monkeypatch.setattr(upload, 'log', mock_info)
+        def upload_engine(*args):
+            return MockUploadEngine(response)
+
+        monkeypatch.setattr(upload, 'UploadEngine', upload_engine)
+        monkeypatch.setattr(
+            upload, 'TableUploadHandler', MockTableUploadHandler)
+
+    return run
 
-    response = {'db_changed': False}
 
-    def upload_engine(*args):
-        return MockUploadEngine(response)
+# Tests
+
+# upload_view()
 
-    monkeypatch.setattr(upload, 'UploadEngine', upload_engine)
-    monkeypatch.setattr(upload, 'TableUploadHandler', MockTableUploadHandler)
+def test_upload_view_db_not_changed(monkeypatch, isolate_upload_view):
+    '''When the db did not change nothing logs'''
+
+    mock_logger = MockLogger()
+    monkeypatch.setattr(upload, 'log', mock_logger)
 
+    response = {'db_changed': False}
+    isolate_upload_view(response)
     result = upload.upload_view(None)
 
     assert result == response
-    assert mock_info_called is False
+    assert mock_logger.info_called is False