3
0
Fork 0

tests: move WebTestCase to wuttaweb.testing module

This commit is contained in:
Lance Edgar 2025-01-06 16:47:48 -06:00
parent 5cec585fdf
commit 7895ce4676
24 changed files with 106 additions and 80 deletions

84
src/wuttaweb/testing.py Normal file
View file

@ -0,0 +1,84 @@
# -*- coding: utf-8; -*-
################################################################################
#
# wuttaweb -- Web App for Wutta Framework
# Copyright © 2024 Lance Edgar
#
# This file is part of Wutta Framework.
#
# Wutta Framework is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# Wutta Framework is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Wutta Framework. If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""
WuttaWeb - test utilities
"""
from unittest.mock import MagicMock
import fanstatic
from pyramid import testing
from wuttjamaican.testing import DataTestCase
from wuttaweb import subscribers
class WebTestCase(DataTestCase):
"""
Base class for test suites requiring a full (typical) web app.
"""
def setUp(self):
self.setup_web()
def setup_web(self):
self.setup_db()
self.request = self.make_request()
self.pyramid_config = testing.setUp(request=self.request, settings={
'wutta_config': self.config,
'mako.directories': ['wuttaweb:templates'],
'pyramid_deform.template_search_path': 'wuttaweb:templates/deform',
})
# init web
self.pyramid_config.include('pyramid_deform')
self.pyramid_config.include('pyramid_mako')
self.pyramid_config.add_directive('add_wutta_permission_group',
'wuttaweb.auth.add_permission_group')
self.pyramid_config.add_directive('add_wutta_permission',
'wuttaweb.auth.add_permission')
self.pyramid_config.add_subscriber('wuttaweb.subscribers.before_render',
'pyramid.events.BeforeRender')
self.pyramid_config.include('wuttaweb.static')
# nb. mock out fanstatic env..good enough for now to avoid errors..
needed = fanstatic.init_needed()
self.request.environ[fanstatic.NEEDED] = needed
# setup new request w/ anonymous user
event = MagicMock(request=self.request)
subscribers.new_request(event)
def user_getter(request, **kwargs): pass
subscribers.new_request_set_user(event, db_session=self.session,
user_getter=user_getter)
def tearDown(self):
self.teardown_web()
def teardown_web(self):
testing.tearDown()
self.teardown_db()
def make_request(self):
return testing.DummyRequest()

View file

@ -4,9 +4,8 @@ from unittest.mock import patch, MagicMock
import pytest
from tests.util import WebTestCase
from wuttaweb.db import continuum as mod
from wuttaweb.testing import WebTestCase
class TestWuttaWebContinuumPlugin(WebTestCase):

View file

@ -12,7 +12,7 @@ from sqlalchemy import orm
from wuttjamaican.conf import WuttaConfig
from wuttaweb.forms import schema as mod
from wuttaweb.forms import widgets
from tests.util import DataTestCase, WebTestCase
from wuttaweb.testing import DataTestCase, WebTestCase
class TestWutaDateTime(TestCase):

View file

@ -13,7 +13,7 @@ from wuttaweb.forms import widgets as mod
from wuttaweb.forms import schema
from wuttaweb.forms.schema import (FileDownload, PersonRef, RoleRefs, UserRefs, Permissions,
WuttaDateTime, EmailRecipients)
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestObjectRefWidget(WebTestCase):

View file

@ -16,7 +16,7 @@ from wuttaweb.grids import base as mod
from wuttaweb.grids.filters import GridFilter, StringAlchemyFilter, default_sqlalchemy_filters
from wuttaweb.util import FieldList
from wuttaweb.forms import Form
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestGrid(WebTestCase):

View file

@ -9,7 +9,7 @@ import sqlalchemy as sa
from wuttjamaican.db.model import Base
from wuttaweb.grids import filters as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestGridFilter(WebTestCase):

View file

@ -8,7 +8,7 @@ from pyramid import testing
from wuttjamaican.conf import WuttaConfig
from wuttaweb import auth as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestLoginUser(TestCase):

View file

@ -4,7 +4,7 @@ from wuttaweb import handler as mod, static
from wuttaweb.forms import Form
from wuttaweb.grids import Grid
from wuttaweb.menus import MenuHandler
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestWebHandler(WebTestCase):

View file

@ -4,7 +4,7 @@ from unittest import TestCase
from unittest.mock import patch, MagicMock
from wuttaweb import menus as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestMenuHandler(WebTestCase):

View file

@ -1,14 +1,7 @@
# -*- coding: utf-8; -*-
from unittest import TestCase
from unittest.mock import MagicMock
import fanstatic
from pyramid import testing
from wuttjamaican.conf import WuttaConfig
from wuttjamaican.testing import FileConfigTestCase
from wuttaweb import subscribers
from wuttaweb.menus import MenuHandler
@ -39,56 +32,6 @@ class DataTestCase(FileConfigTestCase):
self.teardown_files()
class WebTestCase(DataTestCase):
"""
Base class for test suites requiring a full (typical) web app.
"""
def setUp(self):
self.setup_web()
def setup_web(self):
self.setup_db()
self.request = self.make_request()
self.pyramid_config = testing.setUp(request=self.request, settings={
'wutta_config': self.config,
'mako.directories': ['wuttaweb:templates'],
'pyramid_deform.template_search_path': 'wuttaweb:templates/deform',
})
# init web
self.pyramid_config.include('pyramid_deform')
self.pyramid_config.include('pyramid_mako')
self.pyramid_config.add_directive('add_wutta_permission_group',
'wuttaweb.auth.add_permission_group')
self.pyramid_config.add_directive('add_wutta_permission',
'wuttaweb.auth.add_permission')
self.pyramid_config.add_subscriber('wuttaweb.subscribers.before_render',
'pyramid.events.BeforeRender')
self.pyramid_config.include('wuttaweb.static')
# nb. mock out fanstatic env..good enough for now to avoid errors..
needed = fanstatic.init_needed()
self.request.environ[fanstatic.NEEDED] = needed
# setup new request w/ anonymous user
event = MagicMock(request=self.request)
subscribers.new_request(event)
def user_getter(request, **kwargs): pass
subscribers.new_request_set_user(event, db_session=self.session,
user_getter=user_getter)
def tearDown(self):
self.teardown_web()
def teardown_web(self):
testing.tearDown()
self.teardown_db()
def make_request(self):
return testing.DummyRequest()
class NullMenuHandler(MenuHandler):
"""
Dummy menu handler for testing.

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8; -*-
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestIncludeMe(WebTestCase):

View file

@ -5,7 +5,7 @@ from unittest.mock import MagicMock, patch
from pyramid.httpexceptions import HTTPFound, HTTPForbidden
from wuttaweb.views import auth as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestAuthView(WebTestCase):

View file

@ -5,7 +5,7 @@ from pyramid.httpexceptions import HTTPFound, HTTPForbidden, HTTPNotFound
from wuttaweb.views import base as mod
from wuttaweb.forms import Form
from wuttaweb.grids import Grid, GridAction
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestView(WebTestCase):

View file

@ -10,7 +10,7 @@ from wuttjamaican.db import model
from wuttjamaican.batch import BatchHandler
from wuttaweb.views import MasterView, batch as mod
from wuttaweb.progress import SessionProgress
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class MockBatch(model.BatchMixin, model.Base):

View file

@ -5,7 +5,7 @@ from unittest.mock import patch
import colander
from wuttaweb.views import common as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestCommonView(WebTestCase):

View file

@ -9,7 +9,7 @@ from pyramid.httpexceptions import HTTPNotFound
from pyramid.response import Response
from wuttaweb.views import email as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestEmailSettingViews(WebTestCase):

View file

@ -1,7 +1,7 @@
# -*- coding: utf-8; -*-
from wuttaweb.views import essential as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestEssentialViews(WebTestCase):

View file

@ -16,7 +16,7 @@ from wuttaweb.views import master as mod
from wuttaweb.views import View
from wuttaweb.progress import SessionProgress
from wuttaweb.subscribers import new_request_set_user
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestMasterView(WebTestCase):

View file

@ -7,7 +7,7 @@ from sqlalchemy import orm
from pyramid.httpexceptions import HTTPNotFound
from wuttaweb.views import people
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestPersonView(WebTestCase):

View file

@ -4,7 +4,7 @@ from pyramid import testing
from wuttaweb.views import progress as mod
from wuttaweb.progress import get_progress_session
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestProgressView(WebTestCase):

View file

@ -8,7 +8,7 @@ import colander
from wuttaweb.views import roles as mod
from wuttaweb.forms.schema import RoleRef
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestRoleView(WebTestCase):

View file

@ -6,7 +6,7 @@ import colander
from pyramid.httpexceptions import HTTPNotFound
from wuttaweb.views import settings as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestAppInfoView(WebTestCase):

View file

@ -8,7 +8,7 @@ from unittest.mock import patch, MagicMock
from wuttaweb.views import upgrades as mod
from wuttjamaican.exc import ConfigurationError
from wuttaweb.progress import get_progress_session
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestUpgradeView(WebTestCase):

View file

@ -7,7 +7,7 @@ from sqlalchemy import orm
import colander
from wuttaweb.views import users as mod
from tests.util import WebTestCase
from wuttaweb.testing import WebTestCase
class TestUserView(WebTestCase):